Run the App's Tests. But is that testing everything the app needs to use? Maybe it'll break on the next click. Why not go the whole hog? Our app has an integration test suite (or should have). We spent a lot of money on it!
Local Dev. Env Production Staging Why don't we: * Spin up a new account on staging. * Run the integration tests against that new account. * Throw away the account afterwards.
Local Dev. Env Production Staging Do the same for production! Have these tests run over and over again. Chew up some of your production capacity, but have greater surety that your app works when placed into the staging and production environments you've configured and rolled out.
Local Dev. Env Production Staging We're testing the app+infrastructure interface. We're testing that the, say, file upload feature on your chat app actually works with the infrastructure it's relying on.
Local Dev. Env Production Staging It's not super-easy or perfect, and testing interactions with external systems (particularly payment ones) is hard, and might just involve turning off parts of your test and instrumenting detection of errors instead.
Local Dev. Env Production Staging And finally, to be clear, this isn't replacing your environment tests (eg. available disk/RAM/CPU) or error-rate instrumentation; this is to alleviate the need for a ton of individual fine-grained service checks that would be better tested by an app being hit by your existing test suite.
I work at OrionVM and we're hiring; we're building cloud hosting (physical) infrastructure, and we're after an Ops person (networking+routing, physical server wrangling, configuration management) and a Ruby/JS dev (UI) to help out.