In this situation (assuming a 3rd party web service), I don't write the test that actually gets the service to return a rate-limited response. Instead, I have a test that verifies the expected behavior when receiving the response.
Save a rate-limiting response from the service, and pass that response back rather than calling the actual web service. Not only does the test run much faster, it can also run offline and will probably lead to a better code design.
In Java/Mockito-ish pseudo code it would look something like:
// pretend we are rate limited when(client.callService()).thenReturn(RATE_LIMITED_RESPONSE); // call the service response = getResponse(client); // decision based on rate limited response is correct assertEquals(Status.RATE_LIMITED, response.getStatus());
where getResponse() calls client.callService() and subsequently handles all of the logic based on the content of the response.
If you've already got a test like this, then the integration test is really only testing that the web service returns a rate-limited response in a format that you expect.