0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙OS開發(fā)實(shí)戰(zhàn):【自動(dòng)化測(cè)試框架】使用指南

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-04-08 14:49 ? 次閱讀

概述

為支撐HarmonyOS操作系統(tǒng)的自動(dòng)化測(cè)試活動(dòng)開展,我們提供了支持JS/TS語言的單元及UI測(cè)試框架,支持開發(fā)者針對(duì)應(yīng)用接口進(jìn)行單元測(cè)試,并且可基于UI操作進(jìn)行UI自動(dòng)化腳本的編寫。

本指南重點(diǎn)介紹自動(dòng)化測(cè)試框架的主要功能,同時(shí)介紹編寫單元/UI自動(dòng)化測(cè)試腳本的方法以及執(zhí)行過程。

簡介

HarmonyOS自動(dòng)化測(cè)試框架arkxtest,作為HarmonyOS工具集的重要組成部分,提供了HarmonyOS自動(dòng)化腳本編寫和運(yùn)行的基礎(chǔ)能力。編寫方面提供了一系列支持測(cè)試腳本編寫的API,包括了基礎(chǔ)流程API、斷言API以及UI操作相關(guān)的API,運(yùn)行方面提供了識(shí)別測(cè)試腳本、調(diào)度執(zhí)行測(cè)試腳本以及匯總測(cè)試腳本執(zhí)行結(jié)果的能力。

實(shí)現(xiàn)原理

框架重要分為兩大部分:單元測(cè)試框架和UI測(cè)試框架。

  • 單元測(cè)試框架
    單元測(cè)試框架是測(cè)試框架的基礎(chǔ)底座,提供了最基本的用例識(shí)別、調(diào)度、執(zhí)行及結(jié)果匯總的能力。主要功能如下圖所示:
    image.png
    單元測(cè)試腳本的基礎(chǔ)運(yùn)行流程如下圖所示,依賴aa test命令作為執(zhí)行入口,該命令可具體參考。
    image.png
  • UI測(cè)試框架
    UI測(cè)試框架主要對(duì)外提供了[UiTest API]供開發(fā)人員在對(duì)應(yīng)測(cè)試場(chǎng)景調(diào)用,而其腳本的運(yùn)行基礎(chǔ)還是上面提到的單元測(cè)試框架。
    UI測(cè)試框架的主要功能如下圖所示:
    image.png

約束與限制

  • UI測(cè)試框架的能力在HarmonyOS 3.0 release版本之后方可使用,歷史版本不支持使用。
  • 單元測(cè)試框架的部分能力與其版本有關(guān)。

更多鴻蒙開發(fā)應(yīng)用知識(shí)已更新[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]參考前往。

環(huán)境準(zhǔn)備

[docs.qq.com/doc/DUmN4VVhBd3NxdExK]

搜狗高速瀏覽器截圖20240326151547.png

環(huán)境要求

或者添加mau123789是v喔記住添加

自動(dòng)化腳本的編寫主要基于DevEco Studio,并建議使用3.1.0.400之后的版本進(jìn)行腳本編寫。

腳本執(zhí)行需要PC連接HarmonyOS設(shè)備,如JAD等。

搭建環(huán)境

DevEco Studio可參考其官網(wǎng)介紹進(jìn)行下載,并進(jìn)行相關(guān)的配置動(dòng)作。

新建測(cè)試腳本

  1. 在DevEco Studio中新建應(yīng)用開發(fā)工程,其中ohos目錄即為測(cè)試腳本所在的目錄。
  2. 在工程目錄下打開待測(cè)試模塊下的ets文件,將光標(biāo)置于代碼中任意位置,單擊 右鍵 > Show Context Actions> Create Ohos Test或快捷鍵 Alt+enter> Create Ohos Test創(chuàng)建測(cè)試類。

編寫單元測(cè)試腳本

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));
    }
  })
}復(fù)制

單元測(cè)試腳本需要包含如下基本元素:

1、依賴導(dǎo)包,以便使用依賴的測(cè)試接口。

2、測(cè)試代碼編寫,主要編寫測(cè)試代碼的相關(guān)邏輯,如接口調(diào)用等。

3、斷言接口調(diào)用,設(shè)置測(cè)試代碼中的檢查點(diǎn),如無檢查點(diǎn),則不可認(rèn)為一個(gè)完整的測(cè)試腳本。

編寫UI測(cè)試腳本

