针对手工测试的代码变更覆盖率平台构建实践 | 利器

本文首发于 TesterHome 社区,文末有福利!链接 https://testerhome.com/topics/19077 

前言

作为一家小公司,日常测试基本都是以手工测试为主。如何在频繁快速的迭代过程中有效保证手工测试覆盖的充分性,是一个不得不思考的问题。

覆盖率是度量测试完整性的一个手段,也是测试有效性的一个依据。当一个迭代版本完成手工测试后,如果可以通过分析本次迭代变更代码的覆盖率来评估前期的测试用例设计是否完善,开发提交的改动 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 的配置
     

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 安装工程所依赖的库文件

  • 命令行窗口切换到根目录 生成数据库迁移脚本 , 并生成表结构
     

python manage.py makemigrations CodeDiff #生成数据迁移脚本

python manage.py migrate  #应用到 db 生成数据表

  • 创建超级用户,用户后台管理数据库,并按提示输入相应用户名,密码,邮箱。
     

python manage.py createsuperuser

  • 启动服务
     

python manage.py runserver 0.0.0.0:8000  #本地环境启动可以配置 0.0.0.0,如果是正式环境需要配置访问 ip

关于平台使用更详细说明,请见 Github 项目介绍。 

References

[1] 代码覆盖率遇到的坑的总结: https://testerhome.com/topics/16925
[2] GitHub 项目地址:: https://github.com/hzlifeng1/DiffTestPlatform

- 推荐学习 -

能根据测试需求,自主设计研发测试工具和平台,解决业务痛点,这是优秀测试开发工程师的必备技能,也是当下企业对高级测试人才的基本要求。无论你是测试老鸟还是刚入行的萌新,都必须有意识主动提升自己!

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值