長沙網(wǎng)站開發(fā)培訓(xùn)學(xué)校百度客戶端下載安裝
拓展閱讀
junit5 系列
基于 junit5 實現(xiàn) junitperf 源碼分析
Auto generate mock data for java test.(便于 Java 測試自動生成對象信息)
Junit performance rely on junit5 and jdk8+.(java 性能測試框架。性能測試。壓測。測試報告生成。)
拓展閱讀
自動生成測試用例
什么是 EvoSuite?
EvoSuite是一個自動生成Java類的JUnit測試套件的工具,其目標(biāo)是滿足代碼覆蓋率標(biāo)準(zhǔn),如分支覆蓋率。
它采用基于遺傳算法的演化方法來生成測試套件。
為了提高可讀性,生成的單元測試被最小化,并向測試中添加了捕獲被測試類當(dāng)前行為的回歸斷言。
使用 EvoSuite
有不同的方式使用 EvoSuite:
1. 命令行中使用 EvoSuite
EvoSuite作為一個可執(zhí)行的jar文件提供,可以通過以下方式調(diào)用:
java -jar evosuite.jar <options>
生成測試套件的命令示例:
java -jar evosuite.jar <target> [options]
其中 <target>
可以是一個類:
-class <ClassName>
或一個包前綴,此時 EvoSuite 嘗試為類路徑中與該前綴匹配的每個類生成一個測試套件:
-prefix <PrefixName>
或一個類路徑條目,此時 EvoSuite 嘗試為給定類路徑條目中的每個類生成一個測試套件:
-target <jar file or directory>
最重要的選項是設(shè)置類路徑,使用標(biāo)準(zhǔn)的Java類路徑語法:
-projectCP <classpath>
更多選項,請查閱文檔:
java -jar evosuite.jar -help
2. Docker Hub 上使用 EvoSuite
EvoSuite在Docker Hub上提供了一個容器鏡像。你可以拉取該鏡像:
docker pull evosuite/evosuite:<version>
或手動在本地構(gòu)建該鏡像:
git clone https://github.com/EvoSuite/evosuite.git
cd evosuite
docker build -f Dockerfile.java8 . --tag evosuite/evosuite:latest-java-8
docker build -f Dockerfile.java11 . --tag evosuite/evosuite:latest-java-11
可以這樣調(diào)用 EvoSuite:
docker run -it -u ${UID} -v ${PWD}:/evosuite evosuite/evosuite:<version>-java-<java_version> <options>
它假設(shè)要測試的項目位于調(diào)用命令的當(dāng)前目錄中。當(dāng)前目錄 ${PWD}
映射到容器內(nèi)的 /evosuite
目錄。這也是 EvoSuite 的工作目錄。所有的結(jié)果都將映射回主機(jī)系統(tǒng)上的目錄。-u ${UID}
確保結(jié)果具有與啟動命令的用戶相同的文件所有權(quán)。
當(dāng) EvoSuite 需要在后臺運行時,可以使用 -d
代替 -it
。
3. 大規(guī)模實驗運行器
Docker 鏡像還提供了一個標(biāo)簽(evosuite/evosuite:<version>-java-<java_version>-experiment
),以便輕松運行大規(guī)模實驗??梢酝ㄟ^從 Docker Hub 拉取該鏡像獲取:
docker pull evosuite/evosuite:<version>-experiment
或手動在本地構(gòu)建該鏡像:
git clone https://github.com/EvoSuite/evosuite.git
cd evosuite
git checkout <version> # 例如 git checkout v1.1.0
docker build -f Dockerfile.java8-experiment . --tag evosuite/evosuite:<version>-java-8-experiment
docker build -f Dockerfile.java11-experiment . --tag evosuite/evosuite:<version>-java-11-experiment
實驗運行器可以這樣調(diào)用:
docker run -it -u ${UID} -v ${PWD}:/evosuite evosuite/evosuite:<version>-java-<java_version>-experiment [<options>] <configurations_file> <projects_file>
它假設(shè)當(dāng)前工作目錄下有一個名為 projects
的文件夾,其中包含每個要測試項目的子目錄,包含該項目的所有jar文件。當(dāng)前目錄還應(yīng)包含兩個csv文件:
- 一個用于實驗不同配置的文件,包含兩列用于
configuration_name
和user_configuration
- 一個用于每個項目的類的文件,包含兩列用于
project_name
(應(yīng)與projects
下的文件夾相同)和class
(應(yīng)為完整的類路徑)
例如,目錄結(jié)構(gòu)的示例為:
./projects/<project1_name>/<project 1的第一個jar文件>
./projects/<project1_name>/<project 1的第二個jar文件>
./projects/<project2_name>/<project 2的jar文件>
./configurations.csv
./projects.csv
configurations.csv
文件的內(nèi)容示例為:
configuration_name,user_configuration
default60,-generateMOSuite -Dalgorithm=DynaMOSA -Dsearch_budget=60 -Dassertion_timeout=120 -Dminimization_timeout=120
default120,-generateMOSuite -Dalgorithm=DynaMOSA -Dsearch_budget=120 -Dassertion_timeout=120 -Dminimization_timeout=120
鏡像已經(jīng)提供了 projectCP
、class
、seed
和輸出位置的配置。
projects.csv
文件的內(nèi)容示例為:
project_name,class
<project1_name>,com.project1.application
該鏡像將實驗的輸出放置在以下位置(在當(dāng)前目錄內(nèi)):
./results/<configuration_name>/<project_name>/<class_name>/logs/<round>
./results/<configuration_name>/<project_name>/<class_name>/reports/<round>/
./results/<configuration_name>/<project_name>/<class_name>/tests/<round>/
運行該鏡像時,它將在當(dāng)前目錄中自動生成一個名為 SEEDS
的文件,其中包含它用于實驗的種子。如果要復(fù)制實驗,可以將該文件放回同一位置,而不是創(chuàng)建新的種子,鏡像現(xiàn)在將使用這些種子。
如果要手動設(shè)置類路徑而不是讓腳本為您確定一個,可以在每個項目文件夾內(nèi)放置名為 ‘CLASSPATH’ 的文件,其中第一行是該項目的
類路徑。
當(dāng) EvoSuite 需要在后臺運行時,可以使用 -d
代替 -it
。