Skip to content

Device conditions

Put the device in the state where your bug happens.

Hold the battery at 12%, drop the network to a metro tunnel, switch the phone to Japanese. The settings apply to a phone while it runs. Most take effect at once and the app you are testing keeps running.

Three ways

A setting can be changed from three places.

What separates them is when the setting takes hold. One right now, one at the start of every test, one in the middle of a test.

  1. 1

    From the panel, right now

    Set the value in the panel next to the running device and apply it. It changes while the phone is on, and your app doesn't close.

  2. 2

    From the environment, in every test

    Save the same values to an environment. Prepare something like "Turkish phone" or "weak signal, low battery" once and reuse it in every test.

  3. 3

    From a step, mid-test

    Ready-made steps change the state during the test. Cut the network once checkout is on screen, then bring it back.

Mid-test

Change the state at the exact moment the bug would show.

The phone's state can be a step in the scenario. In this test the agent first goes to checkout. Then the connection drops to a subway tunnel, the speed falls to Edge and the connection cuts out at intervals. The agent places the order like that and checks whether the order was created only once.

A TestSafe scenario screen. Four boxes connected in order: search for Classic Hoodie, add it to the cart and go to checkout, Set Network Conditions, fill in the address and card details, place the order and open the Orders tab, does this order appear only once on the Orders page.
The scenario screen in TestSafe. The box in the middle is the ready-made step that changes the network.

Steps that can slot in the same way

  • Drop the battery
  • Make the phone ring
  • Send an SMS
  • Turn Wi-Fi off
  • Turn the phone sideways
  • Change the language
  • Move the location

We tried it on our own apps

Bugs don't hide in normal use. They hide at the edges.

These bugs could be in your app too. Each one shows up only under a certain condition, like when the connection slows down, when the phone language changes, when the battery runs low or when a call comes in at checkout. We hid them in our own apps. TestSafe changed the condition itself in the middle of the test and caught the bug on video.

0:00

driver arriving, time left counting down

At 10% battery, the arrival time freezes

The battery drops to 10% while the driver is on the way. To save power the app stops updating the map, and the arrival time stops with it. The ride starts, but the screen still says 10 seconds.

TestSafe report

The ride ETA timer froze at 'ETA 10 s' and did not count down after waiting 15 seconds.

Conditions

Every setting has its own panel.

These are the panels as they exist in the product, opened against a running device. Each one applies on its own. A checkbox writes the same values into the environment so the next start comes up that way. Settings take effect at once.

These panels are the ones game studios use most. See how it works for games

The quickest way to see this is on something you already ship.

Book a demo

Questions

Fair questions, before you book

Is this the same as testing on a physical device?

Not identical, and it doesn't need to be. A full Android system runs in every environment, but the hardware underneath is our server, not a phone. Problems specific to a phone's own chipset or to a manufacturer's skin still show up on physical hardware. You keep checking a few physical phones before a release. What goes away is the shelf of phones kept on a desk for daily manual testing.

Will my app act differently because it isn't a physical phone?

The parts your app touches are the same as on a phone. Every environment boots an AOSP system image, and touches arrive through the same input path a physical screen uses, so the framework, the sensors and the input devices work the way they do on a phone. What we don't claim is a way around emulator detection. If your build blocks non-physical devices, say so on the call and we'll work through it.

Do Google Play services work?

Yes. Play services, the Play Store, GSF and Chrome are in the image, so the paths that depend on them (sign-in, push, purchase flows) run the way they would in a user's hand. Apps that refuse to start without GMS start here.

Do I have to change my app or add an SDK?

No. We install the exact build you ship, the same file that goes to the store, unmodified. There is no library to add, no build flavour to maintain, and nothing extra reaches the version your users download.

Who sets the conditions, me or the agent?

Either. Conditions can be written into the scenario, so a run always reaches checkout on a dying battery. Or you open the device panel and change them by hand while the run is going. Drop the signal now, switch the language now, and watch what the app does. Which condition groups an agent is allowed to touch is a permission you set, and a group that is off is never offered to the model at all.

How many environments can run at once?

Environments are containers rather than a shelf of phones, so a suite spreads across them instead of queueing for whichever device is free. Adding one takes seconds, with nothing to buy, rack or replace. How many run in parallel is a plan question, and we'll size it with you.

See it on your own build.

Book a demo and we'll set up the conditions your bug lives in, on your app, while you watch.