智能单测用例生成工具 Evosuite

前言

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并发直接跪。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值