For the complete documentation index, see llms.txt. This page is also available as Markdown.

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, phone and otp, 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_login

The 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

What you write
What happens

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?