您好,登錄后才能下訂單哦!
簡(jiǎn)述下testng做參數(shù)化的幾種方式:
@Parameters
dataProvider
如果使用的參數(shù)相對(duì)簡(jiǎn)單可以使用@Parameters,把參數(shù)定義在.xml文件中即可,如新建一個(gè)testng.xml
考慮如下測(cè)試場(chǎng)景,我想打開(kāi)51cto的官網(wǎng),然后退出
我就可以把url定義在testng.xml中
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<!-- thread-count="4" 為同時(shí)執(zhí)行的線程數(shù) parallel="tests" 為同時(shí)執(zhí)行的測(cè)試級(jí)別 -->
<suite name="ppTest" thread-count="4" parallel="tests">
<parameter name="url" value="http://www.zhengmoney.com" />
<test name="ppTest" preserve-order="true">
<classes>
<class name="pp.PPTest" />
</classes>
</test>
</suite>
然后在pp包下面新建PPTest類:
package pp;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Optional;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
/**
* @author Anthony
*
*/
public class PPTest {
public WebDriver driver;
/**
* @param domainURL @Optional是如果在xml中沒(méi)讀到url就用Optional里面的值
*/
@Parameters({"url"})
@Test
public void ppTest(@Optional("http://www.baidu.com/") String domainURL) {
driver = new FirefoxDriver();
driver.get(domainURL);
driver.quit();
}
}
@Parameters 可以被放置到如下位置:
(1)在任何已經(jīng)被 @Test, @Before/After 或 @Factory 注解過(guò)的地方。
(2)在測(cè)試類中至多被放到一個(gè)構(gòu)造函數(shù)簽。這樣,TestNG才能在需要的時(shí)候使用 testng.xml 中特定的參數(shù)來(lái)實(shí)例化這個(gè)類。這個(gè)特性可以被用作初始化某些類中的值,以便稍后會(huì)被類中其他的方法所使用。
注意:
XML中的參數(shù)會(huì)按照J(rèn)ava參數(shù)在注解中出現(xiàn)的順序被映射過(guò)去,并且如果數(shù)量不匹配,TestNG會(huì)報(bào)錯(cuò)。
參數(shù)是有作用范圍的。在testng.xml 中,你即可以在<suite> 標(biāo)簽下聲明,也可以在 <test>下聲明。如果兩個(gè)參數(shù)都有相同的名字,那么,定義在<test> 中的有優(yōu)先權(quán)。這在你需要覆蓋某些測(cè)試中特定參數(shù)的值時(shí),會(huì)非常方便。
DataProvider返回的是一個(gè)Object的二維數(shù)組,二維數(shù)組中的每個(gè)一維數(shù)組都會(huì)傳遞給調(diào)用函數(shù),作為參數(shù)使用。運(yùn)行的時(shí)候,會(huì)發(fā)現(xiàn), @Test標(biāo)識(shí)的test method被執(zhí)行的次數(shù)和object[][]包含的一維數(shù)組的個(gè)數(shù)是一致的,而@Test標(biāo)識(shí)的函數(shù)的參數(shù)個(gè)數(shù),也和object內(nèi)一維數(shù)組內(nèi)的元素?cái)?shù)是一致的。
申明數(shù)據(jù)源可以像這樣:
package com.example.testdata;
import org.testng.annotations.DataProvider;
/**
* @author Anthony
*
*/
public class TestProvider {
@DataProvider(name = "account")
public static Object[][] accountInfo() {
return new Object[][] { new Object[] { "古雷馬", "1234qwer" },
new Object[] { "古雷星", "1234qwer" } };
}
}
調(diào)用時(shí)則可以這樣:
import org.testng.Assert;
import org.testng.annotations.Test;
import com.example.testdata.TestProvider;
/**
* @author Anthony
*
*/
public class TestPractice {
@Test(dataProvider = "account", dataProviderClass = TestProvider.class)
public void testAgain(String userName, String password) {
System.out.println("I'm test again");
Assert.assertEquals("古雷馬", userName);
}
}
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。