在使用java TestNG執行selenium用例的時候,如果不指定測試用例的執行順序,那麼就默認是按照字母的順序執行。以下爲兩種順序執行方式:
一. 同一個class裏多個方法的順序執行
1. 方法一:我們可以通過給每個方法取名來定義執行的順序,如下:
//登錄系統前臺
@Test
public void test01_loginfront() {
}
//提交訂單
@Test
public void test02_createbid(){
}
//後臺審覈訂單
@Test
public void test03_check(){
}
按照上面的取名方式,最後方法的執行順序爲test01_loginfront→test02_createbid→test03_check,這樣就達到我們要的效果啦
2. 方法二:使用priority指定執行順序(默認值爲0),數值越小,越靠前執行
//登錄系統前臺
@Test(priority = 0)
public void loginfront() {
}
//提交訂單
@Test(priority = 2)
public void createbid(){
}
//後臺審覈訂單
@Test(priority = 1)
public void check(){
}
按照上面的取名方式,數值越小的越靠前執行,最後方法的執行順序爲loginfront→check→createbid
3. 在TestNG.xml文件中加preserve-order="true"這個屬性
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false">
<test name="Demo" >
<classes>
<class name="com.test.Demo">
<methods preserve-order="true">
<include name="loginfront" />
<include name="createbid" />
<include name="check" />
</methods>
</class>
</classes>
</test>
</suite>
二、同時執行多個類class,或者java selenium 同時執行多個測試用例
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1">
<test name="test12" preserve-order="true">
<classes>
<class name="testcase.case1"/>
<class name="testcase.case2"/>
<class name="testcase.case3"/>
</classes>
</test>
</suite>
該例子中,case1、case2、case3爲3條測試用例,如果需要一起執行的話,就可以使用上面這種方式執行哦,這裏有個問題需要注意:看你的測試用例是可以併發執行還是串聯執行,這個時候就涉及到class裏方法命名的區分。
例子1 :
case1裏的方法示例:
//登錄系統前臺
@Test(priority = 0)
public void loginfront() {
}
//提交訂單
@Test(priority = 2)
public void createbid(){
}
//後臺審覈訂單
@Test(priority = 1)
public void check(){
}
如果3條測試用例裏的方法都用priority 定義了執行的順序,且指定了相同的priority數值,那麼TestNG會先跑完所有相同數值priority的測試方法,而不管你的測試方法是不是在同一個class裏面,即這裏的執行順序爲case1.loginfront→case2.loginfront→case3.loginfront→case1.createbid→case2.createbid→case3.createbid→case1.check→case2.check→case3.check,這樣的執行順序可能會導致我們的web selenium無法正常執行,所以class裏的方法此時不能通過這種方式進行順序執行,應該使用以下這種類型的:
//登錄系統前臺
@Test
public void test01_loginfront() {
}
//提交訂單
@Test
public void test02_createbid(){
}
//後臺審覈訂單
@Test
public void test03_check(){
}
或者是通過字母區分:
//登錄系統前臺
@Test
public void A_loginfront() {
}
//提交訂單
@Test
public void B_createbid(){
}
//後臺審覈訂單
@Test
public void C_check(){
}
或者是在test.xml裏面執行方法的執行順序
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false">
<test name="Demo" >
<classes>
<class name="com.test.Demo">
<methods preserve-order="true">
<include name="loginfront" />
<include name="createbid" />
<include name="check" />
</methods>
</class>
</classes>
</test>
</suite>
按照這種方式設置後的執行順序爲:case1.loginfront→case1.createbid→case1.check→case2.loginfront→case2.createbid→case2.checkcase3.loginfront→case3.createbid→case3.check
完美解決Java selenium 測試用例順序執行的問題