<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          工具嘗鮮--單元測試自動(dòng)生成工具 evosuite

          共 3042字,需瀏覽 7分鐘

           ·

          2020-07-10 12:08

          作者|高嘉怡

          Evosuite簡介

          EvoSuite是由Sheffield等大學(xué)聯(lián)合開發(fā)的一種開源工具,用于自動(dòng)生成測試用例集,生成的測試用例均符合Junit的標(biāo)準(zhǔn),可直接在Junit中運(yùn)行。

          通過使用此自動(dòng)測試工具能夠在保證代碼覆蓋率的前提下極大地提高測試人員的開發(fā)效率。但是只能輔助測試,并不能完全取代人工,測試用例的正確與否還需人工判斷。

          官方提供了包括:命令行工具、eclipse 插件、idea 插件、maven 插件 在內(nèi)的數(shù)種運(yùn)行方式。本文主要介紹:idea 插件、maven 插件。

          Evosuite的配置與使用


          maven -- EvoSuite插件

          1、pom.Xml配置

          配置?junit 版本

          1. <dependencies>

          2. <dependency>

          3. <groupId>junitgroupId>

          4. <artifactId>junitartifactId>

          5. <version>4.12version>

          6. dependency>

          7. 配置evosuite 插件:

          8. <build>

          9. <plugins>

          10. <plugin>

          11. <groupId>org.evosuite.pluginsgroupId>

          12. <artifactId>evosuite-maven-pluginartifactId>

          13. <version>1.0.6version>

          14. plugin>

          15. plugins>

          16. build>

          17. <dependency>

          18. <groupId>org.evosuitegroupId>

          19. <artifactId>evosuite-standalone-runtimeartifactId>

          20. <version>1.0.6version>

          21. <scope>compilescope>

          22. dependency>

          2、maven -- EvoSuite插件使用

          使用之前先了解一下基本命令:

          • prepare:需要同時(shí)運(yùn)行EvoSuite測試和現(xiàn)有測試mvn evosuite:prepare test

          • compile:表示編譯。evosuite 是基于編譯后的 .class 文件生成用例的,所以需要先編譯

          • -DmemoryInMB=2000:表示使用 2000MB 的內(nèi)存

          • -Dcores=2 表示用2個(gè) cpu 來并行加快生成速度

          • -Dcuts=alexp.blog.service.PostServiceImpl

            示只針對(duì) alexp.blog.service.PostServiceImpl 這個(gè)類生成用例。多個(gè)用例可以用英文逗號(hào)分隔

          • -DtargetFolder=src/test/java/evosuite

            示生成的用例放到 src/test/java/evosuite

          • evosuite:generate :表示執(zhí)行生成用例

          • evosuite:export:默認(rèn)情況下,EvoSuite在“ .evosuite”文件夾中創(chuàng)建測試。通過使用“導(dǎo)出”,將生成的測試復(fù)制到另一個(gè)文件夾,該文件夾可以使用“ targetFolder”選項(xiàng)設(shè)置(默認(rèn)值為“ src / test / java”)

          • evosuite:clean:刪除“ .evosuite”文件夾中的所有數(shù)據(jù),該文件夾用于存儲(chǔ)到目前為止生成的所有最佳測試

          具體更多詳情可evosuite:help進(jìn)行查看

          準(zhǔn)備被測試方法,如:demoService

          54bcb8802ce9892c30cb81b1422f16e0.webp

          控制臺(tái)執(zhí)行:

          mvn?compile?evosuite:generate? -Dcuts=demoTest.testService.demoTwoService? evosuite:export? -DtargetFolder=src/main/java/testcase

          對(duì)指定文件進(jìn)行編譯生成用例 放置指定文件

          生成結(jié)果如下,有兩個(gè)文件:

          demoService_ESTest:測試用例文件

          demoService_ESTest_scaffolding:用例基類,用于在開始測試前初始化


          603ac199f2f0252806b2d43caf0366e3.webp

          注意:

          1、運(yùn)行后會(huì)產(chǎn)生evosuite 文件 存儲(chǔ)生成測試用例文件

          2、用例生成地址為:DtargetFolder+ Dcuts被測文件路徑,

          原因:evosuite:export 通過用“導(dǎo)出”,將生成的測試復(fù)制

          到另一個(gè)文件夾,(根據(jù)自身情況)導(dǎo)對(duì)package 與

          import需要手動(dòng)調(diào)整

          edb479370fba670e009d953fdbbf8511.webp

          查看運(yùn)行結(jié)果

          Example 1:被測試內(nèi)容demoTwoService.java

          mvn? compile? evosuite:generate? -Dcuts

          =demoTest.testService.demoTwoService?

          bd06a12ac8c8f106a7eb4d99fcf8b881.webp

          生成測試方法case:

          6d5421df72e0653ffba0643a0c34e3e8.webp

          IDEA-- EvoSuite插件的配置與使用

          1、打開IDE,進(jìn)入setting(mac版本是Preferences)選擇plugins,點(diǎn)擊Browse repositories,搜索EvoSuite Plugin,然后選擇Install plugin

          89f975ff58fcfd8e5dc2246efe6bdd45.webp

          2、重啟IDEA

          3、打開idea選擇文件右鍵,就可以看見Run EvoSuite

          d354ca352bc7e088779fbbd5786915bd.webp

          4、點(diǎn)擊Run EvoSuite 可以看見參數(shù)輸入框

          f5e4757150a2434f9446e267ea55564f.webp

          • -DmemoryInMB=2000 表示使用 2000MB 的內(nèi)存

          • -Dcores=2 表示用2個(gè) cpu 來并行加快生成速度

          • Mavenlocation:Maven地址,當(dāng)項(xiàng)目是Maven

            項(xiàng)目時(shí)需要

          • EvoSuite location:evosuite-1.0.6.jar包地址,當(dāng)

            項(xiàng)目是非Maven項(xiàng)目時(shí)需要

          配置maven(D:\workspace\maven\apache-maven

          -3.6.3\bin\mvn.cmd)路徑或EvoSuitejar路徑

          如上,配置完Maven location(or EvoSuite location)

          回車即觸發(fā)執(zhí)行,執(zhí)行完畢后會(huì)提示:

          a8a0da417dcd445b1d0cca3553889fb9.webp

          Example 2:被測試內(nèi)容demoService

          使用插件進(jìn)行生成測試用例
          1. publicclass demoTwoService {

          2. publicintMath(int a, int b) {

          3. if(a == 0) {

          4. System.out.println("運(yùn)行1");

          5. return a;

          6. } elseif(b == 0) {

          7. System.out.println("運(yùn)行2");

          8. return0;

          9. } else{

          10. System.out.println("運(yùn)行3");

          11. return a/b;

          12. }

          13. }


          查看控制臺(tái):根據(jù)參數(shù)生成了執(zhí)行命令

          016b1d4a9546cae3d7fc18f602c08c2d.webp

          查看生成用例結(jié)構(gòu)與maven命令行生成一樣

          877d63c4838d9dfbc8d3bd739fd8965c.webp

          生成的測試用例:

          26d02087ccdd41074d43b9a31f0b76a6.webp

          覆蓋率:

          43b70cf5797ef5dbdd91ff7ff29dc571.webp

          使用EvoSuite的幾種情況

          例1:以Example 1:被測試內(nèi)容demoTwoService.java

          為例,查看本類調(diào)用生成測試用例情況

          被測試內(nèi)容如下:

          1. publicclass TEST {

          2. publicintMath(int a, int b) {

          3. if(a == 0) {

          4. System.out.println("運(yùn)行1");

          5. return0;

          6. } elseif(b == 0) {

          7. System.out.println("運(yùn)行2");

          8. return b;

          9. } else{

          10. System.out.println("運(yùn)行3");

          11. return a / b;

          12. }

          13. }

          14. publicintTest(int a, int b) {

          15. int aa = this.Math(a, b);

          16. System.out.println("結(jié)果"+ aa);

          17. return aa;

          18. }

          19. }

          生成測試用例

          (因?yàn)楸绢?個(gè)方法,只截取Test方法的用例):

          bdccaea6e1c75faa02d178903478fe5c.webp

          運(yùn)行Test方法的用例:

          3f23c1dc65827a56f75aac7948c8d4de.webp

          很明顯的是Test調(diào)用本類的Math方法,但生成的測試用例

          卻少了一條 b=0的情況。

          覆蓋率為84%

          10714ab9657e41c89f39b425ce1db5fe.webp

          例2:不在同一個(gè)類調(diào)用方法

          5707848c1e6d67617fddc333e25c10c7.webp

          生成測試用例:

          1148450393c5f07e518a72ef0b08bfc9.webp

          運(yùn)行結(jié)果:

          e3a456af547afcc9631426484545eb3d.webp

          就生成用例與結(jié)果看來,未有a=0 與b=0的情況,

          而是以結(jié)果為正數(shù),負(fù)數(shù),0

          覆蓋率:

          259623b358650301659146ed5fd79c01.webp

          測試用例的生成一般以被生成的方法的結(jié)果為導(dǎo)向,

          會(huì)將被測方法的每種if與輸出結(jié)果的情況進(jìn)行覆蓋。

          但不會(huì)全面覆蓋方法中調(diào)用的方法。生成的測試

          例只能輔助測試,并不能完全取代人工,

          測試用例的正確與否還需人工判斷。


          083699cada412c2d991d8715dcf59b39.webp



          本公眾號(hào)全部原創(chuàng)已整理成一個(gè)專欄,請?jiān)诠娞?hào)里回復(fù)「測試開發(fā)」獲??!


          點(diǎn)個(gè)“在看”支持一下?
          瀏覽 89
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  一性一交一伦一色一区二免费看 | 欧美亚洲另类在线成人 | 操女人网站| 天天曰夜夜爽天天操 | 黄色色播网站 |