JMeter's behavior doesn't make sense here at all. A minimized version of my project looks like this:
Thread group
- Outer PreProcessor
- Outer web request
- Loop controller
..- Inner PreProcessor
..- Inner web request
With a thread and loop count of 1 on the Thread group and a loop count of 6 on the loop controller, I would expect Outer PreProcessor to run once and Inner PreProcessor to run 6 times (in each case, the same number of times that the associated web requests run).
Instead, outer runs 7 times, and inner runs 6 times (as determined by console logging). It doesn't make any sense with the project structure, and those extra PreProcessor runs seem to be messing up my variables.
Why would JMeter do things this way, and how do you make it stop?