Without knowing the usecase too much you need vary the following variables:
- contrast (simulate colors and different lighting conditions)
- shadows
- blur
- viewing angles (perspective distortion)
- occlusions
- different QR code versions (v1, v5, v20 etc.)
- noise (introduced by camera gain)
- camera lens distortion
Maybe not all is relevant to your usecase, but these are the main challenges.