前言
作为一家小公司,日常测试基本都是以手工测试为主。如何在频繁快速的迭代过程中有效保证手工测试覆盖的充分性,是一个不得不思考的问题。
覆盖率是度量测试完整性的一个手段,也是测试有效性的一个依据。当一个迭代版本完成手工测试后,如果可以通过分析本次迭代变更代码的覆盖率来评估前期的测试用例设计是否完善,开发提交的改动
QA 这边是否均了解全面,开发代码是否存在冗余。从而更好的进行补充测试,提升本次上线的信心。
P.S.
需要说明的是:变更代码覆盖率并不能绝对作为测试全面的一个保证,因为即便测试覆盖了代码,也可能受测试人员素质和能力的影响出现漏测。但是我们可以认为高覆盖率的代码不一定质量高,但是低覆盖率的代码质量一定不高。
01 引入 JaCoCo 全量覆盖率
通过 Jenkins 的 JaCoCo
插件来创建代码覆盖率任务,这个网上流程有很多,这里就不多做介绍了。当然自己在部署中也遇到了一些坑,可以参考代码覆盖率遇到的坑的总结[1]。
02 平台化实现代码变更覆盖率
在实现全量代码覆盖率后,发现作为一个庞大且迭代频繁的项目,全量的代码覆盖率意义并不大,因为我们要评估的每个迭代的测试情况,我们需要更精准的了解本次迭代的代码覆盖率情况,为了更好的让每个测试人员可以方便、高效的了解对应服务的覆盖率情况。从而开发了这个代码变更覆盖率平台。
GitHub 项目地址:https://github.com/hzlifeng1/DiffTestPlatform
变更代码覆盖率整体服务架构图如下:
设计思路
-
基于 Python 的 Git 第三方库,进行代码比对获取变更代码的情况
-
基于 JaCoCo 的覆盖率报告,只对变更代码行进行颜色显示
-
覆盖率通过任务的方式在平台上呈现,保证相同项目相同服务覆盖率任务后续操作的的便捷性
-
将改动覆盖率报告写入平台 template 中,实现平台上直接可以查看到覆盖率文件
关键特征
-
项目管理:后台对项目增删改操作,前台列表展示
-
服务管理:后台对服务增删改操作,前台支持筛选展示对应服务的任务
-
任务管理:支持对覆盖率任务增删改查操作
-
版本比对:支持通过给出版本号或者通过 “HEAD~1” 方式描述回退版本数来指定与当前版本比对的版本
-
覆盖率数据:手动触发获取对应服务的覆盖率数据,统计服务下所有包及类的变更代码覆盖率统计数据
-
覆盖率详情:查看指定类文件的覆盖率详情,基于 JaCoCo 的覆盖率报告,显示规则基本一致,唯一区别对不属于变更的代码不会有底色显示
-
权限管理:后台对账号控制项目权限,来控制对应人员只能看到制定的项目情况
本地环境部署
-
安装 MySQL 数据库服务端 (推荐 5.7+), 并设置为 UTF-8 编码,创建相应 difftest 数据库,设置好相应用户名、密码,启动 MySQL
-
修改:
DiffTestPlatform/DiffTestPlatform/setting.py 里 DATABASE 的配置1. DATABASES = {
-
'default': {
-
'ENGINE': 'django.db.backends.mysql',
-
'HOST': '127.0.0.1', #数据库所在服务器的 ip 地址
-
'PORT': '3306', #监听端口 默认 3306 即可
-
'NAME': 'difftest', #新建数据库名
-
'USER': 'root', #数据库登录名
-
'PASSWORD': '123456', #数据库登录密码
-
'OPTIONS': {
-
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
-
},
-
}
-
}
-
-
命令行窗口执行 pip install -r requirements.txt 安装工程所依赖的库文件
-
命令行窗口切换到根目录 生成数据库迁移脚本 , 并生成表结构
1. python manage.py makemigrations CodeDiff #生成数据迁移脚本
- python manage.py migrate #应用到 db 生成数据表
-
创建超级用户,用户后台管理数据库,并按提示输入相应用户名,密码,邮箱。
1. python manage.py createsuperuser
-
启动服务
1. python manage.py runserver 0.0.0.0:8000 #本地环境启动可以配置 0.0.0.0,如果是正式环境需要配置访问 ip
关于平台使用更详细说明,请见 Github 项目介绍。
References
GitHub 项目地址:: https://github.com/hzlifeng1/DiffTestPlatform
**-
来霍格沃兹测试开发学社,学习更多软件测试与测试开发的进阶技术,知识点涵盖web自动化测试 app自动化测试、接口自动化测试、测试框架、性能测试、安全测试、持续集成/持续交付/DevOps,测试左移、测试右移、精准测试、测试平台开发、测试管理等内容,课程技术涵盖bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相关技术,全面提升测试开发工程师的技术实力
QQ交流群:484590337
公众号 TestingStudio
点击获取更多信息