章节十六、6-xml参数化and并行case

一、读取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>

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

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

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

原文地址:https://www.cnblogs.com/luohuasheng/p/11448245.html

时间: 2024-10-03 10:36:51

章节十六、6-xml参数化and并行case的相关文章

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

一.Test Suite(测试套件) 我们通常认为一个testcase就是一个测试方法,但是会有很多的testcase,所以我们不可能把所有的testcase放到同一个测试类中,假如需要测试的页面有10个,我们需要创建不同的类来测试这10个页面的具体功能,测试具体功能的测试用例会放到具体的测试类中,把这些所有的测试类组合起来就成了Test Suite.可以根据我们的测试目的,选择一些类来组成Test Suite.可以选择一些基本功能的测试类,组成冒烟测试的测试类,冒烟测试可以快速的检验软件的基本

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

一.TestNG注解的testcease不是自上而下运行的,而是按照方法名的字母排序或数字的大小顺序运行的. 二.断言:判断返回的结果与我们的预期结果是否一致. 1.Assert.assertTrue(); 2.Assert.assertFalse(); 注意: Assert true语句如果实际输出时false,测试不通过,并停止执行测试. Assert.assertFalse()与Assert.assertTure()正好相反,也就是说,如果您希望某个元素在页面上不存在是测试继续执行,就可以

第一百二十六节,JavaScript,XPath操作xml节点

第一百二十六节,JavaScript,XPath操作xml节点 学习要点: 1.IE中的XPath 2.W3C中的XPath 3.XPath跨浏览器兼容 XPath是一种节点查找手段,对比之前使用标准DOM去查找XML中的节点方式,大大降低了查找难度,方便开发者使用.但是,DOM3级以前的标准并没有就XPath做出规范:直到DOM3在首次推荐到标准规范行列.大部分浏览器实现了这个标准,IE则以自己的方式实现了XPath. 一.IE中的XPath 在IE8及之前的浏览器,XPath是采用内置基于A

Gradle 1.12 翻译——第十六章. 使用文件

有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com/1.12/userguide/userguide.html 本文原创,转载请注明出处:http://blog.csdn.net/maosidiaoxian/article/details/41113353 关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qin

十六款值得关注的NoSQL与NewSQL数据库--转载

原文地址:http://tech.it168.com/a2014/0929/1670/000001670840_all.shtml [IT168 评论]传统关系型数据库在诞生之时并未考虑到如今如火如荼的移动.社交以及大数据负载类型,同时也并不适合处理极端规模处理任务.不过大家不必担心,十六家专业企业已经为我们带来他们各自的次世代NoSQL与NewSQL选项. 为什么在处理全新数据类型以及极端业务规模实例时,企业正越来越多地选择备用方案来替代占据领导地位的关系型数据库管理系统(简称RDMS)? 带

二十六:Struts2 和 spring整合

二十六:Struts2 和 spring整合 将项目名称为day29_02_struts2Spring下的scr目录下的Struts.xml文件拷贝到新项目的scr目录下 在新项目的WebRoot---->WEB-INF目录下新建一个目录lib,用于存放jar包(Struts2和spring整合所需jar包) 将项目名称为day29_02_struts2Spring,WebRoot---->WEB-INF下的lib目录下的所有jar包拷贝到新项目对应的位置,同时将spring的配置文件appl

Android学习笔记(十六)——碎片之间进行交互(附源码)

碎片之间进行交互 点击下载源码 很多时候,一个活动中包含一个或者多个碎片,它们彼此协作,向用户展示一个一致的UI.在这种情况下,碎片之间能进行通信并交换数据十分重要. 1.使用上一篇中创建的同一个项目,在fragment.xml中添加TextView的标识id: android:id="@+id/lblFragment1" 2.在fragment2.xml中添加一个Button,用于与fragment1进行交互: <Button android:id="@+id/btn

Java Web总结十六之一自定义标签

一.自定义标签简介 1.为什么要使用自定义标签? 自定义标签主要用于移除Jsp页面中的<%java%>代码. 2.开发自定义标签的步骤: 1)开发自定义标签处理类,该类需要实现SimpleTag接口/SimpleTagSupport类,重写doTag()方法. 2)编写标签库描述符(tld)文件,在tld文件中对自定义标签进行描述,并放置在WEB-INF/目录下. 3)完成以上操作,即可在JSP页面中导入和使用自定义标签. 二.自定义标签描述 1.实现SimpleTag接口的标签通常称为简单标

十六、Android 滑动效果汇总

Android 滑动效果入门篇(一)-- ViewFlipper Android 滑动效果入门篇(二)-- Gallery Android 滑动效果基础篇(三)-- Gallery仿图像集浏览 Android 滑动效果基础篇(四)-- Gallery + GridView Android 滑动效果进阶篇(五)-- 3D旋转 Android 滑动效果进阶篇(六)-- 倒影效果 ViewFilpper 是Android官方提供的一个View容器类,继承于ViewAnimator类,用于实现页面切换,