一、读取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. HTML 第4章初始CSS3

    什么是CSS? CSS全称为层叠样式表,通常又称为风格样式表. 引用CSS样式: 语法: <h1 styske="color:red;">style属性的应用</ ...

  2. 今天代码中接触到了一个新的东西。js的上下自动滚动,无缝对接。

    js的上下自动滚动,无缝对接.为什么会用到这个东西呢?因为我在做公司的官网项目的修改的时候.有一个产品介绍的页面,会有很多的产品出现在,中间部分的列表里.但是又不能够使用分页.所以我就在想如果,列表数 ...

  3. python基础--基于套接字进行文件传输、异常处理、socketserver模块

    异常处理: 什么是异常处理: 程序在运行过程中出现了不可预知的错误,并且该错误没有对应的处理机制,那么就会以异常的形式表现出来,造成的影响就是整个程序无法再正常运行 异常的结构: 异常的类型.异常的信 ...

  4. Spring cloud 超时配置总结

    基准配置: eureka-server : 注册中心 端口号1000 service-A : 服务A端口号2000 service-B : 服务B 端口号3000 其中,B服务通过feign调用服务A ...

  5. 详解阿里P7架构师是怎么在Spring中实现事务暂停

    摘要 Spring框架是一个流行的基于轻量级控制反转容器的Java/J2EE应用框架,尤其在数据访问和事务管理方面的能力是众所周知的.Spring的声明性事务分离可以应用到任何POJO目标对象,并且包 ...

  6. android ——Tablayout

    Tabs make it easy to explore and switch between different views. 通过TabLayout可以在一个活动中通过滑动或者点击切换到不同的页面 ...

  7. 源码编译OpenJdk 8,Netbeans调试Java原子类在JVM中的实现(Ubuntu 16.04)

    一.前言 前一阵子比较好奇,想看到底层(虚拟机.汇编)怎么实现的java 并发那块. volatile是在汇编里加了lock前缀,因为volatile可以通过查看JIT编译器的汇编代码来看. 但是原子 ...

  8. Docker进阶-资源管理Swarm+Portainer

    Docker Swarm资源管理 Docker Swarm是Docker官方三剑客项目之一,提供Docker容器集群服务,是Docker官方对容器云生态进行支持的核心方案. 使用它,用户可以将多个Do ...

  9. Spring Cloud Stream 核心概念

    Spring Cloud Stream简介 Spring cloud stream是一个构建与Spring Boot和Spring Integration之上的框架,方便开发人员快速构建基于Messa ...

  10. Java笔记(持续更新中)

    Java语言的特点: 面向对象(封装,继承,多态) 平台无关性(JVM运行.class文件) 语言(泛型,Lambda) 类库(集合,并发,网络,IO/NIO) JRE(Java运行环境,JVM,类 ...