到目前為止,我們所寫的東西,都是集中在如何使用Selenium和Java來定位和讀取元素。那么,到底如何具體開展測試,如何實現參數化,如何實現判定呢?下面,我們來看看Java應用程序的測試框架吧。
當前比較流行的Java應用程序測試框架有JUnit和TestNG兩種,
從上圖可以看到,相對於JUnit4來說,TestNG更具競爭優勢,功能完備。而且,從實際使用的角度來說,參數化的設置及功能,以及處理有上下依賴關系的測試時,JUnit測試框架有着明顯的劣勢。因此,我們在這里着重學習TestNG框架的使用。
TestNG的教程在網上有很多,有興趣的童鞋可以自行查詢。在這里,我們只看看最基本的一些功能及設置,能夠支持當前的WebUI自動化測試即可。
TestNG的注解
當我們需要寫一個測試類的時候,通常我們都會建一個TestNG的class。
在新建TestNG-class的時候,通常都會出現以上界面。除了設置必要的類名外,在這里我們還可以設置TestNG的注解。各個注解的具體意思,可以參看下面的表格。
關於TestNG的具體學習,我這里推薦一個網站:https://www.yiibai.com/testng
大家可以在上面仔細學一下TestNG的用法。
簡單述說了TestNG之后,我們下面開始來開始我們的具體的測試類的編寫。在這里,我們根據前面編寫的一些類和工具,來進行測試類的編寫和配置文件(xml)的編寫。
首先來看一下測試類的Samplepackage temp;
import org.openqa.selenium.WebDriver; import org.testng.ITestContext; import org.testng.annotations.*; import webui.xUtils.browserUtil; import webui.xUtils.TestNGListener; @Listeners({TestNGListener.class}) public class testTemp{ WebDriver driver; @Test(dataProvider = "MTD",description = "測試用例1") public void MenuDoc1(ITestContext context,String un, String pwd) throws Exception { //使用ITestContext來獲取TestNG.xml文件中指定的參數。 String excelpath = context.getCurrentXmlTest().getParameter("excelpath");
BasePageE testPage = new BasePageE(driver,"testPage",excelpath);
testPage.click("文檔信息");
} @DataProvider public Object[][] MTD() { return new Object[][] { new Object[] { "system", "abX147" } }; } @BeforeMethod public void beforeMethod() { TestNGListener.setDriver(driver); } @AfterMethod public void afterMethod() {
} @BeforeClass @Parameters({"browser","url"}) public void beforeClass(String browser,String url) { driver = browserUtil.setDriver(browser,url); } @AfterClass public void afterClass() { browserUtil.quit(); } }
下面,我們來具體的講一講這個Sample。
在這個Sample里面,執行的順序是這樣的,BeforeClass------>BeforeMethod------->Test-------->AfterMethod-------->AfterClass,具體的意思是:在BeforeClass這一步進行瀏覽器的初始化,在BeforeMethod這一步設置監聽程序,Test這一步是執行測試用例並讀取DataProvider中的參數進行參數化處理,AfterMethod中不作任何操作,AfterClass為退出瀏覽器。
這就是一個測試類的基本流程。設置好環境,執行測試方法及判定,然后關閉退出。
上面這個測試類用到了很多參數,我們需要用xml文件,將TestNG的測試類中的參數,進行具體的定義。這樣才能真正的運行起來。
TestNG測試類具體配置文件,<suite>標簽的name屬性來定義這個測試套件的名字。<listeners>中的class-name是指的監聽程序調用的Jar包中的類,這個只要是導入了ReportNG的jar包,是相對固定的。(當然,最好是參考一下導入的jar包的說明)
<parameter>標簽用來定義具體的參數。這里,我們的測試類中,使用到了什么參數,都可以在這里定義。
在上面的測試類中,browser-----即瀏覽器使用哪一個(chrome,firefox,IE),主要訪問的url,使用的excel文件的路徑。
<classes> 標簽中,使用名字來定義需要執行的測試類。形式:<class name = "包名.類名">
這里需要有一點說明,在測試類的Sample里面,有一句:
String excelpath = context.getCurrentXmlTest().getParameter("excelpath");
這一句的意思是:是獲取當前路徑下的XML文件中,參數“excelpath”的值。因為我們的測試類和配置的xml文件是在同一個路徑下,所以這樣寫是OK的。如果,配置文件和測試類不在一個路徑下,那么這里需要注意相對路徑的問題!
其實,到這里,一個基本的WebUI的自動化測試框架已經可以運行起來了。系列性的框架文章暫時就寫到這里。
在之后的實際測試工作中,可以逐漸完善自己的自動化框架內容。比如添加判定,連接數據庫,截圖功能等等。不一定要大而全,但是一定要適合自己的。
之后,會寫一些完成小功能之類的東西,來充實自己的框架吧。