zoukankan      html  css  js  c++  java
  • testng参数化(提供测试数据)

    testng提供测试数据的两个注释:@DataProvide和@Parameter
     
    一、通过testng.xml中设置参数
    (实际上testng.xml只是一个名字,可以起任何一个名字,只要是.xml文件,然后文件格式按照testng的文档格式DTD来就可以了)
    testng.xml中的内容:
    <?xml version="1.0" encoding="UTF-8" ?>
    <suite name = "testngframetest">
        <parameter name="para" value="test_para1"/>
        <test name="测试参数赋值">
            <classes>
                <parameters>
                    <parameter name="para1" value="test_para1"/>
                    <parameter name="para2" value="test_para2"/>
                </parameters>
                <class name = "paramer">
                    <methods>
                        <include name ="showparamer"></include>
                    </methods>
                </class>
            </classes>
        </test>
    </suite>
     
    .java文件的测试用例中通过parameters获得数据
    使用方法1:
    @Test(parameters="para1")
    public void testcase(String para1){
         具体的测试用例,参数中的para1自动获取@Test中声明的变量,读取的是testng的xml文件中声明的参数para1的value值
    }
    如果有多个参数,可以使用这种方式:@Test(parameters={"para1","para2"})
     
    使用方法2:
    @Parameter({"para1","para2"})
    @Test
         具体的测试用例(参数@Parameter写在了@Test前面)
     
    具体代码如下:
    import org.testng.annotations.Test;
    public class paramer {
        @Test(parameters ={"para1","para2"})
        public  void showparamer(String para11,String para22){
            System.out.println("testng获得的参数para1如下:"+para11);
            System.out.println("testng获得的参数para2如下:"+para22);;
        }
    }
     
    说明:
    1.测试用例中设置的参数名随意,但是数量一定要和@Parameter中提供的数量一致,按照testng.xml中定义的顺序来取值的
    2.<parameter>可以声明在<suite>或者<test>级别,在<test>下的<parameter>会覆盖在<suite>下声明的同名变量
    3..java的测试用例中,可以通过@Optional("参数")来声明变量,如果没有在testng.xml中没有找到参数,会用@Optional("")中声明的参数
    例如下面的代码,testng中没有声明para1和para2时,执行用例时会直接复制test1和test2
    import org.testng.annotations.Optional;
    import org.testng.annotations.Test;
    public class paramer {
        @Test(parameters ={"para1","para2"})
        public  void showparamer(@Optional("test1") String para11, @Optional("test2") String para22){
            System.out.println("testng获得的参数para1如下:"+para11);
            System.out.println("testng获得的参数para2如下:"+para22);;
        }
    }
     
    二、通过注释@Dataprovide获得参数
    (testng.xml只能传递简单的参数,如果是循环遍历的使用不同的参数则不可以实现。这时可以使用@Dataprovide来提供数据)
     
    提供数据的方法:
    @DataProvider(name = "dataprovider1")
    public Object[][] dataprovide(){
        return new Object[][]{{1,2,3},{3,2,1}};
    }
    说明:
    1.@DataProvide只能返回Object数组结果
    2.Object的行中的每一列标识一个参数(比如上面的例子是3个参数),行数决定了调用的方法要执行的次数(比如上面的例子是执行2次)
     
    调用数据方法:
    @Test(dataprovide="XXX")
    说明:
    1.XXX为@DataProvide声明的一个名字,返回的是一个Object数组
    2.方法的执行次数为赋值参数的遍数。比如提供数组为1行,则只执行一次;如果是数组为3行,则执行3次。
     
    其他扩展:
    1.@DataProvide写在单独的class里,增强复用性。
    这时调用该数据的方法为:@Test(dataprovide="XXX",dataClass=YYY.class)
    说明:读取YYY.class下的@DataProvide为XXX的Object数组数据
    2.@DataProvide下定义的数组,通过其他文件读取,比如读取excel,返回一个Object数组
    3.@DataProvide可以通过parallel实现并行执行线程,默认10个,可以在testng.xml中进行修改(<suite name="XXX" data-provider-thread-count="YYY">)
    @DataProvider(name = "dataprovider1",parallel = true)
    public Object[][] dataprovide(){
        return new Object[][]{{1,2},{2,1}};
    }
    @Test(dataProvider = "dataprovide")
    public void showDataprovide(int a,int b,Method c){
        System.out.println("DataProvider获得的参数para1如下:"+a);
        System.out.println("DataProvider获得的参数para2如下:"+b);;
        System.out.println("DataProvider获得的参数para2如下:"+c.getName());

    }
    4.@DataProvide和@Parameters不能同时声明,但是可以通过其他方法实现同时使用。
    String testId = context.getCurrentXmlTest().getParameter("test_id"); 
  • 相关阅读:
    Windows控制台程序“选定模式”的问题
    落网的音乐很好听的,你造么?不能下载啊,怎么破?
    记一次复杂的正则匹配——匹配但不包含
    判断浏览器是否为IE内核的最简单的方法
    Nodejs发送Post请求时出现socket hang up错误的解决办法
    Windows下通过bat脚本实现自动上传文件到ftp服务器
    jQuery对html进行Encode和Decode
    scala学习笔记:理解类继承
    scala学习笔记:理解lazy值
    scala学习笔记:match表达式
  • 原文地址:https://www.cnblogs.com/ceshi2016/p/6439961.html
Copyright © 2011-2022 走看看