测者的测试技术手册:自动化的自动化EvoSuite:Maven项目集成EvoSuite实战

EvoSuite是由Sheffield等大学联合开发的一种开源工具,用于自动生成测试用例集,生成的测试用例均符合Junit的标准,可直接在Junit中运行。得到了Google和Yourkit的支持。

前期准备

本次所有内容的例子可以通过测者公众号后台,回复evo_mvn关键字获取下载地址

解压到自己的工程目录,在Tutorial_Maven的示例目录运行如下命令:

mvn compile

完成compile后代码中的classes的编译字节码放到target/classes目录下。在示例代码中

src/test/java目录下是有一些测试cases,可以通过如下命令运行一下:

mvn test

如果运行ok,那么说明配置一切正常,就可以开始集成EvoSuite了。

-------------------------------------------------------

T E S T S

-------------------------------------------------------

Running tutorial.StackTest

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.094 sec

加入EvoSuite生成Junit的Cases

要使用EvoSuite,就要在Maven工程的pom.xml文件中引入EvoSuite的插件如下(在<project>的子节点加入如下内容):

<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。

<pluginRepositories>

 <pluginRepository>

   <id>EvoSuite</id>

   <name>EvoSuite Repository</name>

   <url>http://www.evosuite.org/m2</url>

 </pluginRepository>

</pluginRepositories>

完成后,通过如下命令进行一下evosuite的测试。

mvn evosuite:help

第一次使用EvoSuite插件,Maven会下来和EvoSuite相关的所有依赖,下载完成后,出现如下相似信息表示配置成功:

[INFO] --- evosuite-maven-plugin:1.0.6:help (default-cli) @ Tutorial_Maven ---

[INFO] Maven Plugin for EvoSuite 1.0.6

 Plugin used to run EvoSuite to automatically generate high coverage JUnit

 tests

 This plugin has 7 goals:

 evosuite:clean

   Remove all local files created by EvoSuite so far

 evosuite:coverage

   Execute the manually written test suites (usually located under src/test/java)

   and return the coverage of each class.

 evosuite:export

   When run, EvoSuite generate tests in a specific folder. New runs of EvoSuite

   can exploit the tests in such folder, and/or modify them.

   So, with 'export' we can copy all generated tests to a specific folder, which

   by default points to where Maven searches for tests. If another folder is

   rather used (or if we want to run with Maven the tests in the default EvoSuite

   folder), then Maven plugins like build-helper-maven-plugin are needed

evosuite:generate

   Generate JUnit tests

evosuite:help

   Display help information on evosuite-maven-plugin.

   Call mvn evosuite:help -Ddetail=true -Dgoal=<goal-name> to display parameter

   details.

evosuite:info

   Obtain info of generated tests so far

evosuite:prepare

   Workaround mojo to overcome bug in Maven. Needed when EvoSuite tests are run

   together with manual ones

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 1.489 s

[INFO] Finished at: 2016-04-04T10:55:45+01:00

[INFO] Final Memory: 9M/109M

[INFO] ------------------------------------------------------------------------

配置完成后,运行如下命令生成测试代码和mock数据:

mvn evosuite:generate

这有可能需要一段时间,如果电脑性能比较好,可以通过参数设置多并发的generate:

mvn -Dcores=4 evosuite:generate

完成后,可以看到生成了一个.evosuite的目录,里面的best-test就是你需要的代码了。可以通过如下的命令,查看一下generate脚本的信息怎么样:

mvn evosuite:info

返回信息如下:

As we have just invoked EvoSuite on 4 classes, you should get an output like this:

[INFO] --- evosuite-maven-plugin:1.0.6:info (default-cli) @ Tutorial_Maven ---

[INFO] Going to query EvoSuite info on current project

[INFO] * EvoSuite 1.0.6

[INFO] Total number of classes in the project: 4

[INFO] Number of classes in the project that are testable: 4

[INFO] Number of generated test suites: 4

[INFO] Overall coverage: 0.99

[INFO] ------------------------------------------------------------------------

Maven项目的JUnit的测试cases一般都是放在src/test/java下,但是EvoSuite生成实在.evosuite下,那么通过如下命令就可以完成对应脚本的而移动了。

mvn evosuite:export

mvn test执行测试

要想通过mvn test命令执行测试,还需要在pom的<dependencies></dependencies>内加入如下内容:

<dependency>

 <groupId>org.evosuite</groupId>

 <artifactId>evosuite-standalone-runtime</artifactId>

 <version>1.0.6</version>

 <scope>test</scope>

</dependency>

EvoSuite的脚本和RD的脚本分开存放

通过如下命令可以制定脚本的移动位置

mvn evosuite:export -DtargetFolder=src/test/evosuite

或者,通过添加properites制定移动位置

src/test/evosuite

若果在项目中配置了脚本的移动目录,要再次使用mvn test就会报错,因此需要显示指出测试脚本的位置:

<plugin>

   <groupId>org.codehaus.mojo</groupId>

   <artifactId>build-helper-maven-plugin</artifactId>

   <version>1.8</version>

  <executions>

    <execution>

      <id>add-test-source</id>

      <phase>generate-test-sources</phase>

      <goals>

        <goal>add-test-source</goal>

      </goals>

      <configuration>

         <sources>

           <source>${targetFolder}</source>

         </sources>

      </configuration>

   </execution>

 </executions>

</plugin>

RD的Junit脚本和EvoSuite的脚本同时执

有时候,我们会同时执行两类脚本,一类是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>

关注测者,关注测试

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容