分类测试以减少构建时间
單元測試
單元測試是小型的(測試一種用例或單元),在內(nèi)存中運行(不與數(shù)據(jù)庫,消息隊列等交互),可重復(fù)且快速的測試。 對于我們的對話,讓我們將其限制為開發(fā)人員編寫的基于JUnit的測試用例,以檢查其各自的代碼。
整合測試
集成測試更大(測試一個流程或組件集成),不一定只在內(nèi)存中運行(與數(shù)據(jù)庫,文件系統(tǒng),消息隊列等交互),肯定較慢,并且不一定可重復(fù)(因為結(jié)果可能會更改)以防萬一,例如在數(shù)據(jù)庫中做了一些更改)。
為什么這種差異化很重要?
在敏捷編程中,其基本概念是每隔一段時間(一天在開發(fā)人員盒中多次)運行單元測試,并強制集成測試每天運行一次(在連續(xù)集成服務(wù)器上而不是在開發(fā)人員盒上)。 。 請注意,開發(fā)人員應(yīng)該能夠在需要時運行集成測試,這僅僅是因為它與單元測試是分開的,因此開發(fā)人員現(xiàn)在可以選擇不在每次運行測試時都運行集成測試。
這種靈活性究竟有何幫助?
我到底該如何減少構(gòu)建時間?
沒有一個適合所有人的尺碼(從來沒有)。 縮短構(gòu)建和發(fā)布時間的確切可執(zhí)行步驟將是許多變量的因素,其中包括產(chǎn)品的技術(shù)堆棧(Java,DotNet,php),構(gòu)建和發(fā)布技術(shù)(批處理文件,Ant,Maven)以及許多其他因素。
對于Java,Maven和JUnit組合……
讓我們首先使用Maven創(chuàng)建一個簡單的Java應(yīng)用程序來演示這種情況。
\ MavenCommands.bat
ECHO OFF REM ============================= REM Set the env. variables. REM ============================= SET PATH=%PATH%;C:\ProgramFiles\apache-maven-3.0.3\bin; SET JAVA_HOME=C:\ProgramFiles\Java\jdk1.7.0REM ============================= REM Create a simple java application. REM ============================= call mvn archetype:create ^-DarchetypeGroupId=org.apache.maven.archetypes ^-DgroupId=org.academy ^-DartifactId=app001 pause如果運行此批處理文件,則將從為您準備好的標準Java應(yīng)用程序開始。
默認的Java應(yīng)用程序不附帶最新的JUnit。 您可能想要更改Maven配置以添加最新的JUnit。
\ pom.xml
[...]4.10[...]junitjunit${junit.version}test現(xiàn)在,繼續(xù)添加一個JUnit測試類。
/app001/src/test/java/org/academy/AppTest.java
public class AppTest {private final static Logger logger = LoggerFactory.getLogger(AppTest.class);@Test public void smallAndFastUnitTest() {logger.debug("Quick unit test. It is not expected to interact with DB etc.");assertTrue(true); }@Test @Category(IntegrationTest.class) public void longAndSlowIntegrationTest() {logger.debug("Time consuming integration test. It is expected to interact with DB etc.");assertTrue(true); } }您可能會注意到有一個IntegrationTest.class標記。 您還必須創(chuàng)建此類。
/app001/src/test/java/org/academy/annotation/type/IntegrationTest.java
public interface IntegrationTest {// Just a marker interface. }創(chuàng)建標記接口并注釋測試方法(或類,如果選擇的話)是代碼中要做的全部工作。
現(xiàn)在,剩下要做的就是告訴Maven僅在集成測試階段運行“集成測試”。 這意味著開發(fā)人員在大多數(shù)情況下可以選擇僅運行單元測試(與數(shù)據(jù)庫,隊列等隔離??的快速測試)。 持續(xù)集成服務(wù)器(即Hudson(或類似產(chǎn)品))將運行單元測試和集成測試(由于預(yù)期將與數(shù)據(jù)庫等交互,因此運行速度會較慢),并且可能在一夜之間發(fā)生。
因此,這是您的操作方式。
/pom.xml
org.apache.maven.pluginsmaven-surefire-plugin2.12org.apache.maven.surefiresurefire-junit472.12-XX:-UseSplitVerifierorg.academy.annotation.type.IntegrationTest這意味著開發(fā)人員只需使用一根襯管即可運行所有單元測試。
mvn clean test這將不會運行任何注釋為集成測試的測試。
對于集成測試,請?zhí)砑右韵聝?nèi)容。
/pom.xml
maven-failsafe-plugin2.12org.apache.maven.surefiresurefire-junit472.12org.academy.annotation.type.IntegrationTestintegration-test**/*.class這意味著Hudson或開發(fā)人員(如果他選擇的話)可以通過一個命令運行所有測試,單元和集成。
mvn clean verify當(dāng)然,如果您選擇全部進行編譯,運行單元測試,打包,運行集成測試和部署,那么也可以使用單行命令來完成。
mvn clean deploy而已。 您已朝著更快的構(gòu)建和更敏捷的工作方式邁出了一步。 快樂的編碼。
進一步閱讀
- 也可以通過Javalobby的此鏈接獲得本文的一個版本-稍作編輯。
- 這是另一篇文章 ,涉及使用相同技術(shù)的類似主題。
參考:對 測試進行分類以減少構(gòu)建時間。 從我們的JCG合作伙伴 Partho在Tech for Enterprise博客上獲得。
翻譯自: https://www.javacodegeeks.com/2012/07/categorize-tests-to-reduce-build-time.html
總結(jié)
以上是生活随笔為你收集整理的分类测试以减少构建时间的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用密码摘要生成器扩展JMeter
- 下一篇: 易语言多线程绑定多个窗口(易语言多线程d