Test Framework Usage

Overview

The delegator test framework provides a self-test environment for OpenHarmony applications. Using this framework, you can start an ability, schedule its lifecycle, listen for its state changes, run a shell command, and print the test result.

Constraints

The APIs provided by the test framework can be used only in the test HAP. They take effect only after the test framework is started.

Starting the Test Framework

The test framework can be started in either of the following ways:

  • Method 1: Run the aa test command.
  • Method 2: Use DevEco Studio.

Running aa test

To start the test framework, specify the TestRunner and the package name or module name of the HAP where the TestRunner is located.

An example command in the FA model is as follows:

aa test -b BundleName -p com.example.myapplicationfaets -s unittest OpenHarmonyTestRunner -s class ActsAbilityTest -w 20

An example command in the stage model is as follows:

aa test -b BundleName -m com.example.myapplicationfaets -s unittest OpenHarmonyTestRunner -s class ActsAbilityTest -w 20
Parameter Mandatory Description
-b Yes Bundle name of the HAP where the TestRunner is located.
-p Yes Package name of the HAP where the TestRunner is located. This parameter is used by the FA model.
-m Yes Module name of the HAP where the TestRunner is located. This parameter is used by the stage model.
-s unittest Yes Name of the TestRunner to be used. The TestRunner name must be the same as the file name.
-w No Timeout interval of a test case, in seconds. If this parameter is not specified or is set to a value less than or equal to 0, the test framework exits only after finishTest is invoked.
-s <key><value> No -s can be followed by any key-value pair obtained through AbilityDelegatorArgs.parameters. For example, in -s classname myTest, -s classname is the key and myTest is the value.
-D No Debug mode for starting the tested application.
-h No Help information.

Using DevEco Studio

For details about how to use DevEco Studio to start the test framework, see OpenHarmony Test Framework.

Introduction to TestRunner

TestRunner is the entry class of the test framework test process. When the test process is started, the system calls related APIs in TestRunner. You need to inherit this class and override the onPrepare and onRun APIs. When creating an application template, DevEco Studio initializes the default TestRunner and starts the default TestAbility in the onRun API. You can modify the test code of TestAbility or override onPrepare and onRun in TestRunner to implement your own test code. For details, see TestRunner.

Introduction to AbilityDelegatorRegistry

AbilityDelegatorRegistry is the AbilityDelegator repository class provided by the test framework. You can use AbilityDelegatorRegistry to obtain an AbilityDelegator instance and the input and generated parameters AbilityDelegatorArgs during the test. You can use AbilityDelegator to invoke the function set provided by the test framework for testing and verification. For details, see AbilityDelegatorRegistry.

Introduction to AbilityDelegatorArgs

AbilityDelegatorArgs is a test parameter class provided by the test framework. You can use AbilityDelegatorArgs to obtain the parameters passed and generated during the test. For details, see AbilityDelegatorArgs.

Introduction to AbilityMonitor

AbilityMonitor is provided by the test framework for binding to and listening for abilities. You can use AbilityMonitor to bind to an Ability instance and add AbilityMonitor to the listening list. When AbilityMonitor is bound to an ability, the creation and lifecycle changes of the ability will trigger the related callback in AbilityMonitor. You can test and verify the ability in these callbacks. For details, see AbilityMonitor.

Example

import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry'

function onAbilityCreateCallback(data) {
    console.info("onAbilityCreateCallback");
}

var monitor = {
    abilityName: "abilityname",
    onAbilityCreate: onAbilityCreateCallback
}

var abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator();
abilityDelegator.addAbilityMonitor(monitor).then(() => {
    console.info("addAbilityMonitor promise");
});

Introduction to AbilityDelegator

AbilityDelegator is a main function class of the test framework. It provides the functions of starting an ability, obtaining an Ability instance, scheduling the ability lifecycle, listening for the ability state, and printing test results.

Modules to Import

import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry'
var abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator()

Starting an Ability and Listening for the Ability State

Use AbilityDelegator and AbilityMonitor to start an ability, obtain an Ability instance, and listen for the ability state.

Example

var abilityDelegator;
var ability;
var timeout = 100;

function onAbilityCreateCallback(data) {
    console.info("onAbilityCreateCallback");
}

var monitor = {
    abilityName: "abilityname",
    onAbilityCreate: onAbilityCreateCallback
}

abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator();
abilityDelegator.waitAbilityMonitor(monitor, timeout, (err, data) => {
    ability = data;
    console.info("waitAbilityMonitor callback");
});

var want = {
    bundleName: "bundleName",
    abilityName: "abilityName"
};
abilityDelegator.startAbility(want, (err, data) => {
    console.info("startAbility callback");
});

Scheduling the Ability Lifecycle

AbilityDelegator provides APIs to display and schedule the ability lifecycle and supports the foreground and background. It works with AbilityMonitor to listen for the ability lifecycle. For details, see AbilityDelegator.

Running a Shell Command

AbilityDelegator provides APIs to run shell commands in the test environment.

Example

var abilityDelegator;
var cmd = "cmd";
abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator();
abilityDelegator.executeShellCommand(cmd, (err, data) => {
    console.info("executeShellCommand callback");
});

Printing Log Information

AbilityDelegator provides APIs for printing log information. You can call any API in the test code to print process logs to the unit test console.

Example

var abilityDelegator;
var msg = "msg";

abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator();
abilityDelegator.print(msg, (err) => {
    console.info("print callback");
});

Finishing the Test and Printing Log Information

AbilityDelegator provides the APIs for actively finishing the test. You can call any API in test code to finish the test and print logs to the unit test console.

Example

var abilityDelegator;
var msg = "msg";

abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator();
abilityDelegator.finishTest(msg, 0, (err) => {
    console.info("finishTest callback");
});