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

覆盖率是度量测试完整性的一个手段,也是测试有效性的一个依据。当一个迭代版本完成手工测试后,如果可以通过分析本次迭代变更代码的覆盖率来评估前期的测试用例设计是否完善,开发提交的改动 QA 这边是否均了解全面,开发代码是否存在冗余。从而更好的进行补充测试,提升本次上线的信心。

PS:当然首先要说明的是变更代码覆盖率并不能绝对作为测试全面的一个保证,因为即便测试覆盖了代码,也可能受测试人员素质和能力的影响出现漏测。但是我们可以认为高覆盖率的代码不一定质量高,但是低覆盖率的代码质量一定不高。

第一阶段:引入 jacoco 全量覆盖率

通过 jenkins 的 jacoco 插件来创建代码覆盖率任务,这个网上流程有很多,这里就不多做介绍了。当然自己在部署中也遇到了一些坑,下面是我之前遇到的坑的总结,https://testerhome.com/topics/16925

第二阶段:平台化实现代码变更覆盖率

在实现全量代码覆盖率后,发现作为一个庞大且迭代频繁的项目,全量的代码覆盖率意义并不大,因为我们要评估的每个迭代的测试情况,我们需要更精准的了解本次迭代的代码覆盖率情况,为了更好的让每个测试人员可以方便、高效的了解对应服务的覆盖率情况。从而开发了这个代码变更覆盖率平台。

变更代码覆盖率整体服务架构图

设计思路


关键特征


本地环境部署


1.安装 mysql 数据库服务端 (推荐 5.7+),并设置为 utf-8 编码,创建相应 difftest 数据库,设置好相应用户名、密码,启动 mysql

2.修改: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'",
        },
    }
}

3.命令行窗口执行 pip install -r requirements.txt 安装工程所依赖的库文件

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

python manage.py makemigrations CodeDiff #生成数据迁移脚本
python manage.py migrate  #应用到db生成数据表

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

python manage.py createsuperuser

6.启动服务

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

具体平台说明请见 github

github 地址:https://github.com/hzlifeng1/DiffTestPlatform


↙↙↙阅读原文可查看相关链接,并与作者交流