平時開發測試的時候都是手動測試,可是對於一些重複的基礎測試,好比輸入格式是否正確,選項是否可選,顯示的文字提示是否正確,均可以用Selenium自動化測試代替,鑑於日常是使用Excel來管理測試用例數據的,因此此次想把Selenium和Excel結合起來,構建一個JUnit UI測試框架。java
不過JUnit自己並不支持多線程,而在瀏覽器的操做自己是須要耗時很多,加上測試用例數據成百上千,若是隻使用一個線程的話效率是很低的,並且,不像業務接口測試,這種UI自動化測試中有可能會由於各類各樣的偏差而致使測試不經過,遇到這種偏差的時候就須要重試,但JUnit自己也不支持重試,綜上所述,咱們須要使用@RunWith對JUnit進行擴展。git
擴展後的測試流程以下:github
擴展後的JUnit已經包含了1,2,3,5,6,7這六個步驟,開發人員只須要實現第4步的具體的測試邏輯便可。瀏覽器
框架實現代碼在https://github.com/hpq86zllw/junit-ui-test-framework多線程
使用默認配置時的例子以下框架
@RunWith(UITestRunner.class) public class SearchTest1 { @Test @InputAndOutput(inputArgs = { "/Test_Case.xls" }, outputArgs = { "/Test_Case_Result.xls" }) public void testSearch(Map<String, Object> testCaseData) { WebDriver driver = Browser.getDriver(); Index index = PageFactory.initElements(driver, Index.class); index.get(); index.search(testCaseData); Result result = PageFactory.initElements(driver, Result.class); result.check(testCaseData); } }
Test_Case.xls爲測試用例數據,Test_Case_Result.xls爲測試結果測試
啓用多線程和重試功能時的例子以下ui
@RunWith(UITestRunner.class) public class SearchTest2 { @Test @InputAndOutput(inputArgs = { "/Test_Case.xls" }, outputArgs = { "/Test_Case_Result.xls" }) @RuntimeSetting(threadNum = 2, retryNum = 1) public void testSearch(Map<String, Object> testCaseData) { WebDriver driver = Browser.getDriver(); Index index = PageFactory.initElements(driver, Index.class); index.get(); index.search(testCaseData); Result result = PageFactory.initElements(driver, Result.class); result.check(testCaseData); } }
threadNum爲線程數,retryNum爲重試次數線程
其餘例子能夠查看README.md,編寫完測試邏輯後按照平時啓動JUnit的方法便可。code