1.覆盖率
常见的覆盖率有很多种例如语句覆盖,分支覆盖等,在IDEA中默认使用的是自己的覆盖率工具。通过覆盖率我们可以获取测试脚本是否跑完了所测对象的所有功能或者分支,从而获得对被测试对象的质量保证量化指标。
这里我们使用Jacoco为例。
在Idea中修改覆盖率工具jacoco,选择生成文件。
被测代码可以看到详细的执行说明,那些被执行了那些没有。
2.On the fly动态覆盖率模式
有没有想过前面的覆盖率都是跑单元测试来的,如果已经发布了能不能动态的获取用户访问系统的覆盖率呢?On the fly模式就是这个问题的答案。
通过Mvn package打一个包(单元测试都要通过才能获得包,也可以通过跳过单元测试的配置来实现该效果)
mvn package -Dmaven.test.skip=truemvn package -Dmaven.test.skip=true
下载Jacoco
https://www.jacoco.org/jacoco/index.html
这里我们下载0.8.5版本,然后将其解压,这里需要使用的是jacocoagent.jar文件
通过命令启动jar包
首先要新建一个.bat 启动包
java -javaagent:jacocoagent.jar=destfile=f:/jacoco.exec,output=file -jar springboot_dazhenghe-0.0.1-SNAPSHOT.jar
设定导出文件模式及地址(这里为了省事就不纠结tomcat部署模式了)
运行接口调用等内容(通过Postman即可),然后停止服务即可。可以看到jacoco.exec的覆盖率报告生成。
导出的jacoco.exec是覆盖率文件通过idea的 show Coverage Data即可解析成为报告,也可以继续生成HTML报告文件
Run > Show Code Coverage Data(新版本的IDEA注意)
通过执行多次自动化测试后反复加载测试报告文件即可获取最终的覆盖率数据,这样可以知道哪些测试用例脚本完成了被测代码的100%覆盖。
可以在IDEA中导出覆盖率HTML报告,报告右侧的session记录了每次执行补充的信息。
3.Maven Test
通过Mvn test命令可以一次性执行多个测试用例。如果不配置也可以直接运行,这里我们手动添加具体的插件版本。
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
</dependency>
在这个pom插件后可以配置大量的执行内容。
在打包时需要跳过测试则使用这个命令
mvn package -Dmaven.test.skip=true
package -Dmaven.test.skip=true -f pom.xml
默认Mvn test执行所有的测试用例(基于test开头或者test结尾的类),
如果需要单独控制执行范围
执行SimpleTest.java这个类
$ mvn -Dtest=com.cloud.appium.SimpleTest test test -Dtest=com.example.utils.myTest -f pom.xml
说明解释
使用 mvn test执行单元测试的时候,默认情况是把工程所有的testcase都执行一遍。如果需要执行某一个 SimpleTest.java类,可以通过上面的命令。其中-Dtest参数就是关键,参数的值为“com.cloud.appium.SimpleTest” 这个是要执行的单元测试类名,需要包含package
-Dtest的参数是可以用表达式的.
比如执行多个测试用例可以用逗号分开 mvn test -Dtest=App2Test,AppTest.
也可以用ant风格的路径表达式mvn test -Dtest=*2Test,mvn test -Dtest=???2Test.
甚至指定具体的测试方法mvn test -Dtest=*Test#testAdd.
指定具体包里的测试用例mvn test -Dtest=com/cloud/learn/maven/*.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit6.3.2</artifactId>
<version>2.22.2</version>
</dependency>
</dependencies>
<configuration>
<!--配置是否跳过测试用例执行-->
<!--<skipTests>true</skipTests>-->
<includes>
<include>**/AppTest.java</include>
</includes>
<excludes>
<exclude>**/App2Test.java</exclude>
</excludes>
</configuration>
</plugin>
4.生成HTML报告
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<version>2.22.2</version>
</dependency>
配置命令
mvn surefire-report:report命令
执行的时候漫长的各种插件同步下载。
执行完成后可以在target\site目录下看到对应的HTML报告surefire-report.html
效果
5.基于Mvn 构建Jacoco更加全面的测试报告
路径覆盖,分支覆盖
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.5</version>
</dependency>
执行mvn install即可在target\site\jacoco目录看到更加全面的覆盖率报告
打开index.html效果
6.Allure美化Junit最后测试报告
官方下载
http://allure.qatools.ru/
直接使用模式
allure.bat serve F:\IEDAproject\springboot\springboot_dazhenghe\target\surefire-reports
添加引用
<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-junit5</artifactId>
<version>2.13.3</version>
<scope>test</scope>
</dependency>
添加引用后使用mvn test会生成
allure-results目录
这个时候指定测试报告生成对这个目录
allure.bat serve D:\Work\code\ketestopsdemo\allure-results
接着就可以使用各种注解了
Java的注解和特性可用于allure的主要特性,并列举了如下一些注解特性:
注解 说明
@DisplayName 设置用例展示名称
@Description 描述
@Step 设置步骤,完成步骤描述
@Attachments 添加附件
Links: @Link、@Issue、@TmsLink 将测试链接到某些资源,设置bug编号 ,设置用例编号
@Severity 设置bug等级,blocker、caitical、minor、normal、trivial
@SpringBootTest
@Epic("Epic测试")
@Feature("第一个feature")
class DemoApplicationTests {
@Test
@Tag("基础测试")
@Issue("指定缺陷")
@TmsLink("tmslink?")
//什么链接
@Severity(SeverityLevel.NORMAL)
//什么优先级别
@Story("场景测试")
void contextLoads() {
mytest1();
Assertions.fail();
}
@Story("我的第二个测试用例")
@DisplayName("junit显示名称")
@Description("allure描述说明")
@Test
void mytest1(){
}
}
注解 说明
@DisplayName 设置用例展示名称
@Description 描述
@Step 设置步骤,完成步骤描述
@Attachments 添加附件
Links: @Link、@Issue、@TmsLink 将测试链接到某些资源,设置bug编号 ,设置用例编号
@Severity 设置bug等级,blocker、caitical、minor、normal、trivial
@SpringBootTest
@Epic("Epic测试")
@Feature("第一个feature")
class DemoApplicationTests {
@Test
@Tag("基础测试")
@Issue("指定缺陷")
@TmsLink("tmslink?")
//什么链接
@Severity(SeverityLevel.NORMAL)
//什么优先级别
@Story("场景测试")
void contextLoads() {
mytest1();
Assertions.fail();
}
@Story("我的第二个测试用例")
@DisplayName("junit显示名称")
@Description("allure描述说明")
@Test
void mytest1(){
}
}
效果展示