前言
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
生成用例的時間有點長,給點耐心~
最終生成的用例會是這麼個結構

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