IT评测·应用市场-qidao123.com技术社区
标题:
[鸿蒙开辟] - 怎样获取HarmonyOS应用的代码覆盖率信息
[打印本页]
作者:
农民
时间:
2024-6-20 20:19
标题:
[鸿蒙开辟] - 怎样获取HarmonyOS应用的代码覆盖率信息
1. 背景
1.1 背景形貌
现在在准备鸿蒙应用的开辟情况,由于项目要求,需要在提交CodeReview的时间,展示单元测试的覆盖率。但是现在并没有针对于鸿蒙应用的打包流程,假如要等一切完善之后再开辟,那时间可太长了,所以需要调研一种可行的短期的方案。
最终的目的是通过自动化的方式将代码覆盖率的数据以文本的方式(coverage: Line Coverage: 100%, Branch Coverage: 100%)添加到git commit的信息中,如下图所示:
1.2 实施计划
先确定下大概的实施计划:
调研怎样构建HarmonyOS应用的单元测试和UI测试;
获取测试覆盖率文件;
怎样通过命令构建HarmonyOS应用和实行HarmonyOS应用的单元测试和UI测试;
通过脚本修改git commit信息;
2.HarmonyOS应用的单元测试和UI测试
2.1 测试概述
HarmonyOS中的自动化测试框架是arkxtest,支持JS/TS语言的单元测试框架(JsUnit)及UI测试框架(UiTest)。
JsUnit
提供单元测试用例实行能力;
提供用例编写基础接口,天生对应报告;
用于测试体系或应用接口;
UiTest
提供了API用于查找和利用界面的控件;
支持用户开辟基于界面利用的自动化测试脚本;
单元测试框架是测试框架的基础,提供了最根本的用例辨认、调度、实行及结果汇总的能力。 UI测试框架紧张对外提供了UiTest API供开辟人员在对应测试场景。
2.2 新建&运行测试脚本
DevEco Studio中新建应用开辟工程,其中ohosTest和test目录均为测试脚本所在的目录,只是有所不同:
Instrument Test: 测试用例存放在ohosTest测试目录下,需要运行在设备或模拟器上,支持单元测试和UI测试;
Local Test: 测试用例存放在test测试目录下,不需要运行在设备或者模拟器上,支持单元测试;
2.2.1 Local Test
a.在工程目录下打开待测试模块的ets文件,将光标置于代码的任意位置,右键 -> Show Context Actions -> Create Local Test创建测试类:
b.在弹出的Create Local Test窗口,配置如下参数:
Testing library: 测试范例,默以为DECC-ArkTSUnit
ArkTS name: 测试套件名称
Destination package: 存放的位置
c.DevEco Studio会在test目录下自动天生对应的测试类。在测试类中,DevEco Studio会天生对应方法的用例模板
d.可以直接在test文件夹上右键实行单元测试:
从图中可以看出,有三个选择:
直接运行测试用例
Debug测试用例
运行测试用例,并天生代码覆盖率文件
DevEco提供了4种运行模式:
工程目录(test),在test文件夹上右键;
测试文件(如LocalUnit.test.ets),在测试文件上右键;
测试套件(describe),测试文件内部
测试方法(it),测试文件内部
这里是以工程目录test为例。
e.查看天生的覆盖率文件:
当运行测试用例,并天生代码覆盖率文件之后,会在控制台输出覆盖率文件的路径:
我们打开该文件,可以看到包含了覆盖率信息,而且可以点击文件,查看详细文件的覆盖率信息:
需要注意的是,单元测试无法针对于UI形貌举行测试,需要使用UI测试,下面是鸿蒙官方在工单中的回复:
2.2.2 Instrument Test
Instrument Test的创建和实行过程和Local Test类似。
a.打开ets文件,将光标置于任意位置,右键->Show Context Actions -> Create Instrument Test创建测试类:
b.和Local Test一样,填写测试套件的名称;
c.DevEco Studio会在ohosTest目录下自动天生对应的测试类,而且也会天生对应方法的用例模板;
d.运行Instrument Test测试用例 运行Instrument Test测试用例需要先将设备和电脑举行毗连,将工程编译成带签名信息的HAP,再安装到真机设备或模拟器上运行。
运行Instrument Test测试用例的方法和模式和Local Test相同,不外针对的是ohosTest文件夹。
c.查看代码覆盖率 Instrument Test也会天生代码覆盖率文件,可以查看所有文件的覆盖率信息,和Local Test一样。
需要注意的是: Instrument Test针对于.ets文件的branch覆盖率,是基于.ets文件编译天生的.js文件举行统计的。
// index.ets:
@Entry
@Component
struct Index {
@State name: string = "aa";
build() {
}
}
// index.js
"use strict";
class Index extends ViewPU {
constructor(parent, params, __localStorage, elmtId = -1, paramsLambda = undefined, extraInfo) {
super(parent, __localStorage, elmtId, extraInfo);
if (typeof paramsLambda === "function") {
this.paramsGenerator_ = paramsLambda;
}
this.__name = new ObservedPropertySimplePU("aa", this, "name");
this.setInitiallyProvidedValue(params);
}
setInitiallyProvidedValue(params) {
if (params.name !== undefined) {
this.name = params.name;
}
}
updateStateVars(params) {
}
purgeVariableDependenciesOnElmtId(rmElmtId) {
this.__name.purgeDependencyOnElmtId(rmElmtId);
}
aboutToBeDeleted() {
this.__name.aboutToBeDeleted();
SubscriberManager.Get().delete(this.id__());
this.aboutToBeDeletedInternal();
}
get name() {
return this.__name.get();
}
set name(newValue) {
this.__name.set(newValue);
}
initialRender() {
}
rerender() {
this.updateDirtyElements();
}
static getEntryName() {
return "Index";
}
}
registerNamedRoute(() => new Index(undefined, {}), "", { bundleName: "com.example.studytest", moduleName: "entry", pagePath: "pages/Index" });
//# sourceMappingURL=Index.js.map
复制代码
该文件对应的覆盖率信息如下:
3. 获取测试覆盖率文件
从上面实行Local Test和Instrument Test天生的覆盖率文件路径可以看出,这个覆盖率文件的路径是固定的:
// Local test:
[项目根目录]/entry/.test/default/outputs/test/reports/index.html
// Instrument test:
[项目根目录]/entry/.test/default/outputs/ohosTest/reports/index.html
复制代码
拿到文件之后,可以通过脚本获取指定标签下的数据,如许就可以自由组合覆盖率信息的文本了:
可以通过这两个路径获取覆盖率文件,那假如我们想实现最终目的的话,肯定就需要通过这个路径获取覆盖率文件举行解析,获取覆盖率信息了。
4.通过命令行构建HarmonyOS应用和实行HarmonyOS应用的测试用例
可以通过这个文档查看支持的命令行的能力: developer.huawei.com/consumer/cn…
4.1 应用编译构建相关任务
举例:
./hvigorw --mode module -p module=entry@default -p product=default -p buildMode=test -p ohos-test-coverage=true assembleHap --analyze --parallel --incremental --daemon
复制代码
4.2 Local Test测试相关命令行
举例:
./hvigorw --mode module -p module=entry@default -p product=default -p pageType=page -p isLocalTest=true -p unitTestMode=true -p ohos-test-coverage=true -p buildRoot=.test UnitTestBuild --analyze --parallel --incremental --daemon
复制代码
4.3 Instrument Test测试相关命令行
在官方文档中并没有发现Instrument Test测试相关的命令行,所以是通过手动的方式实行Instrument Test,然后在DevEco Studio中查看记录,获取到的相关命令如下:
// 构建Hap
./hvigorw assembleHap --mode module -p module=entry@default -p product=default -p buildMode=test -p ohos-test-coverage=true assembleHap --analyze --parallel --incremental --daemon
// 构建测试用的Hap
./hvigorw --mode module -p module=entry@ohosTest -p buildMode=test -p ohos-test-coverage=true assembleHap --analyze --parallel --incremental --daemon
// 通过hdc移除当前设备安装的Hap
hdc uninstall cn.test.aaa
// 通过hdc安装Hap
hdc install "${current_path}/entry/build/default/outputs/default/entry-default-unsigned.hap"
hdc install "${current_path}/entry/build/default/outputs/ohosTest/entry-ohosTest-unsigned.hap"
// 执行Instrument Test命令
hdc shell aa test -b cn.test.aaa -m entry_test -s unittest /ets/testrunner/OpenHarmonyTestRunner -s coverage true -s timeout 15000
复制代码
虽然可以成功的实行Instrument Test测试用例,在实行Instrument Test命令时设置了coverage为true,但遗憾的是并没有天生相关的覆盖率文件,所以也提了一个工单,回复如下:
5. 修改git commit信息
由于我们的开辟流程需要Code Review,所以在实行完git commit之后,不能通过git push命令直接提交接码到堆栈,需要实行cr命令。
通过构建一个脚本,可以实行鸿蒙项目的单元测试,然后读取覆盖率文件的信息,修改git commit信息,那这个脚本应该在什么时间触发呢?
Git hooks 是 Git 版本控制体系中的一个强盛功能,答应用户在 Git 堆栈的特定事故发生时运行自定义脚本。这些脚本(或钩子)可以自动化一些常见的任务,好比代码质量检查、代码格式化、测试运行、提交信息检查等。
Git hooks 可以在堆栈的不同生命周期阶段触发,例如:
pre-commit
:在提交之前运行,可以用来检查代码是否符合规范,或者是否所有测试都通过。
commit-msg
:在提交信息准备完毕时运行,可以用来检查提交信息是否满意肯定的格式要求。
pre-push
:在推送更改到远程堆栈之前运行,可以用来制止不符合条件的更改被推送到远程。
post-merge
:在归并利用完成后运行,可以用来实行一些归并后的清理工作或者重新构建项目。
假如直接实行git push的话,我们可以在pre-push中实行上面的脚本。幸好公司这边的开辟情况也支持类似功能的pre-cr(提交cr前运行的脚本),我们就可以在pre-cr脚本实行上面的任务了,用笔墨形貌一下在pre-cr脚本中实行的任务吧:
清理鸿蒙工程,移除测试产物;
实行单元测试,输出覆盖率文件;
读取覆盖率文件,拼接覆盖率文本信息;
获取最新的commit信息;
通过实行 git commit --amend 命令,插入覆盖率分析;
当开辟者实行完git commit命令之后,提交cr的时间,就可以看到覆盖率信息了:
末了
鸿蒙开辟正其时,现在入手正是好时机。
还在犹豫不决的朋侪们,小编在这里建议大家早点入手!
在这里分享一份
鸿蒙学习门路图
帮助那些不知道怎么入门的朋侪,另外一些鸿蒙开辟的资料文档也趁便分享给大家,
扫下方二维码就能免费送呢!
鸿蒙学习门路图
门路图得当人群:
IT开辟人员:想要拓展职业边界,享受新技术带来的溢价红利
零基础小白:鸿蒙爱好者,希望从0到1学习,增加一项技能
HarmonyOS 4.0 APP Developer
OpenHarmony 5.0 Next视音频
OpenHarmony 5.0 Next进阶
OpenHarmony 5.0 Next分布式
学习资料
内容概要
:
《鸿蒙零基础入门学习指南》、《鸿蒙开辟学习之UI》、《鸿蒙开辟学习之Web》、《鸿蒙开辟学习之应用模子》
内容特点
:条理清楚,含图像化表示更加易懂。
领取方式:扫描下方二维码即可免费领取!!!
[](https://blog.csdn.net/m0_56144365/article/details/136156914?spm=1001.2014.3001.5501)《鸿蒙零基础入门学习指南》 ----------------------------------------------------------------------------------------------------
一、快速入门
适用于HarmonyOS应用开辟的初学者。通过构建一个简单的具有页面跳转/返回功能的应用,快速了解工程目录的紧张文件,熟悉HarmonyOS应用开辟流程。
开辟准备
构建第一个ArkTS应用(Stage模子)
构建第一个ArkTS应用(FA模子)
构建第一个JS应用(FA模子)
二、开辟基础知识
应用步伐包基础知识
应用配置文件(Stage模子)
应用配置文件概述(FA模子)
三、资源分类与访问
应用开辟过程中,经常需要用到颜色、字体、间距、图片等资源,在不同的设备或配置中,这些资源的值可能不同。
资源分类与访问
创建资源目录和资源文件
资源访问
四、学习ArkTs语言
ArkTS是HarmonyOS优选的主力应用开辟语言。ArkTS围绕应用开辟在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。因此,在学习ArkTS语言之前,建议开辟者具备TS语言开辟能力。
初识ArkTS语言
根本语法
状态管理
其他状态管理
渲染控制
领取方式:扫描下方二维码即可免费领取!!!
[](https://blog.csdn.net/m0_56144365/article/details/136156914?spm=1001.2014.3001.5501)《鸿蒙开辟学习之UI》 --------------------------------------------------------------------------------------------------
一、方舟开辟框架(ArkUI)概述
二、基于ArkTS声明式开辟范式
1、UI开辟(ArkTS声明式开辟范式)概述
2、开辟结构
3、添加组件
4、显示图片
5、使用动画
6、支持交互事故
7、性能提升的推荐方法
三、兼容JS的类Web开辟范式
1、概述
2、框架分析
3、构建用户界面
4、常见组件开辟指导
5、动效开辟指导
6、自定义组件
领取方式:扫描下方二维码即可免费领取!!!
《鸿蒙开辟学习之Web》
Web组件概述
使用Web组件加载页面
设置根本属性和事故
设置深色模式
上传文件
在新窗口中打开页面
管理位置权限
在应用中使用前端页面JavaScript
应用侧调用前端页面函数
前端页面调用应用侧函数
建立应用侧与前端页面数据通道
管理页面跳转及浏览记录导航
管理Cookie及数据存储
自定义页面请求相应
使用Devtools工具调试前端页面
ArkTS语言基础类库概述
并发
并发概述
使用异步并发能力举行开辟
使用多线程并发能力
容器类库
XML天生、解析、与转换
关照
窗口管理
窗口开辟概述
管理应用窗口(Stage模子)
管理应用窗口(FA模子)
WebGL
概述
WebGL开辟指导
媒体
媒体应用开辟概念
图片
安全
访问控制
ohos.permission.USE_BLUETOOTH
ohos.permission.DISCOVER_BLUETOOTH
ohos.permission.MANAGE_BLUETOOTH
ohos.permission.INTERNET
ohos.permission.INTERNET
…
网络与毗连
网络管理
IPC与RPC通信
电话服务
电话服务开辟概述
跳转拨号页面
获取当前蜂窝网络信号信息
数据管理
数据管理概述
应用数据持久化
场景介绍
运作机制
约束限定
接口分析
…
文件管理
文件管理概述
应用文件
用户文件
分布式文件体系
背景任务管理
背景任务总体概述
短时任务
长时任务
延时任务
代理提醒
设备管理
USB服务
位置服务
传感器
分布式跟踪开辟指导
错误管理
…
国际化
国际化开辟概述
Intl开辟指导
I18n开辟指导
应用测试
自动化测试框架使用指南
Native API相关指导
Native API在应用工程中的使用指导
Drawing开辟指导
Rawfile开辟指导
NativeWindow 开辟指导
…
领取方式:扫描下方二维码即可免费领取!!!
《鸿蒙开辟学习之应用模子》
应用模子概述
应用模子的构成要素
应用模子解读
Stage模子开辟指导
Stage模子开辟概述
Stage模子应用组件
FA模子开辟指导
FA模子开辟概述
FA模子应用组件配置
进程模子
线程模子
领取方式:扫描下方二维码即可免费领取!!!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/)
Powered by Discuz! X3.4