通过Jenkins+Cat2Bug做零维护低成本的续接化接口测试
在传统软件质量管控中,软件接口的好坏需要开发人员在项目初期就手动编写,而随着业务需求的不断变更,接口功能也会实时调整,这往往会消耗过多的维护成本,
基于此痛点,寻找一款低学习成本、低维护的接口测试工具,有助于提高软件交付进程,减少软件的开发成本,使团队可以将精力更多的关注于业务本身。
Cat2Bug-Spring-Boot-JUnit 即是为此而生,它是一款非侵入式的自动化单元测试框架,可以自动扫描SpringBoot工程内的接口类,自动生成测试用例,并在测试后将测试报告提交到BUG系统。
以下方案通过Cat2Bug-Spring-Boot-JUnit 结合持续集成工具Jenkins、BUG管理平台Cat2Bug-Platform 、源代码管理GIT,做到代码提交、自动测试、产出报告、修复BUG的流程闭环。
上图流程看似节点众多,其实开发人员只要前期在工程中引用Cat2Bug-Spring-Boot-JUnit 框架,并简单配置后,就无须再做任何工作,其它的工作全部交由机器自动处理,下面我们将从本地项目调试、环境搭建两个方面一一介绍方案的实现过程。
本地项目调试
- 在项目pom.xml文件中加载Cat2Bug-Spring-Boot-JUnit 框架依赖,代码如下:
<dependency>
<groupId>com.cat2bug</groupId>
<artifactId>cat2bug-spring-boot-junit</artifactId>
<version>0.0.4</version>
<scope>test</scope>
</dependency>
- 在项目pom.xml文件中添加测试插件,代码如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<argLine>
--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/java.math=ALL-UNNAMED
--add-opens java.base/java.util=ALL-UNNAMED
--add-opens java.base/java.util.concurrent=ALL-UNNAMED
--add-opens java.base/java.net=ALL-UNNAMED
--add-opens java.base/java.text=ALL-UNNAMED
</argLine>
</configuration>
</plugin>
值得注意的是,由于考虑到低版本的兼容性,此插件需要采用低版本,目前测试2.12.4可以完美运行;
另外,插件中配置的–add-opens参数是JDK9+以上才需要使用,因此JDK8不用配置;
- 在项目./src/test/java/目录下创建一个测试类,并实现如下代码:
@SpringBootTest
@RunWith(Cat2BugAutoSpringSuite.class)
@AutoTestScan(packageName = "com.cat2bug.junit.demo.controller")
@PushReport(host = "http://127.0.0.1:8022", projectKey = "20240225012438h19zzdb6sd1ahazj", handler = "admin")
public class Cat2bugSpringBootDemoApplicationTests {
// 类里不用实现任何代码
}
注解说明
- @SpringBootTest:必要注解,Spring标准测试注解;
- @RunWith(Cat2BugAutoSpringSuite.class):必要注解,用于动态创建测试类,形成测试报告;
- @AutoTestScan:必要注解,指定扫描、查找接口类的包路径;
- @PushReport:非必要注解,用于将测试报告推送到指定Bug平台,host设置Bug系统地址、projectKey设置项目密钥,此密钥在Bug系统中设置、handler设置Bug平台的处理人;
- 执行此测试用例
在执行过程中,Cat2Bug-Spring-Boot-JUnit 框架会自动扫描项目中的接口,并编译成测试类进行测试,所有接口的参数根据类型不同,将采用随机赋值的方式输出,如某些参数需要手动设置,或遇到权限等问题,可参考Cat2Bug-Spring-Boot-JUnit 的官网文档。完成测试后的界面如下:
执行完测试用例之后,会在命令行自动形成统计报告,也会在本地编译目录创建HTML格式的报告,我们可以根据出错的测试用例,对问题进行修复。
当所有测试用例都执行通过后,代表本地项目调试完成。这样,每次代码编写完成后,可执行一下此测试用例用来检查接口是否有问题。
自动化环境搭建
以下所有服务将采用Docker容器化方式部署
部署Jenkins
如果比较了解Docker化部署Jenkins的朋友,可以跳过此章节。
- Docker部署Jenkins,执行命令如下:
docker run -d --name jks -u root -p 8011:8080 jenkins/jenkins:latest
执行指令参数说明:
-
-d: 标识是让 docker 容器在后台运行;
-
-p 29090:8080:冒号前边是宿主机的端口,冒号后边的是容器的端口。将镜像的 8080 端口映射到服务器的 8011 端口;
-
–name:是指定生成的容器名称 jks;
-
-u: 最好使用 root 启动,以免有权限执行问题;
- 初始化Jenkins
Jenkins部署好之后,在浏览器访问 http://127.0.0.1:8011 ,第一次打开页面时,需要初始化Jenkins系统并输入初始化密码,密码从启动的Jenkins命令中获取,如下图:
以上截图是通过Docker可视化界面查看的,如需命令行查看,请执行以下命令:
(base) root ~ % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b9ce9597758d jenkins/jenkins:latest "/usr/bin/tini -- /u…" 18 minutes ago Up 18 minutes 50000/tcp, 0.0.0.0:8011->8080/tcp jks
(base) root ~ % docker logs --tail=1000 b9ce9597758d
执行命令说明:
- docker ps:查看jenkins容器的ID编号
- docker logs:查看jenkins日志,其中–tail=1000表示查看1000条日志数据;b9ce9597758d为容器ID
输入完密码之后,一路点击【下一步】,遇到选项都选择默认值,最后创建一个账号,点击【保存并完成】后,系统会提示"Jenkins已就绪!",表示Jenkins初始化完成。
- 配置编译环境
由于我的项目是Maven构建的,因此需要安装Maven和JDK,幸好Jenkins自动可以安装这两个环境,让我免去了很多麻烦。
在Jenkins的【Manage Jenkins】->【Tools】界面中,分别可以新增JDK和Maven,界面如下:
需要特别注意,在配置时一定要勾选中【自动安装】选项,最后【保存】完成JDK和Maven的安装配置。
- 创建一个自动化测试任务
点击【新建Item】按钮打开新建任务界面,输入任务名称,选择【Freestyle project】选项,点击【确定】按钮创建任务,如下图:
新建完成后,会跳转到任务配置界面,分别设置Git源码管理、构建触发器、Build Steps【编译步骤】这三项,配置界面如下图:
在配置Git地址时,需要配置Git平台的账号密码,请点击【添加】按钮进行配置。
我们在构建触发器时,配置的是每半个小时检查一次代码,如果有新的提交,就进行测试。如果想在提交时实时进行测试,可以根据不同的Git平台配置Web Hook钩子,相关教程请自行查找。
- 执行任务
我们可以手动点击【立即构建】按钮执行任务,执行完成后,点击【构建历史】列表中的任务编号可以查看任务详情,如下图:
至此单元测试任务配置完成,如之前在项目测试类中配置了@PushReport注解,Cat2Bug-Spring-Boot-JUnit 会自动将报告结果推送到Cat2Bug-Platform 平台。
部署Cat2Bug-Platform
Cat2Bug-Platform 是一套轻量化的BUG管理跟踪系统,和Cat2Bug-Spring-Boot-JUnit 同在一个生态圈下,在做自动化测试过程中,两者可以无缝的配合。
- 部署Cat2Bug-Platform
docker run -it -d -p 8022:8022 --name cat2bug-platform cat2bug/cat2bug-platform:latest
如果我们需要将容器中的数据映射到宿主机,执行如下启动命令:
docker run -it -d -p 8022:8022 --name cat2bug-platform -v ~/cat2bug-platform/data:/cat2bug/data -v ~/cat2bug-platform/logs:/cat2bug/logs -v ~/cat2bug-platform/upload:/cat2bug/uploadPath cat2bug/cat2bug-platform:latest
- -v ~/cat2bug-platform/data:/cat2bug/data: 将系统中的数据库文件映射到本机~/cat2bug-platform/data目录
- -v ~/cat2bug-platform/logs:/cat2bug/logs: 将系统中的日志文件映射到本机~/cat2bug-platform/logs目录
- -v ~/cat2bug-platform/upload:/cat2bug/uploadPath: 将系统中下载的文件映射到本机~/cat2bug-platform/upload目录
映射文件的好处是当我们删除或升级Docker容器后,相关数据依然存在。
部署完成后,访问http://127.0.0.1:8022,检查是否可以正常访问,更多详细操作可访问官网教程查看。
- 创建项目KEY
在系统中依次注册用户、创建团队、创建项目后,进入【项目配置】->【API KEY】界面中,新建Key,如下图:
将创建的key值设置到项目测试类的@PushReport注解中,再执行Jenkins任务时,测试失败的用例信息即可在Cat2Bug-Platform 平台中显示,如下图:
总结
通过以上部署操作后,一个最小单元的自动化持续单元测试环境即搭建完成,后续也不用在接口变更后反复维护单元测试代码。我们开发此框架的目的也是在实际工作过程中,反复遇到修修改改的问题,以至于最终决定开发一套减轻工作量的工具。Cat2Bug-Spring-Boot-JUnit 今后还会在性能、安全、代码质量等方面进行攻克,希望大家可以多提意见。
Cat2Bug交流群
- 官网: https://www.cat2bug.com
- library github: https://github.com/cat2bug/cat2bug-junit
- library gitee: https://gitee.com/cat2bug/cat2bug-junit
- QQ群: 731462000