Difference between "doNothingFor()" and "pause()" in a Simulation?

I am modeling a service that is projected to respond with varying amounts of latency / delay that fall within a defined range.
The dev team created a mock endpoint that can simulate different service response times by putting its thread to sleep for a certain number of milliseconds. We can vary this for different requests by passing in different values through the query string.

I’m wondering how things would change if we used Gatling to simulate this delay instead of doing it on the server side.

With that said, I’m not sure of the difference between using doNothingFor(500) in my injectionStep versus using pause(500) in the scenario.

Does one offer special advantages over the other?

How would these values be calculated in the report metrics?

doNothingFor means that no new virtual user will be injected during this period. It’s a way to shape your injection profile.

pause is a step in the scenario, performed by each individual virtual user when it will reach it.

So,it's sounding like donothingFor() might be closer to what we're trying to simulate.

How does this work? If we put this delay into the load profile, would it be counted as part of the response times?

This is my concern with the way we are doing it now. all of our response times are over 1000 ms because the endpoint delay is being counted along with actual response time.

No, doNothingFor is part of the inject DSL = Gatling won’t inject any new virtual user during this period.
It has nothing to do with response times.