一、读取xml文件中参数

1、案例演示---》创建一个需要读取数据的类

 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) {
System.out.println("TestNG_Parameters -> testMethod1"+response);
System.out.println("Response from xml file:");
} @AfterClass
public void afterClass() {
}
}

配置xml文件

 <!-- 没有此行配置运行时可能会报错 -->
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Parameters TestSuite">
<test name="Test 1">
<!-- 在此处配置参数,用于在测试的时候读取数据,value中表示具体的赋值 -->
<parameter name="browser" value="firefox"></parameter>
<parameter name="platform" value="windows"></parameter>
<parameter name="response" value="201"></parameter>
<classes>
<class name="testclasses.TestNG_Parameters"></class>
</classes>
</test>
</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配置:

 <!-- 没有此行配置运行时可能会报错 -->
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Parameters TestSuite">
<test name="Test 1">
<!-- 在此处配置参数,用于在测试的时候读取数据,value中表示具体的赋值 -->
<parameter name="browser" value="firefox"></parameter>
<parameter name="platform" value="windows"></parameter>
<!-- 201是字符串类型的,如果想变为数值类型需要在java类中进行强制转换 -->
<parameter name="response" value="201"></parameter>
<!-- 如果有多个值,我们可以拆分为数值,读取其中指定位置的值 -->
<parameter name="response" value="201,202"></parameter>
<classes>
<class name="testclasses.TestNG_Parameters"></class>
</classes>
</test>
</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>

运行结果:

三、场景结合实例演示

 package testclasses1;

 import java.util.concurrent.TimeUnit;

 import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test; /*场景:
* 1. 打开网站:https://www.migang.com
* 2. 找到登录链接并且点击它
* 3. 找到用户名和密码文本框
* 4. 在用户名和密码文本框输入值
* 5. 点击登录按钮
* 6. 在 IE 和 chrome 上并行执行这个用例*/ public class TestNG_SeleniumParametersParallelExample { WebDriver driver;
String url; @BeforeClass
@Parameters({"baseurl","browse"})
public void beforeClass(String baseurl,String browse) {
// .equalsIgnoreCase:该方法判断是否相等,忽略大小写
if(browse.equalsIgnoreCase("IE")) {
driver = new InternetExplorerDriver();
}else if(browse.equalsIgnoreCase("Chrome")){
driver = new ChromeDriver();
}
driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
driver.manage().window().maximize();
driver.get(baseurl);
} @Test
@Parameters({"login","username","password","dlan","yfm","mm"})
public void Chrome(String login,String username,String password,String dlan,String yfm,String mm) {
WebElement denglu = driver.findElement(By.className(login));
denglu.click();
WebElement name = driver.findElement(By.name(username));
name.sendKeys(yfm);
WebElement pasord = driver.findElement(By.name(password));
pasord.sendKeys(mm);
WebElement button = driver.findElement(By.name(dlan));
button.click();
} @AfterClass
public void afterClass() throws InterruptedException {
Thread.sleep(6000);
driver.quit();
}
}

xml配置:

 <!-- 没有此行配置运行时可能会报错 -->
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Parameters" parallel="tests" thread-count="2">
<test name = "IE Parameters" >
<parameter name="browse" value="IE"></parameter>
<parameter name="baseurl" value="https://www.migang.com"></parameter>
<parameter name="login" value="login"></parameter>
<parameter name="username" value="username"></parameter>
<parameter name="password" value="password"></parameter>
<parameter name="dlan" value="loginnow"></parameter>
<parameter name="yfm" value="1111111111"></parameter>
<parameter name="mm" value="111111"></parameter>
<classes>
<class name="testclasses1.TestNG_SeleniumParametersParallelExample"></class>
</classes>
</test>
<test name = "Chrome Parameters">
<parameter name="browse" value="Chrome"></parameter>
<parameter name="baseurl" value="https://www.migang.com"></parameter>
<parameter name="login" value="login"></parameter>
<parameter name="username" value="username"></parameter>
<parameter name="password" value="password"></parameter>
<parameter name="dlan" value="loginnow"></parameter>
<parameter name="yfm" value="1111111111"></parameter>
<parameter name="mm" value="111111"></parameter>
<classes>
<class name="testclasses1.TestNG_SeleniumParametersParallelExample"></class>
</classes>
</test>
</suite>

如果有不明白的小伙伴可以加群“555191854”问我,群里都是软件行业的小伙伴相互一起学习。

内容具有连惯性,未标注的地方可以看前面的博客,这是一整套关于ava+selenium自动化的内容,从java基础开始。

欢迎关注,转载请注明来源。

最新文章

  1. CF2.C(二分贪心)
  2. 最近学习linux命令的一个总结
  3. Harris角点检测
  4. mysql explain用法和结果的含义(转)
  5. js 鼠标事件的抓取代码
  6. chrome无法登陆账号,显示操作超时的解决方案
  7. Nginx的负载均衡 - 加权轮询 (Weighted Round Robin) 下篇
  8. .NET、PHP、MySql、JS中的时间戳你每次是手写还是复制?这篇文章让你一次性搞懂
  9. oracle_创建表空间_临时表空间_修改表空间_以及自增长
  10. step_by_step_记录那些在VS上使用过的工具
  11. 2018年尚硅谷《全套Java、Android、HTML5前端视频》
  12. SpringCloud(二)Eureka集群与Feign
  13. SNF快速开发平台MVC-富文本控件集成了百度开源项目editor
  14. JavaWeb基础-Jsp基础语法
  15. PHP+mysql系统报错:PHP message: PHP Warning: Unknown: Failed to write session data (files)
  16. .Oracle固定执行计划之SQL PROFILE概要文件
  17. 8-8 Ddfense Line uva1471 优先级队列
  18. window下完全删除nodejs
  19. Jquery 自定义插件写法(示例)
  20. 如何实现java的四则运算

热门文章

  1. eclipse的下载安装配置
  2. 【原创】原来你竟然是这样的Chrome?!Firefox笑而不语
  3. 7.源码分析---SOFARPC是如何实现故障剔除的?
  4. 教老婆学Linux运维(一)初识Linux
  5. 如何编写一个WebPack的插件原理及实践
  6. indexedDB添加,删除,获取,修改
  7. DDOS浅谈
  8. 洛谷 P2024 [NOI2001]食物链
  9. Mybatis mapper动态代理的原理详解
  10. Spring源码剖析开篇:什么是Spring?