testng测试报告,testng官方文档

  testng测试报告,testng官方文档

  TestNG数据驱动测试的功能很强大,利用@DataProvider可以做数据驱动,数据源文件可以是EXCEL、XML、YAML、甚至可以是文本文件(文本文件)文本。

  写爬虫互联网协议(互联网协议)被封了怎么解决?立即使用

  @DataProvider注解简介:

  @DataProvider标记专门为测试方法提供参数的方法。这类方法必须返回对象[ ][ ]类型的二维数组或者IteratorObject[],每一行的对象[],都是测试方法的一个测试数据集,测试方法会为每个测试数据集执行一次。如果没有指定参数的名称,则默认为方法的名称,方法的名称没有限制。

  @DataProvider的小例子:

  导入Java。郎。反思。方法;

  导入org。TestNG。注释。数据提供者;

  导入org。TestNG。注释。测试;

  公共类测试{

  @DataProvider(name=user )

  公共对象[][]创建用户(方法m) {

  系统。出去。println(m . getname());

  返回新对象[][] { { root , root },{ test , root },{ test , test } }

  }

  @Test(dataProvider=user )

  公共void验证用户(字符串用户名,字符串密码){

  System.out.println(验证用户: 用户名:密码);

  断言用户名等于(密码);

  }

  }如上所示@DataProvider注解了创建用户方法,返回的二位数组里有三行数据,每行两列。

  所以@Test(dataProvider=user )注解的验证用户方法有两个参数,用来接收每一行的两个数据,如果创建用户返回的数据数组的列数和验证用户的参数个数不同就会报错的。

  因为返回的有三行,所以验证用户会被执行三次。结果如下:

  通过:verifyUser(root , root )

  失败:验证用户(测试,根)

  通过:验证用户(测试,测试)CSV文件数据读取和@DataProvider

  我自己做了一个以战斗支援车为例的测试架子,部分代码可通用。

  战斗支援车文件读取类(可通用,目录自己可以修改,也可改变成读取EXCEL、TXT等文件):

  导入Java。io。缓冲阅读器;

  导入Java。io。文件;

  导入Java。io。filereader

  导入Java。util。ArrayList

  导入Java。util。迭代器;

  导入Java。util。列表;

  导入Java。util。地图;

  导入Java。util。树形图;

  导入Java。util。正则表达式。matcher

  公共类CSVData实现IteratorObject[] {

  私有BufferedReader br=null

  //行数

  private int rowNum=0;

  //获取次数

  private int currow no=0;

  //列数

  private int列数=0;

  //键名

  私有字符串[]列名;

  //csv中所有行数据

  私有列表字符串csvList

  //实际想要的行数据

  私人列表字符串csvListNeed

  /*

  * 在测试中由@数据提供者(数据提供者= name )修饰的方法

  * 取战斗支援车时,调用此类构造方法(此方法会得到列名并将当前行移到下以后)执行后,转发哦

  *测试自己的方法中去,然后由它们调用此类实现的hasNext()、Next()方法

  * 得到一行数据,然后返回给由@Test(dataProvider=name )修饰的方法,如此

  * 反复到数据读完为止

  *

  *

  * @param filepath CSV文件名

  * @param casename用例名

  */

  公共CSVData(字符串文件名,字符串caseId) {

  尝试{

  文件目录=新文件( . ));

  string ss=“resources”;

  File CSV=新文件(目录。getcanonical file() \ \ src \ \ test \ \ ss。全部替换( \ \ . ),Matcher.quoteReplacement(\\ ))

  文件名. CSV’);

  br=新BufferedReader(新file reader(CSV));

  CSV list=new ArrayList string();

  while (br.ready()) {

  csvlist。添加(br。readline());

  this.rowNum

  }

  string字符串值[]=csvlist。获取(0).拆分(,);

  这个。列号=字符串值。长度;

  列名=新字符串[字符串值。长度];

  for(int I=0;i stringValue.lengthi ) {

  columnName[i]=stringValue[i]。toString();

  }

  这是科洛诺

  CSV list need=new ArrayList string();

  for(int I=1;我rowNumi ) {

  String values[]=csvList.get(i).拆分(,);

  如果(caseid。等于(值[0]){

  CSV列表需求。添加(csvlist。get(I));

  }

  }

  这个。rownum=2;//就取一行

  } catch(异常e) {

  e。printstacktrace();

  }

  }

  @覆盖

  public boolean hasNext() {

  如果(这个。rownum==0 这个。curr owno=this。rownum){

  尝试{

  br。close();

  } catch(异常e) {

  e。printstacktrace();

  }

  返回错误的

  }否则{

  返回真实的

  }

  }

  @覆盖

  公共对象[]下一个(){

  /*

  * 将数据放入地图

  */

  MapString,String s=new TreeMapString,String();

  字符串CSV单元格[]=csvlist需求。获取(0).拆分(,);

  for(int I=0;i this.columnNumi ) {

  字符串temp=

  尝试{

  temp=csvCell[i].toString();

  } catch(ArrayIndexOutOfBoundsException ex){

  temp=

  }

  s.put(this.columnName[i],temp);

  }

  对象r[]=新对象[1];

  r[0]=s;

  这是科洛诺

  return r;

  }

  @覆盖

  公共无效删除(){

  引发新的UnsupportedOperationException("移除不支持的");

  }

  }这个类实现了迭代器对象[]迭代器,测试调用此类实现的hasNext()、Next()方法得到一行数据,在下一个()方法中可以看到,我把数据是放在映射字符串,字符串中的,再把地图放在对象[]里,所以测试方法的参数就必须是一个映射字符串,字符串。我这里改成了只读取一行,因为一个战斗支援车文件的一个caseId只应该有一行。

  数据驱动类:

  导入Java。郎。反思。方法;

  导入Java。util。迭代器;

  导入org。TestNG。注释。数据提供者;

  公共类DataProviderTest {

  /**

  * @DataProvider的返回值类型只能是对象[][]与迭代器对象[]

  *

  * @param方法

  * @返回

  */

  @DataProvider

  公共迭代器对象[]数据源(方法方法){

  return (IteratorObject[])新的CSVData(方法。getdeclaringclass().getSimpleName()、方法。getname());

  }

  }方法方法是通过反射获取的,总之哪个方法调用我方法就是那个方法。

  method.getDeclaringClass().getSimpleName()可以获取方法所属的类的类名。

  我这里规定了战斗支援车的文件名就是测试类的类名,用例名就是方法名。

  return (IteratorObject[])新的CSVData(…)就是将战斗支援车读取类读取的结果返回,返回的类型是迭代器对象[]的,符合@DataProvider的返回值类型要求。当@Test(dataProvider=dataSource )注解的测试方法执行时就会调用迭代程序的hasNext()判断是否有数据和下一个()获取数据。

  测试类:

  导入Java。util。地图;

  导入org。TestNG。注释。测试;

  公共类数据测试扩展了DataProviderTest {

  @Test(dataProvider=dataSource )

  公共void 2(映射字符串,字符串数据){

  System.out.println(数据);

  }

  @Test(dataProvider=dataSource )

  公共空隙1(映射字符串,字符串数据){

  System.out.println(数据);

  }

  }输出结果如下:

  通过:id1({caseId=id1,flag=Y,property=flowModel,type=com。我的银行。bkloanply。核心。模型。基本模型,value=BaseModel.csv@1})

  通过:id2({caseId=id2,flag=M,property=context,type=java.util.Map,value=a:对象。CSV @ 1 })总结

  从上面的例子可以看出,无论@DataProvider注释的方法返回的是Object[ ][]还是IteratorObject[ ],最终测试方法得到的参数都是放在Object[]中的东西。第一个例子放了两个字符串,第二个例子放了MapString,String,因此,第一个测试类的测试方法的参数是两个字符串,第二个测试类的测试方法的参数是MapString,String,这两个参数必须一致。以上是TestNG数据驱动介绍的详细内容。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: