概述
為支撐HarmonyOS操作系統的自動化測試活動開展,我們提供了支持JS/TS語言的單元及UI測試框架,支持開發者針對應用接口進行單元測試,并且可基于UI操作進行UI自動化腳本的編寫。
本指南重點介紹自動化測試框架的主要功能,同時介紹編寫單元/UI自動化測試腳本的方法以及執行過程。
簡介
HarmonyOS自動化測試框架arkxtest,作為HarmonyOS工具集的重要組成部分,提供了HarmonyOS自動化腳本編寫和運行的基礎能力。編寫方面提供了一系列支持測試腳本編寫的API,包括了基礎流程API、斷言API以及UI操作相關的API,運行方面提供了識別測試腳本、調度執行測試腳本以及匯總測試腳本執行結果的能力。
實現原理
框架重要分為兩大部分:單元測試框架和UI測試框架。
- 單元測試框架
單元測試框架是測試框架的基礎底座,提供了最基本的用例識別、調度、執行及結果匯總的能力。主要功能如下圖所示:
單元測試腳本的基礎運行流程如下圖所示,依賴aa test命令作為執行入口,該命令可具體參考。 - UI測試框架
UI測試框架主要對外提供了[UiTest API]供開發人員在對應測試場景調用,而其腳本的運行基礎還是上面提到的單元測試框架。
UI測試框架的主要功能如下圖所示:
約束與限制
- UI測試框架的能力在HarmonyOS 3.0 release版本之后方可使用,歷史版本不支持使用。
- 單元測試框架的部分能力與其版本有關。
更多鴻蒙開發應用知識已更新[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md
]參考前往。
環境準備
[docs.qq.com/doc/DUmN4VVhBd3NxdExK
]
環境要求
或者添加mau123789是v喔記住添加
自動化腳本的編寫主要基于DevEco Studio,并建議使用3.1.0.400之后的版本進行腳本編寫。
腳本執行需要PC連接HarmonyOS設備,如JAD等。
搭建環境
DevEco Studio可參考其官網介紹進行下載,并進行相關的配置動作。
新建測試腳本
- 在DevEco Studio中新建應用開發工程,其中ohos目錄即為測試腳本所在的目錄。
- 在工程目錄下打開待測試模塊下的ets文件,將光標置于代碼中任意位置,單擊 右鍵 > Show Context Actions> Create Ohos Test或快捷鍵 Alt+enter> Create Ohos Test創建測試類。
編寫單元測試腳本
import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'
import abilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry'
const delegator = abilityDelegatorRegistry.getAbilityDelegator()
export default function abilityTest() {
describe('ActsAbilityTest', function () {
it('testUiExample',0, async function (done) {
console.info("uitest: TestUiExample begin");
//start tested ability
await delegator.executeShellCommand('aa start -b com.ohos.uitest -a MainAbility').then(result = >{
console.info('Uitest, start ability finished:' + result)
}).catch(err = > {
console.info('Uitest, start ability failed: ' + err)
})
await sleep(1000);
//check top display ability
await delegator.getCurrentTopAbility().then((Ability)= >{
console.info("get top ability");
expect(Ability.context.abilityInfo.name).assertEqual('MainAbility');
})
done();
})
function sleep(time) {
return new Promise((resolve) = > setTimeout(resolve, time));
}
})
}復制
單元測試腳本需要包含如下基本元素:
1、依賴導包,以便使用依賴的測試接口。
2、測試代碼編寫,主要編寫測試代碼的相關邏輯,如接口調用等。
3、斷言接口調用,設置測試代碼中的檢查點,如無檢查點,則不可認為一個完整的測試腳本。
編寫UI測試腳本
UI測試腳本是在單元測試框架的基礎上編寫,主要就是增加了UI測試框架提供的接口調用,實現對應的測試邏輯。
下面的示例代碼是在上面的測試腳本基礎上增量編寫,首先需要增加依賴導包,如下示例代碼所示:
import {Driver,ON,Component,MatchPattern} from '@ohos.UiTest
然后是具體測試代碼編寫,場景較為簡單,就是在啟動的應用頁面上進行點擊操作,然后增加檢查點檢查用例。
export default function abilityTest() {
describe('ActsAbilityTest', function () {
it('testUiExample',0, async function (done) {
console.info("uitest: TestUiExample begin");
//start tested ability
await delegator.executeShellCommand('aa start -b com.ohos.uitest -a MainAbility').then(result = >{
console.info('Uitest, start ability finished:' + result)
}).catch(err = > {
console.info('Uitest, start ability failed: ' + err)
})
await sleep(1000);
//check top display ability
await delegator.getCurrentTopAbility().then((Ability)= >{
console.info("get top ability");
expect(Ability.context.abilityInfo.name).assertEqual('MainAbility');
})
//ui test code
//init driver
var driver = await Driver.create();
await driver.delayMs(1000);
//find button by text 'Next'
var button = await driver.findComponent(ON.text('Next'));
//click button
await button.click();
await driver.delayMs(1000);
//check text
await driver.assertComponentExist(ON.text('after click'));
await driver.pressBack();
done();
})
function sleep(time) {
return new Promise((resolve) = > setTimeout(resolve, time));
}
})
}
說明
只支持應用內使用。暫不支持應用外的場景實現自動化,例如與權限彈窗和SystemUi上的控件進行交互。
執行測試腳本
執行測試腳本可以直接在DevEco Studio中通過點擊按鈕執行,當前支持以下執行方式:
1、測試包級別執行即執行測試包內的全部用例。
2、測試套級別執行即執行describe方法中定義的全部測試用例。
3、測試方法級別執行即執行指定it方法也就是單條測試用例。
查看測試結果
測試執行完畢后可直接在DevEco Studio中查看測試結果,如下圖示例所示:
常見問題
單元測試用例常見問題
1、用例中增加的打印日志在用例結果之后才打印
問題描述
用例中增加的日志打印信息,沒有在用例執行過程中出現,而是在用例執行結束之后才出現。
可能原因
此類情況只會存在于用例中有調用異步接口的情況,原則上用例中所有的日志信息均在用例執行結束之前打印。
解決方法
當被調用的異步接口多于一個時,建議將接口調用封裝成Promise方式調用。
2、執行用例時報error:fail to start ability
問題描述
執行測試用例時候,用例執行失敗,控制臺返回錯誤:fail to start ability。
可能原因
測試包打包過程中出現問題,未將測試框架依賴文件打包在測試包中。
解決方法
檢查測試包中是否包含TestRunner.abc文件,如沒有則重新編譯打包后再次執行測試。
3、執行用例時報用例超時錯誤
問題描述
用例執行結束,控制臺提示execute time XXms錯誤,即用例執行超時
可能原因
1.用例執行異步接口,但執行過程中沒有執行到done函數,導致用例執行一直沒有結束,直到超時結束。
2.用例調用函數耗時過長,超過用例執行設置的超時時間。
解決方法
1.檢查用例代碼邏輯,確保即使斷言失敗場景認可走到done函數,保證用例執行結束。
2.可在IDE中Run/Debug Configurations中修改用例執行超時配置參數,避免用例執行超時。
UI測試用例常見問題
1、失敗日志有“Get windows failed/GetRootByWindow failed”錯誤信息
問題描述
UI測試用例執行失敗,查看hilog日志發現日志中有“Get windows failed/GetRootByWindow failed”錯誤信息。
可能原因
系統ArkUI開關未開啟,導致被測試界面控件樹信息未生成。
解決方法
執行如下命令,并重啟設備再次執行用例。
hdc shell param set persist.ace.testmode.enabled
2、失敗日志有“uitest-api dose not allow calling concurrently”錯誤信息
問題描述
UI測試用例執行失敗,查看hilog日志發現日志中有“uitest-api dose not allow calling concurrently”錯誤信息。
可能原因
1.用例中UI測試框架提供異步接口沒有增加await語法糖調用。
2.多進程執行UI測試用例,導致拉起多個UITest進程,框架不支持多進程調用。
解決方法
1.檢查用例實現,異步接口增加await語法糖調用。
2.避免多進程執行UI測試用例。
3、失敗日志有“dose not exist on current UI! Check if the UI has changed after you got the widget object”錯誤信息
問題描述
UI測試用例執行失敗,查看hilog日志發現日志中有“dose not exist on current UI! Check if the UI has changed after you got the widget object”錯誤信息。
可能原因
在用例中代碼查找到目標控件后,設備界面發生了變化,導致查找到的控件丟失,無法進行下一步的模擬操作。
解決方法
重新執行UI測試用例。
審核編輯 黃宇
-
自動化測試
+關注
關注
0文章
208瀏覽量
26905 -
框架
+關注
關注
0文章
403瀏覽量
17475 -
HarmonyOS
+關注
關注
79文章
1973瀏覽量
30143 -
鴻蒙OS
+關注
關注
0文章
188瀏覽量
4382
發布評論請先 登錄
相關推薦
評論