一、读取xml文件中参数
1、案例演示---》创建一个需要读取数据的类
1 package testclasses; 2 3 import org.testng.annotations.Test; 4 5 import org.testng.annotations.BeforeClass; 6 import org.testng.annotations.Parameters; 7 import org.testng.annotations.AfterClass; 8 9 public class TestNG_Parameters { 10 11 @BeforeClass 12 // @Parameters备注表示此次需要读取xml中的参数,需要导入(import org.testng.annotations.Parameters;)包 13 @Parameters({"browser","platform"}) 14 // 为了能够接收xml文件中的value,因此在方法中我们需要定义两个变量 15 public void setUp(String browse,String platform) { 16 System.out.println("TestNG_Parameters -> Steup"); 17 System.out.println("1. Parameters value from xml file:"+browse); 18 System.out.println("2. Parameters value from xml file:"+platform); 19 } 20 21 @Test 22 @Parameters({"response"}) 23 public void testMethod1(String response) { 24 System.out.println("TestNG_Parameters -> testMethod1"+response); 25 System.out.println("Response from xml file:"); 26 } 27 28 @AfterClass 29 public void afterClass() { 30 } 31 }
配置xml文件
1 <!-- 没有此行配置运行时可能会报错 --> 2 <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 3 <suite name="Parameters TestSuite"> 4 <test name="Test 1"> 5 <!-- 在此处配置参数,用于在测试的时候读取数据,value中表示具体的赋值 --> 6 <parameter name="browser" value="firefox"></parameter> 7 <parameter name="platform" value="windows"></parameter> 8 <parameter name="response" value="201"></parameter> 9 <classes> 10 <class name="testclasses.TestNG_Parameters"></class> 11 </classes> 12 </test> 13 </suite>
运行结果
2、当xml中通一个parameter 中有多个值,而我们只需要读取其中一个,那么就可以将它拆分为一个数组,然后进行读取。
package testclasses; import org.testng.annotations.Test; import org.testng.annotations.BeforeClass; import org.testng.annotations.Parameters; import org.testng.annotations.AfterClass; public class TestNG_Parameters { @BeforeClass // @Parameters备注表示此次需要读取xml中的参数,需要导入(import org.testng.annotations.Parameters;)包 @Parameters({"browser","platform"}) // 为了能够接收xml文件中的value,因此在方法中我们需要定义两个变量 public void setUp(String browse,String platform) { System.out.println("TestNG_Parameters -> Steup"); System.out.println("1. Parameters value from xml file:"+browse); System.out.println("2. Parameters value from xml file:"+platform); } @Test @Parameters({"response"}) public void testMethod1(String response) { // 将多个xml中的值拆分为数值 // split该方法可以按照指定的规则将值进行拆分,此处我们规定每个逗号间隔的为一个数组的值 String[] StringArray = response.split(","); System.out.println("TestNG_Parameters -> testMethod1"); System.out.println("Response from xml file:"+response); // 读取第二个位上的值,预期结果为“202”,索引从0开始 System.out.println("Response from xml StringArray[1] file:"+StringArray[1]); } }
xml配置:
1 <!-- 没有此行配置运行时可能会报错 --> 2 <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 3 <suite name="Parameters TestSuite"> 4 <test name="Test 1"> 5 <!-- 在此处配置参数,用于在测试的时候读取数据,value中表示具体的赋值 --> 6 <parameter name="browser" value="firefox"></parameter> 7 <parameter name="platform" value="windows"></parameter> 8 <!-- 201是字符串类型的,如果想变为数值类型需要在java类中进行强制转换 --> 9 <parameter name="response" value="201"></parameter> 10 <!-- 如果有多个值,我们可以拆分为数值,读取其中指定位置的值 --> 11 <parameter name="response" value="201,202"></parameter> 12 <classes> 13 <class name="testclasses.TestNG_Parameters"></class> 14 </classes> 15 </test> 16 </suite>
运行结果为:
注:xml中的参数都是字符类型的,如果我们在代码中需要int类型,那么就进行强制转换。
二、 用testNG并行执行case
testNG在执行case时,默认按照先后顺序每次只执行一个case,如果我们需要多个case同时执行,那么就需要在xml中对suite标签进行如下配置。
场景演示---》例如我们有两个test类需要并行执行:
第一个类
package testclasses1; import org.testng.annotations.BeforeClass; import org.testng.annotations.Parameters; import org.testng.annotations.Test; public class TestNG_Parallel1 { @Test public void testMethond1() throws InterruptedException { System.out.println("TestNG_Parallel1 -> testMethond1"); Thread.sleep(6000); System.out.println("TestNG_Parallel1 -> testMethond1 -> More Steps"); } @Test public void testMethond2() throws InterruptedException { System.out.println("TestNG_Parallel1 -> testMethond2"); Thread.sleep(6000); System.out.println("TestNG_Parallel1 -> testMethond2 -> More Steps"); } }
第二个类
package testclasses1; import org.testng.annotations.Test; public class TestNG_Parallel2 { @Test public void testMethond1() throws InterruptedException { System.out.println("TestNG_Parallel2 -> testMethond1"); Thread.sleep(6000); System.out.println("TestNG_Parallel2 -> testMethond1 -> More Steps"); } @Test public void testMethond2() throws InterruptedException { System.out.println("TestNG_Parallel2 -> testMethond2"); Thread.sleep(6000); System.out.println("TestNG_Parallel2 -> testMethond2 -> More Steps"); } }
配置xml文件:
<!-- 没有此行配置运行时可能会报错 -->
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<!-- parallel="tests"用于指定那一类标签能够并行执行,此处填写为“tests”,表示tests会并行执行,也可以填写设置classes或者class、methods等并行执行 -->
<!-- thread-count="2"表示设置并发数为2 -->
<suite name="Parallel TestSuite" parallel="tests" thread-count="2">
<test name="Test 1">
<classes>
<class name="testclasses1.TestNG_Parallel1"></class>
</classes>
</test>
<test name="Test 2">
<classes>
<class name="testclasses1.TestNG_Parallel2"></class>
</classes>
</test>
</suite>
运行结果:
三、场景结合实例演示
1 package testclasses1; 2 3 import java.util.concurrent.TimeUnit; 4 5 import org.openqa.selenium.By; 6 import org.openqa.selenium.WebDriver; 7 import org.openqa.selenium.WebElement; 8 import org.openqa.selenium.chrome.ChromeDriver; 9 import org.openqa.selenium.ie.InternetExplorerDriver; 10 import org.testng.annotations.AfterClass; 11 import org.testng.annotations.BeforeClass; 12 import org.testng.annotations.Parameters; 13 import org.testng.annotations.Test; 14 15 /*场景: 16 * 1. 打开网站:https://www.migang.com 17 * 2. 找到登录链接并且点击它 18 * 3. 找到用户名和密码文本框 19 * 4. 在用户名和密码文本框输入值 20 * 5. 点击登录按钮 21 * 6. 在 IE 和 chrome 上并行执行这个用例*/ 22 23 public class TestNG_SeleniumParametersParallelExample { 24 25 WebDriver driver; 26 String url; 27 28 @BeforeClass 29 @Parameters({"baseurl","browse"}) 30 public void beforeClass(String baseurl,String browse) { 31 // .equalsIgnoreCase:该方法判断是否相等,忽略大小写 32 if(browse.equalsIgnoreCase("IE")) { 33 driver = new InternetExplorerDriver(); 34 }else if(browse.equalsIgnoreCase("Chrome")){ 35 driver = new ChromeDriver(); 36 } 37 driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS); 38 driver.manage().window().maximize(); 39 driver.get(baseurl); 40 } 41 42 @Test 43 @Parameters({"login","username","password","dlan","yfm","mm"}) 44 public void Chrome(String login,String username,String password,String dlan,String yfm,String mm) { 45 WebElement denglu = driver.findElement(By.className(login)); 46 denglu.click(); 47 WebElement name = driver.findElement(By.name(username)); 48 name.sendKeys(yfm); 49 WebElement pasord = driver.findElement(By.name(password)); 50 pasord.sendKeys(mm); 51 WebElement button = driver.findElement(By.name(dlan)); 52 button.click(); 53 } 54 55 @AfterClass 56 public void afterClass() throws InterruptedException { 57 Thread.sleep(6000); 58 driver.quit(); 59 } 60 }
xml配置:
1 <!-- 没有此行配置运行时可能会报错 --> 2 <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 3 <suite name="Parameters" parallel="tests" thread-count="2"> 4 <test name = "IE Parameters" > 5 <parameter name="browse" value="IE"></parameter> 6 <parameter name="baseurl" value="https://www.migang.com"></parameter> 7 <parameter name="login" value="login"></parameter> 8 <parameter name="username" value="username"></parameter> 9 <parameter name="password" value="password"></parameter> 10 <parameter name="dlan" value="loginnow"></parameter> 11 <parameter name="yfm" value="1111111111"></parameter> 12 <parameter name="mm" value="111111"></parameter> 13 <classes> 14 <class name="testclasses1.TestNG_SeleniumParametersParallelExample"></class> 15 </classes> 16 </test> 17 <test name = "Chrome Parameters"> 18 <parameter name="browse" value="Chrome"></parameter> 19 <parameter name="baseurl" value="https://www.migang.com"></parameter> 20 <parameter name="login" value="login"></parameter> 21 <parameter name="username" value="username"></parameter> 22 <parameter name="password" value="password"></parameter> 23 <parameter name="dlan" value="loginnow"></parameter> 24 <parameter name="yfm" value="1111111111"></parameter> 25 <parameter name="mm" value="111111"></parameter> 26 <classes> 27 <class name="testclasses1.TestNG_SeleniumParametersParallelExample"></class> 28 </classes> 29 </test> 30 </suite>
如果有不明白的小伙伴可以私信问我,目前也建了qq、微信群,都是软件行业的小伙伴相互一起学习。
内容具有连惯性,未标注的地方可以看前面的博客,这是一整套关于ava+selenium自动化的内容,从java基础开始。
欢迎关注,转载请注明来源。