IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Diffblue与EvoSuite工具使用对比 -> 正文阅读

[开发测试]Diffblue与EvoSuite工具使用对比

目录

两工具对比结论如下

Diffblue

使用方法

使用此插件的前提条件

不过自动生成单元测试用例还是很香的

EvoSuite

使用方法

分析一下生成的测试用例

把EvoSuite Test和人工的Test分开


两工具对比结论如下

Diffblue(Community)

EvoSuite

基本信息

使用方法

IDEA安装插件后重启即可

需要手动配置pom

生成用例时间

(不到10秒,不过这可能是依赖项目大小编译速度

(同样的源码工程,EvoSuite花了18分钟)

生成用例位置

src/test中

生成一个隐藏文件夹.evosuite,用例都在这里面

测试用例数量

一般

很多

测试用例质量

可以直接运行(可能会出现包引用不到)

生成的用例精确度不高,执行的时候报错较多,且出错位置不是断言错误比较多

操作范围

可以对指定类/方法进行单独生成测试用例操作

(专业版支持对包生成测试用例)

对整个项目源码进行扫描生成测试用例

(目前不知道这个工具能不能实现指定类/方法来自动生成测试用例,有兴趣可以调查调查)

测试用例规范

测试路径

与源码一致

与源码一致

测试类名

源码类名+Test

源码类名+_ESTest

测试基类

无@Before等

源码类名+_ESTest_scaffolding

测试用例名

test+方法名(同名用例名补数字区分)

以test00、test01....命名

测试用例类型

基本都是功能验证

除功能验证外,还会生成关于异常参数的用例校验

特殊API

无返回值无参数的API

生成无断言的测试用例

生成无断言的测试用例

抛异常的API

对应测试用例抛同样的异常

所有用例,不论有没有异常,都会throws Throwable

private的API

不生成测试用例

不生成测试用例

你有我没有

timeout

所有用例都加了(timeout = 4000)

支持指定类/方法重复生成用例

支持,重复用例类名以数字区分,用例内容一模一样

-

Diffblue

使用方法

IDEA中Setting -> Plugins -> 搜索Diffblue -> Install -> ReStart

使用此插件的前提条件

https://docs.diffblue.com/getting-started/intellij/cover-intellij-plugin/

  1. 支持的开发工具是IntelliJ

    ?IntelliJ IDEA的插件库里面可以搜到Diffblue,但是Android Studio里面没有

    ?(不过在AS里面意外发现了插件Unit Test Coverage History runner,可以帮忙只执行指定方法的所有相关的单元测试用例)

  2. 支持Maven或Gradle项目,不支持Android项目

不过自动生成单元测试用例还是很香的

找了一个maven项目,试了几次自动生成用例

  1. 用例生成很快(不到10秒,不过这可能是依赖项目大小编译速度

  2. 自动生成的单元测试用例大概率都可以直接运行(可能会出现import错误,需要人工解决)

  3. 生成的单元测试类名为被测类名+Test,在Test下面,其余路径与被测类路径一致

  4. 测试用例名为test+方法名,若一个方法生成多个测试用例的话在用例名最后加上数字区分

    ?

  5. 可以根据类/方法来进行生成测试用例

  6. 允许重复生成指定类或者方法的单元测试用例,但是内容一样

  7. 一个被测类只会有一个测试类,但是一个方法会对应多个测试用例(用例名最后加数字区分)

  8. 针对无参且无返回值的方法,不会生成有断言的测试用例

  9. 识别到抛异常的方法,对应测试用例也会做抛异常的动作

  10. 很重要的一点:生成的用例都是验证基本功能的,需要人工梳理补充其他测试类型的用例(可能还会包括少量基本功能用例)

EvoSuite

使用方法

以maven项目为例

  1. pom.xml中引入EvoSuite插件后,同步刷新一下maven仓库

    <plugin>
     ?<groupId>org.evosuite.plugins</groupId>
     ?<artifactId>evosuite-maven-plugin</artifactId>
     ?<version>1.0.6</version>
    </plugin>
  2. 然后执行命令检查一下是否引入成功

    mvn evosuite:help

    成功打印如下

    [INFO] Scanning for projects...
    [INFO] 
    [INFO] ----------------< io.diffblue.corebanking:CoreBanking >-----------------
    [INFO] Building CoreBanking 1.0.0
    [INFO] --------------------------------[ jar ]---------------------------------
    [INFO] 
    [INFO] --- evosuite-maven-plugin:1.0.6:help (default-cli) @ CoreBanking ---
    [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
      Mojo needed to prepare the EvoSuite tests for execution. This is needed to
     ?make sure that bytecode is properly instrumented.
    ?
    ?
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: ?0.501 s
    [INFO] Finished at: 2021-08-21T17:26:15+08:00
    [INFO] ------------------------------------------------------------------------
  3. 执行一下命令,生成UT代码

    mvn evosuite:generate

  4. 生成的测试用例在.evosuite/best-tests中

  5. 执行以下命令,可以把.evosuite/best-tests中用例cp到src/test/java中

    mvn evosuite:export
  6. 直接运行即可

分析一下生成的测试用例

  1. 需要人工配置(pom)

  2. 很慢,同样的源码工程,EvoSuite花了18分钟

  3. 生成的测试用例不在src下,需要手动cp

  4. 生成的测试用例路径与源码一致

  5. 测试类名以被测类名_ESTest组合

    ?
  6. 测试用例类名以test00、test01命名,没有标识度

  7. 针对同一套源码,测试用例量比较大

  8. 生成的用例不仅仅有基本功能的,还会做一些异常的校验

  9. ?生成的测试套件基本都会对应生成scaffolding

  10. 生成的用例精确度不高,执行的时候报错较多,且出错位置不是断言

  11. 所有用例,不论有没有异常,都会throws Throwable

  12. 所有用例都加了(timeout = 4000)

  13. 针对无参且无返回值的方法,不会生成有断言的测试用例

把EvoSuite Test和人工的Test分开

  1. 如果想把自己写的Test和EvoSuite Tests分开,先从src/test/java 中删除所有之前export过来的EvoSuite Test

    mvn evosuite:help -Ddetail=true -Dgoal=export
  2. 通过运行下面的命令,我们可以知道export goal的详细用法:

    ?????????????得到如下信息:

    Available parameters:
    ?
     ?  targetFolder (Default: src/test/java)
     ? ? ?
     ? ?  User property: targetFolder
  3. 有两种方式来配置targetFolder:(任选一种)
    1. 直接修改export 命令
      mvn evosuite:export -DtargetFolder=src/test/evosuite
    2. 修改pom.xml文件,在<project>节点下下,添加<properties> 配置:
      <properties>
        <targetFolder>src/test/evosuite</targetFolder>
      </properties>

      再次运行:

      mvn evosuite:export
  4. 执行完上面其中一种方式,你会发现tests 被exported到src/test/evosuite 如果现在去运行mvn test,你会发现src/test/evosuite的Tests不会被包含到测试中,需要做如下配置:

    <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>
  5. 再次执行mvn test,log中会看到 EvoSuite Test也一起被执行了

把EvoSuite Test和程序员写的Test一起运行

如果手写的tests和EvoSuite Test运行在相同的进程中,它们就会使用相同的执行容器版本。 为了确保执行容器只能激活EvoSuite tests,我们需要增加一个初始化Listener:

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

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-08-26 12:24:47  更:2021-08-26 12:26:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 22:20:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码