一、读取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. 章节十六、1-TestNG简介

    一.TestNG 介绍 1.TestNG 是一个来自 JUnit 和 NUnit 的测试框架,它具拥有更多的功能,提高了 执行的效率. 2.TestNG 是一个开源的自动化测试框架 去除了老框架的大部 ...

  2. 章节十六、3-TestNG方法和类注解

    一.Test Suite(测试套件) 我们通常认为一个testcase就是一个测试方法,但是会有很多的testcase,所以我们不可能把所有的testcase放到同一个测试类中,假如需要测试的页面有1 ...

  3. Python之路(第十六篇)xml模块、datetime模块

    一.xml模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单, xml比较早,早期许多软件都是用xml,至今很多传统公司如金融行业的很多系统的接口还主要 ...

  4. 章节十六、4-TestNG高级功能--把测试方法分优先级、分组执行

    一. 把测试方法分优先级执行----->(priority=索引) 1.新建一个testng方法 package testclasses; import org.testng.annotatio ...

  5. 章节十六、5-TestNG高级功能--Part2

    一.测试用例的依赖关系--->(dependsOnMethods = {"依赖方法名"}) 1.在实现自动化的过程中,有些测试用例必须在其它测试用例执行之后才能运行,两者之间 ...

  6. 章节十六、9-Listeners监听器

    一.IInokedMethodListener 1.实现一个类来监听testcase的运行情况. package listenerspackage; import org.testng.IInvoke ...

  7. 章节十六、10-TestNG报告和日志

    一.在进行自动化的过程中,日志一般采用log4j 2进行日志记录,但TestNG自己本身也带有日志记录功能(reporter),它的好处在于日志中记录的内容都是testng自动生成的. package ...

  8. 章节十六、2-TestNG注解和断言

    一.TestNG注解的testcease不是自上而下运行的,而是按照方法名的字母排序或数字的大小顺序运行的. 二.断言:判断返回的结果与我们的预期结果是否一致. 1.Assert.assertTrue ...

  9. 章节十六、7-DataProviders

    一.当我们的同一个test有多套数据需要进行测试,那么我们就需要用到-->DataProviders package testclasses1; import org.testng.annota ...

随机推荐

  1. elasticsearch启动错误整理

    一.elasticsearch错误复现 (一).环境 配置环境 OS:CentOS 7.4 64bit elasticsearch版本: - ip:10.18.43.170 java版本:java - ...

  2. [Pulsar系列] 10分钟学会Pulsar消息系统概念

    Apache Pulsar Pulsar是一个支持多租户的.高性能的服务与服务之间消息通讯的解决方案,最初由雅虎开发,现在由Apache软件基金会管理. Pulsar的主要特性如下: Pulsar实例 ...

  3. kali Metasploit 连接 Postgresql 默认密码

    使用 metasploit 时, 1. 启动 postgresql service postgresql start 2. 自行测试 postgresql 是否安装成功 根据需要,自行 修改 post ...

  4. JWT详解

    目录 1.前言 2.JWT的数据结构 2.1 Header 2.2 Payload 2.3 Signature 2.4 Base64URL 3. JWT的实现   1.前言 定义:JSON Web T ...

  5. Vue系列:Websocket 使用配置

    WebSocket 是什么? WebSocket  是一种网络通信协议.而且是在 HTML5 才开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. 为什么需要 WebSocket ? 了解计算 ...

  6. Unity进阶之:Shader渲染

    版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...

  7. python面试总结1(基础章节)

    python语言基础 语言特点 python是静态还是动态类型?是强类型还是弱类型 动态强类型语言 动态还是静态指的是编译期还是运作期确定类型 强类型指的是不会发生隐式类型转换 python作为后端语 ...

  8. Python RPC 之 gRPC

    gRPC 简介: gRPC 是一款高性能.开源的 RPC 框架,产自 Google,基于 ProtoBuf 序列化协议进行开发,支持多种语言(Golang.Python.Java等),本篇只介绍 Py ...

  9. 通过livy向CDH集群的spark提交任务

    场景 产品中需要通过前端界面选择执行某种任务(spark任务),然后通过livy 的restful api 提交集群的spark任务 简单介绍下livy,翻译自官网: Livy是基于Apache许可的 ...

  10. CRNN+CTC (基于CTPN 的end-to-end OCR)

    1. https://zhuanlan.zhihu.com/p/43534801  (详细原理) 2. https://blog.csdn.net/forest_world/article/detai ...