zoukankan      html  css  js  c++  java
  • 章节十六、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基础开始。

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

  • 相关阅读:
    NOIP2014-普及组复赛-第二题-比例简化
    NOIP2014-普及组复赛-第一题-珠心算测验
    洛谷-不高兴的津津(升级版)-数组
    洛谷-陶陶摘苹果(升级版)-数组
    洛谷-小鱼比可爱-数组
    小车问题
    洛谷-小鱼的数字游戏-数组
    洛谷-校门外的树-数组
    centos 6.5 minimal 安装及vm-tools安装
    php使用第三方登录
  • 原文地址:https://www.cnblogs.com/luohuasheng/p/11448245.html
Copyright © 2011-2022 走看看