前言
EvoSuite是由Sheffield等大学联合开发的一种开源工具,用于自动生成测试用例集,生成的测试用例均符合Junit的标准,可直接在Junit中运行。得到了Google和Yourkit的支持。
使用
evosuite支持三种方式运行:本地jar包、maven插件、idea插件
本文说下maven插件的方式
配置方式
要使用EvoSuite,就要在Maven工程的pom.xml文件中引入EvoSuite的插件如下(在 的子节点加入如
下内容):
<build>
<plugins>
<plugin>
<groupId>org.evosuite.plugins</groupId>
<artifactId>evosuite-maven-plugin</artifactId>
<version>1.0.6</version>
</plugin>
</plugins>
</build>
Maven自动的就会下载EvoSuite的相关依赖,如果加入后,出现下载依赖的错误,那么需要加入EvoSuite的Maven Respository。
在settings文件中和pom文件中添加
<pluginRepositories>
<pluginRepository>
<id>EvoSuite</id>
<name>EvoSuite Repository</name>
<url>http://www.evosuite.org/m2</url>
</pluginRepository>
</pluginRepositories>
完成后,通过如下命令进行一下evosuite的测试。
mvn evosuite:help
预期出现说明文档,就是环境OK了。
可以开始生成单测脚本了
#最基本的命令
mvn evosuite:generate
#可以指定被测试的类
mvn evosuite:generate -Dcuts=***.java
#更多的参数
-DmemoryInMB=2000 //表示使用 2000MB 的内存
-Dcores=2 //表示用2个 cpu 来并行加快生成速度
-Dcuts=com.xxx.xxx.api.service.impl.CurriculumServiceImpl //表示只针对 com.xxx.xxx.api.service.impl.CurriculumServiceImpl 这个类生成用例。多个用例可以用英文逗号分隔
-DtargetFolder=src/test/java/evosuite //表示生成的用例放到 src/test/java/evosuite
生成用例的时间有点长,给点耐心~
最终生成的用例会是这么个结构
![image.png](https://img-blog.csdnimg.cn/img_convert/089fb63d839c6cf0aa28efe868a517cb.png#clientId=u66c63fb8-a112-4&from=paste&height=334&id=u67853d2e&margin=[object Object]&name=image.png&originHeight=668&originWidth=604&originalType=binary&ratio=2&size=242564&status=done&style=none&taskId=udaeee5fe-0785-4140-80d5-efb79b9acdb&width=302)
- best-tests 测试脚本的最佳案例
- evosuite-seeds 被测试类的分析结果(字节码增强的结果)
- logs 生成用例过程中的日志
- reports 每个被测试类的覆盖度报告
- tests 生成的原始测试脚本
- project_info.xml 整个项目/module的覆盖度报告
脚本整理和运行
Maven项目的JUnit的测试cases一般都是放在src/test/java下,但是EvoSuite生成实在.evosuite下,那么通过如下命令就可以完成对应脚本的而移动了。
mvn evosuite:export
#
-DtargetFolder=src/test/evosuite 指定移动目录
mvn test执行测试
要想通过 mvn test命令执行测试,还需要在pom的 内加入如下内容:
<dependency>
<groupId>org.evosuite</groupId>
<artifactId>evosuite-standalone-runtime</artifactId>
<version>1.0.6</version>
<scope>test</scope>
</dependency>
有时候,我们会同时执行两类脚本,一类是RD手写的代码,一类是EvoSuite自动生成的,进入同时测试并不会出现什么大问题,但是也会对测试结果有片面的影响,因此需要只能EvoSuite仅对其生成的脚本起作用,需要在pom中加入如下插件。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version>
<configuration>
<properties>
<property>
<name>listener</name>
<value>org.evosuite.runtime.InitializingListener</value>
</property>
</properties>
</configuration>
</plugin>
总结(待完善)
- 适用范围
- 生成脚本特点
- 运行使用
- 后续优化
踩坑记录:
1、注意配置pom时,plugins和pluginManagement的区别,dependencies和dependencyManagement的区别。
2、evosuite是基于字节码文件生成用例的,所以generate之前要先编译一下。
3、生成测试用例的时候很占用cpu内存资源,所以别想着开多并发了,我开了4并发直接跪。