一、背景

目前只有web接口有测试人员在测试或回归,但service接口却没有专门的人员测试。为了保证接口的功能性的质量稳定,同时减少潜在的代码bug,需要对每一个接口的方法都需要测试,而且也需要对这些接口的方法定期的回归测试。所以,单元测试与集成测试应运而生。

 

词语解释:

“单元测试”是指接口的方法测试。每一个方法对应一个单元测试方法。

“集成测试”也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。

二、目标

1、service接口的每个方法都得对应一个单元测试。

2、每个单元测试都需要有断言确定结果是否通过或不通过。

3、集成测试需要对单元测试每天定期覆盖性的测试并发送测试报告,提醒开发人员及时修复。

4、单元测试与集成测试可以系统部署定期测试,无需人工守护。
5、集成测试生成的数据不能写入数据库,不能污染数据库数据。

三、技术方案

1、描述:

1.1、系统部署使用现有的部署工具Jenkins。

1.2、每个项目中的单元测试框架使用TestNG,通过插件maven-surefire-plugin插件来执行TestNG的测试用例。

1.3、通过Jenkins的插件:git插件、maven插件、TestNG插件、定时插件、发送邮件的插件等,配合Jenkins实现自动化集成测试框架。

1.4、每个项目的集成测试框架搭建好后,将在每天早上8点自动执行并将结果发送至大家。

1.5、使用TestNG包里的支持事物的类org.springframework.test.context.testng.AbstractTransactionalTestNGSpringContextTests做测试数据回滚,防止数据的污染,所有测试类都继承此类。

 

注意:

使用TestNG单元测试,想回滚事务,需要确认一下两点:
1)、确认是否继承自 org.springframework.test.context.testng.AbstractTransactionalTestNGSpringContextTests,只有该抽象类支持事务,org.springframework.test.context.testng.AbstractTestNGSpringContextTests 这个类不支持事物。

2)、确认单元测方法是否有@Rollback注解配置,@Rollback(false) 不回滚;@Rollback,回滚;不配置@Rollback,默认回滚。

 

2、框架流程图:

(一期)单元测试与集成测试的Jenkins+TestNG技术实现

四、实施方案

   一、项目中的配置

1、service实现类的工程在pom.xml中添加testng依赖包, 通过插件maven-surefire-plugin插件来执行TestNG的测试用例:

<dependency>

    <groupId>org.testng</groupId>

    <artifactId>testng</artifactId>

    <version>6.14.3</version>

</dependency>

<plugin>

    <groupId>org.apache.maven.plugins</groupId>

    <artifactId>maven-surefire-plugin</artifactId>

    <version>2.19</version>

    <configuration>

        <!--skipTests的值默认为true,如果不希望打包或编译时执行test代码,则带上-DskipTests=false,不写默认执行-->

        <!--<skipTests>false</skipTests>-->

        <includes>**/*Test.java</includes>

    </configuration>

</plugin>

注意:

  1.  所有的测试类的名称命名格式为XXXTest.java,否则不会被插件扫描到。
  2. skipTests的值默认为true,如果不希望打包或编译时执行test代码,则带上-DskipTests=false,不写默认执行。

2、新建的测试类

    2.1、我们的项目都是基于springBoot搭建的框架,所以测试类在类上配置注解org.springframework.boot.test.context.SpringBootTest, 并指定项目启动类。

    2.2、extends(继承)org.springframework.test.context.testng.AbstractTransactionalTestNGSpringContextTests类,该类回将执行测试单元产生的数据回滚。(不是要继承AbstractTestNGSpringContextTests类,该类不会回滚执行单元测试产生的数据)

    2.3、单元方法配置注解org.testng.annotations.Test。

具体如下图:(一期)单元测试与集成测试的Jenkins+TestNG技术实现

 

本地跑单元测试选择图标(一期)单元测试与集成测试的Jenkins+TestNG技术实现进行操作,如下图:(一期)单元测试与集成测试的Jenkins+TestNG技术实现

    2.4、本地单元测试指定环境

       如果本地开发时写单元好测试方法时,总是提示未指定配置“{spring.application.name}”,那是因为Spring 框架未接收到指定的环境,需要添加“-Dspring.profiles.active=环境参数”;如果不想每个单元测试方法运行时添加这个命令行参数,那么在单元测试类上加上注解org.springframework.test.context.ActiveProfiles,并指定环境参数,如“@ActiveProfiles("dev")”,甚至可以写个基类直接继承,但请勿提交至自动化测试分支。

(一期)单元测试与集成测试的Jenkins+TestNG技术实现

二、jenkins中部署配置

1、登陆jenkins后,选择“new auto interface test”后,点击“新建Item”,如下图:

(一期)单元测试与集成测试的Jenkins+TestNG技术实现

2、接着进入新建任务名称页面,任命名称命名规范是"项目名_test",记得选中“Freestyle project”自由风格的项目,然后点击“OK”按钮创建,如下图:

(一期)单元测试与集成测试的Jenkins+TestNG技术实现

3、接着,下一个页面有多个配置,需要特别注意,分步走:

    3.1、 “源码管理”面板配置,在标记1的地方勾选git,在标记2的地方“Repository URL”输入ssh方式的git地址,注意这里的git域名需要改成ip指定,然后在标记3的地方输入分支名,注意,自动化测试分之名统一使用“test_automation”,如果变更代码也请合并到该分支。

(一期)单元测试与集成测试的Jenkins+TestNG技术实现

4、“构建触发器”面板配置,勾选“build periodically”,表示定期触发构建,在“日程表”输入框中天蝎corn表达式,建议填写“H 8 * * *”,表示每天早上8点触发构建。

(一期)单元测试与集成测试的Jenkins+TestNG技术实现

5、“构建”面板配置,选择“invoke top-level maven targets”表示maven设置,“maven版本”选择“maven”,目标填写命令行参数“clean test -P daily -DskipTests=false”,其中:clean 表示“删除之前编译的文件”,test“表示执行单元测试,“-P daily”表示选择构建的环境是“daily”;"-DskipTests=false"表示不跳过测试用例,执行测试用例。

(一期)单元测试与集成测试的Jenkins+TestNG技术实现

(一期)单元测试与集成测试的Jenkins+TestNG技术实现

 

6、“构建后操作”面板配置

    6.1、点击按钮“增加构建后操作步骤”,选中“Editable Email Notification Templates”,编辑邮件通知,注意,这里是选择邮件模板,模板已配置好。选择后多出一块配置“Editable Email Notification Templates”, 这里选择“自动化测试报告结果邮件模板 - 自动化测试报告结果邮件模板”。

(一期)单元测试与集成测试的Jenkins+TestNG技术实现

 

6.6、点击按钮“增加构建后步骤”,选中“Publish TestNG Results”,缺少这一步,邮件中的部分值将拿不到。

(一期)单元测试与集成测试的Jenkins+TestNG技术实现

8、最后别忘“保存”,否则不生效。(一期)单元测试与集成测试的Jenkins+TestNG技术实现

 

 

相关文章:

  • 2022-12-23
  • 2021-08-22
  • 2022-12-23
  • 2021-12-15
  • 2021-04-19
  • 2021-07-07
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-07
  • 2021-10-31
  • 2021-09-09
  • 2021-11-22
  • 2021-09-18
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案