integral can handle oscillatory integrands as long as there aren't too many oscillations, and you supply plenty of WayPoints in the difficult-to-evaluate areas. Think of this input as you telling the solver "these are the interesting areas you'll want to be aware of".
If that doesn't work, you should switch to using quadgk with the same waypoints, but also a large value for MaxIntervalCount. integral uses a large enough default value for MaxIntervalCount so that it rarely needs to be adjusted, but when it does, quadgk let's you make it as large as you want for really problematic integrands. If you don't make it large enough, quadgk will return a message instructing you how much larger to make MaxIntervalCount to complete another iteration.