UI測(cè)試腳本是在單元測(cè)試框架的基礎(chǔ)上編寫,主要就是增加了UI測(cè)試框架提供的接口調(diào)用,實(shí)現(xiàn)對(duì)應(yīng)的測(cè)試邏輯。

下面的示例代碼是在上面的測(cè)試腳本基礎(chǔ)上增量編寫,首先需要增加依賴導(dǎo)包,如下示例代碼所示:

import {Driver,ON,Component,MatchPattern} from '@ohos.UiTest

然后是具體測(cè)試代碼編寫,場(chǎng)景較為簡單,就是在啟動(dòng)的應(yīng)用頁面上進(jìn)行點(diǎn)擊操作,然后增加檢查點(diǎn)檢查用例。

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));
    }
  })
}

說明

只支持應(yīng)用內(nèi)使用。暫不支持應(yīng)用外的場(chǎng)景實(shí)現(xiàn)自動(dòng)化,例如與權(quán)限彈窗和SystemUi上的控件進(jìn)行交互。

執(zhí)行測(cè)試腳本

執(zhí)行測(cè)試腳本可以直接在DevEco Studio中通過點(diǎn)擊按鈕執(zhí)行,當(dāng)前支持以下執(zhí)行方式:

1、測(cè)試包級(jí)別執(zhí)行即執(zhí)行測(cè)試包內(nèi)的全部用例。

2、測(cè)試套級(jí)別執(zhí)行即執(zhí)行describe方法中定義的全部測(cè)試用例。

3、測(cè)試方法級(jí)別執(zhí)行即執(zhí)行指定it方法也就是單條測(cè)試用例。

image.png

查看測(cè)試結(jié)果

測(cè)試執(zhí)行完畢后可直接在DevEco Studio中查看測(cè)試結(jié)果,如下圖示例所示:

image.png

常見問題

單元測(cè)試用例常見問題

1、用例中增加的打印日志在用例結(jié)果之后才打印

問題描述

用例中增加的日志打印信息,沒有在用例執(zhí)行過程中出現(xiàn),而是在用例執(zhí)行結(jié)束之后才出現(xiàn)。

可能原因

此類情況只會(huì)存在于用例中有調(diào)用異步接口的情況,原則上用例中所有的日志信息均在用例執(zhí)行結(jié)束之前打印。

解決方法

當(dāng)被調(diào)用的異步接口多于一個(gè)時(shí),建議將接口調(diào)用封裝成Promise方式調(diào)用。

2、執(zhí)行用例時(shí)報(bào)error:fail to start ability

問題描述

執(zhí)行測(cè)試用例時(shí)候,用例執(zhí)行失敗,控制臺(tái)返回錯(cuò)誤:fail to start ability。

可能原因

測(cè)試包打包過程中出現(xiàn)問題,未將測(cè)試框架依賴文件打包在測(cè)試包中。

解決方法

檢查測(cè)試包中是否包含TestRunner.abc文件,如沒有則重新編譯打包后再次執(zhí)行測(cè)試。

3、執(zhí)行用例時(shí)報(bào)用例超時(shí)錯(cuò)誤

問題描述

用例執(zhí)行結(jié)束,控制臺(tái)提示execute time XXms錯(cuò)誤,即用例執(zhí)行超時(shí)

可能原因

1.用例執(zhí)行異步接口,但執(zhí)行過程中沒有執(zhí)行到done函數(shù),導(dǎo)致用例執(zhí)行一直沒有結(jié)束,直到超時(shí)結(jié)束。

2.用例調(diào)用函數(shù)耗時(shí)過長,超過用例執(zhí)行設(shè)置的超時(shí)時(shí)間。

解決方法

1.檢查用例代碼邏輯,確保即使斷言失敗場(chǎng)景認(rèn)可走到done函數(shù),保證用例執(zhí)行結(jié)束。

2.可在IDE中Run/Debug Configurations中修改用例執(zhí)行超時(shí)配置參數(shù),避免用例執(zhí)行超時(shí)。

UI測(cè)試用例常見問題

1、失敗日志有“Get windows failed/GetRootByWindow failed”錯(cuò)誤信息

問題描述

UI測(cè)試用例執(zhí)行失敗,查看hilog日志發(fā)現(xiàn)日志中有“Get windows failed/GetRootByWindow failed”錯(cuò)誤信息。

可能原因

