章节十六、6-xml参数化and并行case
一、读取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基础开始。
欢迎关注,转载请注明来源。
章节十六、6-xml参数化and并行case的更多相关文章
- 章节十六、1-TestNG简介
一.TestNG 介绍 1.TestNG 是一个来自 JUnit 和 NUnit 的测试框架,它具拥有更多的功能,提高了 执行的效率. 2.TestNG 是一个开源的自动化测试框架 去除了老框架的大部 ...
- 章节十六、3-TestNG方法和类注解
一.Test Suite(测试套件) 我们通常认为一个testcase就是一个测试方法,但是会有很多的testcase,所以我们不可能把所有的testcase放到同一个测试类中,假如需要测试的页面有1 ...
- Python之路(第十六篇)xml模块、datetime模块
一.xml模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单, xml比较早,早期许多软件都是用xml,至今很多传统公司如金融行业的很多系统的接口还主要 ...
- 章节十六、4-TestNG高级功能--把测试方法分优先级、分组执行
一. 把测试方法分优先级执行----->(priority=索引) 1.新建一个testng方法 package testclasses; import org.testng.annotatio ...
- 章节十六、5-TestNG高级功能--Part2
一.测试用例的依赖关系--->(dependsOnMethods = {"依赖方法名"}) 1.在实现自动化的过程中,有些测试用例必须在其它测试用例执行之后才能运行,两者之间 ...
- 章节十六、9-Listeners监听器
一.IInokedMethodListener 1.实现一个类来监听testcase的运行情况. package listenerspackage; import org.testng.IInvoke ...
- 章节十六、10-TestNG报告和日志
一.在进行自动化的过程中,日志一般采用log4j 2进行日志记录,但TestNG自己本身也带有日志记录功能(reporter),它的好处在于日志中记录的内容都是testng自动生成的. package ...
- 章节十六、2-TestNG注解和断言
一.TestNG注解的testcease不是自上而下运行的,而是按照方法名的字母排序或数字的大小顺序运行的. 二.断言:判断返回的结果与我们的预期结果是否一致. 1.Assert.assertTrue ...
- 章节十六、7-DataProviders
一.当我们的同一个test有多套数据需要进行测试,那么我们就需要用到-->DataProviders package testclasses1; import org.testng.annota ...
随机推荐
- JavaSE(二)标识符,关键字,数据类型
一.标识符和关键字 1.具有特殊作用的分隔符:分号;.花括号{}.圆括号().空格.圆点 . 2.标识符规则:用于给程序中变量.类.方法命名的符号. Ja ...
- Fragment 使用详解
极力推荐文章:欢迎收藏 Android 干货分享 阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以 ...
- Android活动(Activity)创建及生命周期
Activity是Android的门面,可以与用户进行互动的重要模块,凡是在应用中可以看到的东西,都是放在活动中的. 在学习新的技术时,我喜欢将需要学习的技术与自己懂得技术进行类似比较,而活 ...
- 《机器学习技法》---soft-margin SVM
1. soft-margin SVM的形式 其中ξn表示每个点允许的犯错程度(偏离margin有多远),但是犯错是有代价的,也就是目标函数里面要最小化的.c控制对犯错的容忍程度. 2. 推导soft ...
- arukas 樱花免费docker容器获取IP和端口
arukas 樱花免费docker容器,可以安装linux系统,但是每隔一段时间会重启,重启以后IP地址和映射到公网的端口都会变,获取IP和端口,我研究了很久终于找到了C#获取IP和端口的办法,用来搭 ...
- GOF23-单列模式
1.什么是单例模式 一个类只有一个实列,并且提供一个对外访问该实例的全局访问点. 常见应用场景:数据库连接池,项目中读取配置文件的类,servlet也是单列,Spring中的Bean默认也是单列 2. ...
- ubuntu下部署mongodb以及设置允许远程连接
最近因为项目原因需要在阿里云服务器上部署mongodb,网上查阅了一些资料,特此记录一下步骤 1.运行apt-get install mongodb命令安装mongodb服务(如果提示找不到该pack ...
- Java虚拟机详解(五)------JVM参数(持续更新)
JVM参数有很多,其实我们直接使用默认的JVM参数,不去修改都可以满足大多数情况.但是如果你想在有限的硬件资源下,部署的系统达到最大的运行效率,那么进行相关的JVM参数设置是必不可少的.下面我们就来对 ...
- CF553C Love Triangles(二分图)
Tyher推的好题. 题意就是给你一些好边一些坏边,其他边随意,让你求符合好坏坏~,或者只包含好好好的三元环的无向图个数. 坏坏的Tyher的题意是这样的. 再翻译得更加透彻一点就是:给你一些0(好边 ...
- 程序与CPU
CPU中共有四大组件: 寄存器 控制器 运算器 时钟 寄存器:存取数值(存东西的) 控制器:负责将内存(寄存器)中的数据进行读入和写出(控制寄存器 协调者) 运算器:里面是逻辑运算单元,协助寄存器和控 ...