Recipes
Six complete, runnable Drizz tests — login, checkout, multi-app, mobile web, location and data-driven runs.
Six complete tests against ShopEase, the demo app used throughout these docs. Each runs as written.
Platforms
Android · iOS— except where a recipe says otherwise
Demo app
ShopEase — com.shopease.android / com.shopease.ios
Test user
qa@example.com · phone 9000000000 · OTP 123456
Every recipe
Ends in CLEAR_APP so the next test starts clean
Watch out
CLEAR_APP is effectively a no-op on iOS. Log out explicitly instead
Prerequisites
Drizz desktop app installed and signed in
ShopEase registered as an app, with a device or emulator connected
A dataset supplying
app_package,phoneandotp, bound to the plan
1 · Login with OTP
The setup module every other recipe calls, driven by dataset variables.
# BEGIN shopease_login
OPEN_APP {{app_package}}
Wait Until 5 Seconds
IF Validate that the location permission prompt is visible
{
Tap on While using the app
Wait Until 1 Seconds
}
Type {{phone}} in the mobile number field
Tap on Get OTP
Wait Until 3 Seconds
Type {{otp}} in the OTP field
Tap on Continue
Wait Until 5 Seconds
Validate that the home screen is visible
# END shopease_loginThe test that proves it works:
An app that returns the OTP on screen rather than by SMS supports capturing it instead of hardcoding it:
2 · Search, add to cart, check out
The five-beat test — setup, navigate, act, validate, clean up — with a before/after numeric comparison.
3 · Multi-app: place an order, accept it in the partner app
Switching between two apps in one test with OPEN_APP, carrying a value across the switch.
OPEN_APP switches apps directly. MINIMISE_APP followed by a tap on the app from the home screen is the slower alternative, closer to what a person does. Variables survive the switch — {{order_id}} captured in ShopEase is still set in the partner app.
4 · Mobile web: check the order on the website
Validating the same data in an app and in a browser, in one test.
The browser is another app. Tap, Type and Validate work the same on a web page.
5 · Location: offers change with the city
Mocking GPS, and the kill-and-relaunch that makes the app pick it up. Android only — SET_GPS mocks the device location, and the app has to be restarted to read it.
An app already running keeps the location it started with. SET_GPS without a restart changes nothing and the test passes for the wrong reason. A test that needs one location throughout sets it before OPEN_APP and skips the restart.
6 · Data-driven: one test, every environment and account
A single script driven entirely by a dataset, so it runs against staging, production, or ten different users without editing.
The dataset, shopease_staging:
The test:
Nothing in the script names an environment. A second dataset, shopease_production, with the production package and a production account, bound to a second plan, covers production from the same file.
Accounts that can't be shared between parallel runs go in a lockable pool, so each run leases its own row.
Common mistakes
SET_GPS without killing and relaunching the app
The app keeps the location it started with. The test passes for the wrong reason
OPEN_APP with no package argument
Fails by design. The package is required
Browser steps with app-length waits
The page hasn't loaded and the validation fails
A hardcoded package in a data-driven test
The one line you have to edit per environment, which someone will forget
Chaining all six recipes into one test
When it fails you don't know which feature broke
CLEAR_APP as teardown on iOS
Does effectively nothing. Log out explicitly instead
Reusing one variable name across an app switch
The second capture overwrites the first, and the comparison is meaningless
Next
Last updated: 6 August 2026
Last updated
Was this helpful?