系統(tǒng)ArkUI開關(guān)未開啟,導(dǎo)致被測(cè)試界面控件樹信息未生成。

解決方法

執(zhí)行如下命令,并重啟設(shè)備再次執(zhí)行用例。

hdc shell param set persist.ace.testmode.enabled

2、失敗日志有“uitest-api dose not allow calling concurrently”錯(cuò)誤信息

問題描述

UI測(cè)試用例執(zhí)行失敗,查看hilog日志發(fā)現(xiàn)日志中有“uitest-api dose not allow calling concurrently”錯(cuò)誤信息。

可能原因

1.用例中UI測(cè)試框架提供異步接口沒有增加await語法糖調(diào)用。

2.多進(jìn)程執(zhí)行UI測(cè)試用例,導(dǎo)致拉起多個(gè)UITest進(jìn)程,框架不支持多進(jìn)程調(diào)用。

解決方法

1.檢查用例實(shí)現(xiàn),異步接口增加await語法糖調(diào)用。

2.避免多進(jìn)程執(zhí)行UI測(cè)試用例。

3、失敗日志有“dose not exist on current UI! Check if the UI has changed after you got the widget object”錯(cuò)誤信息

問題描述

UI測(cè)試用例執(zhí)行失敗,查看hilog日志發(fā)現(xiàn)日志中有“dose not exist on current UI! Check if the UI has changed after you got the widget object”錯(cuò)誤信息。

可能原因

在用例中代碼查找到目標(biāo)控件后,設(shè)備界面發(fā)生了變化,導(dǎo)致查找到的控件丟失,無法進(jìn)行下一步的模擬操作。

解決方法

重新執(zhí)行UI測(cè)試用例。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 自動(dòng)化測(cè)試

    關(guān)注

    0

    文章

    210

    瀏覽量

    26908
  • 框架
    +關(guān)注

    關(guān)注

    0

    文章

    403

    瀏覽量

    17483
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1975

    瀏覽量

    30182
  • 鴻蒙OS
    +關(guān)注

    關(guān)注

    0

    文章

    188

    瀏覽量

    4390
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    OPhone自動(dòng)化測(cè)試技術(shù)概述

    上可采用的幾種自動(dòng)化測(cè)試技術(shù)進(jìn)行介紹,并對(duì)每種技術(shù)的優(yōu)缺點(diǎn)做簡要的總結(jié)。OPhone臺(tái)除了為應(yīng)用程序開發(fā)提供豐富的API外,也為開展自動(dòng)化測(cè)試
    發(fā)表于 05-06 08:58

    基于LAN的自動(dòng)化測(cè)試系統(tǒng)開放指南

    自動(dòng)化測(cè)試開發(fā)指南
    發(fā)表于 09-02 12:34

    自動(dòng)化測(cè)試框架思想和構(gòu)建

    自動(dòng)化測(cè)試一般是指軟件測(cè)試自動(dòng)化,軟件測(cè)試就是在預(yù)設(shè)條件下運(yùn)行系統(tǒng)或應(yīng)用程序,評(píng)估運(yùn)行結(jié)果,預(yù)先條件應(yīng)包括正常條件和異常條件。本文介紹的是
    發(fā)表于 07-18 06:52

    HarmonyOS自動(dòng)化測(cè)試框架—Hypium

    ??,點(diǎn)擊鏈接查看更多技術(shù)內(nèi)容。 應(yīng)用開發(fā)過程中,要確保應(yīng)用的功能和界面能滿足預(yù)期,往往需要通過測(cè)試來驗(yàn)證。為此,我們研發(fā)了一套新的自動(dòng)化測(cè)試框架
    發(fā)表于 08-10 17:13

    HamronyOS自動(dòng)化測(cè)試框架使用指南

    概述 為支撐 HarmonyOS 操作系統(tǒng)的自動(dòng)化測(cè)試活動(dòng)開展,我們提供了支持 JS/TS 語言的單元及 UI 測(cè)試框架,支持開發(fā)者針對(duì)應(yīng)用
    發(fā)表于 12-19 10:26

    常用軟件測(cè)試自動(dòng)化框架

    自動(dòng)化測(cè)試框架無疑是企業(yè)實(shí)施自動(dòng)化測(cè)試的一個(gè)必然的發(fā)展方向,它對(duì)于產(chǎn)生成功的測(cè)試
    發(fā)表于 04-21 11:39 ?5063次閱讀

    全面提升自動(dòng)化測(cè)試,NI TestStand 2012新模塊框架

    NI TestStand 2012采用全新的模塊框架,能夠簡化自動(dòng)化測(cè)試開發(fā)和報(bào)告生成。
    發(fā)表于 11-06 17:42 ?1779次閱讀

    基于Web的自動(dòng)化測(cè)試框架的研究

    根據(jù)web系統(tǒng)測(cè)試的特點(diǎn),為提高軟件測(cè)試自動(dòng)化腳本的可重用性,結(jié)合在實(shí)際項(xiàng)目中軟件自動(dòng)化測(cè)試的實(shí)踐,提出基于Web的
    發(fā)表于 11-07 15:58 ?0次下載
    基于Web的<b class='flag-5'>自動(dòng)化</b><b class='flag-5'>測(cè)試</b><b class='flag-5'>框架</b>的研究

    Python自動(dòng)化測(cè)試框架有哪些?

    開發(fā)者萬分高興的是,開發(fā)自己的測(cè)試框架的日子終于結(jié)束了。以前,開發(fā)團(tuán)隊(duì)接手一個(gè)項(xiàng)目并開始開發(fā)時(shí)
    的頭像 發(fā)表于 07-28 09:06 ?4670次閱讀

    Python接口測(cè)試框架實(shí)戰(zhàn)自動(dòng)化進(jìn)階視頻教程免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是Python接口測(cè)試框架實(shí)戰(zhàn)自動(dòng)化進(jìn)階視頻教程免費(fèi)下載主要包括了:第1章 接口測(cè)試基礎(chǔ)回顧,第2章 fiddl
    發(fā)表于 08-28 15:32 ?75次下載
    Python接口<b class='flag-5'>測(cè)試</b><b class='flag-5'>框架</b><b class='flag-5'>實(shí)戰(zhàn)</b>與<b class='flag-5'>自動(dòng)化</b>進(jìn)階視頻教程免費(fèi)下載

    什么是自動(dòng)化測(cè)試框架

    這些優(yōu)勢(shì)可以是不同的形式,如易于編寫腳本、可伸縮性、模塊、可理解性、過程定義、可重用性、成本、維護(hù)等。因此,為了能夠獲得這些好處,建議開發(fā)人員使用一個(gè)或多個(gè)自動(dòng)化測(cè)試
    的頭像 發(fā)表于 11-03 10:33 ?4353次閱讀

    HarmonyOS測(cè)試技術(shù)與實(shí)戰(zhàn)-音視頻體驗(yàn)精準(zhǔn)自動(dòng)化測(cè)試技術(shù)

    HDC 2021華為開發(fā)者大會(huì) HarmonyOS測(cè)試技術(shù)與實(shí)戰(zhàn)-音視頻體驗(yàn)精準(zhǔn)自動(dòng)化測(cè)試技術(shù)
    的頭像 發(fā)表于 10-23 15:51 ?1489次閱讀
    HarmonyOS<b class='flag-5'>測(cè)試</b>技術(shù)與<b class='flag-5'>實(shí)戰(zhàn)</b>-音視頻體驗(yàn)精準(zhǔn)<b class='flag-5'>化</b><b class='flag-5'>自動(dòng)化</b><b class='flag-5'>測(cè)試</b>技術(shù)

    自動(dòng)化測(cè)試框架unittes詳解

    測(cè)試框架,不妨“軟為硬用”。這里就基于python的自動(dòng)化測(cè)試框架unittest來實(shí)現(xiàn)一個(gè)簡單的自動(dòng)
    的頭像 發(fā)表于 05-20 14:47 ?2941次閱讀

    什么是自動(dòng)化測(cè)試框架

    自動(dòng)化測(cè)試框架,即是應(yīng)用于自動(dòng)化測(cè)試所用的框架。按照框架
    發(fā)表于 04-18 14:44 ?922次閱讀

    OpenHarmony自動(dòng)化測(cè)試框架開發(fā)指南

    OpenHarmony 自動(dòng)化測(cè)試框架是 OpenHarmony 提供的支持 JS/TS 語言的單元及 UI 測(cè)試框架,支持
    的頭像 發(fā)表于 05-15 09:35 ?1391次閱讀
    OpenHarmony<b class='flag-5'>自動(dòng)化</b><b class='flag-5'>測(cè)試</b><b class='flag-5'>框架開發(fā)指南</b>