TestNG之参数化
TestNG提供了两种参数化的方式,一种是通过XML,一种是通过代码实现,下面对这两种方式做介绍。
一、通过xml
/**
* <suite name="Suite" parallel="false">
* <!-- XML中增加一下两行 -->
* <parameter name="username" value="admin"/>
* <parameter name="password" value="123456"/>
*
* @Title: paraFromXML
* @Description: Parameters from testng.xml
* @param name
* @param pwd
* @return void
* @throws
*/
@Parameters({"username","password"})
@Test
public void paraFromXML(String name, String pwd) {
System.out.println(name+","+pwd);
//print admin,123456
}
二、通过DataProvider,返回值分别是Object[][]和Iterator<Object[]>
返回值是Object[][]
1.DataProvider提供者和调用者在同一个类
@DataProvider(name="testdp")
public Object[][] createData() {
return new Object[][] {
{ "张三", new Integer(36) },
{ "李四", new Integer(37)},
};
} /**
* @Title: paraFromDP
* @Description: Parameters from DataProvider in one class
* @param name
* @param it
* @return void
* @throws
*/
@Test(dataProvider="testdp")
public void paraFromDP(String name, Integer it) {
System.out.println(name+", "+it);
//张三, 36
//李四, 37
}
2.DataProvider提供者和调用者在不同的类
DataProvider调用类:
package test.testng; import org.testng.annotations.DataProvider;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test; /**
* @author QiaoJiafei
* @version 创建时间:2015年12月11日 上午10:30:35
* 类说明
*/
public class TestParameters {
/**
* @Title: paraFromDPA
* @Description: Parameters from DataProvider in another class
* @param num
* @return void
* @throws
*/
@Test(dataProvider = "create", dataProviderClass = StaticProvider.class)
public void paraFromDPA(Integer num) {
System.out.println(num);
//print 42
} }
DataProvider提供类:
package test.testng; import org.testng.annotations.DataProvider; /**
* @author QiaoJiafei
* @version 创建时间:2015年12月11日 上午11:34:01
* 类说明
*/
public class StaticProvider {
@DataProvider(name = "create")
public static Object[][] createData() {
return new Object[][] {
new Object[] { new Integer(42) }
};
}
}
返回值是Iterator<Object[]>
3.1数据源提供类
package com.data; import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List; import org.apache.poi.hslf.model.Sheet;
import org.testng.annotations.DataProvider; /**
* @author QiaoJiafei
* @version 创建时间:2016年1月20日 上午11:58:26
* 类说明
*/
public class TestD {
@DataProvider(name="testdp")
public static Iterator<Object[]> createData() {
HashSet<Integer> set = new HashSet<Integer>();
set.add(Integer.valueOf(4));
set.add(Integer.valueOf(5)); HashSet<Object[]> so = new HashSet<Object[]>();
for(Integer intg:set){
so.add(new Object[]{intg});
} return so.iterator();
}
}
3.2 测试调用类
package com.data; import org.testng.annotations.Test; /**
* @author QiaoJiafei
* @version 创建时间:2016年1月20日 上午11:58:34
* 类说明
*/
public class TestT {
@Test(dataProvider="testdp",dataProviderClass = TestD.class)
public void login(Integer caseNum) {
System.out.println(caseNum);
}
}
输出:
4
5
三、dataProvider方法可接受 的参数:Method method, ITestContext context,如:
package com.data; import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List; import org.apache.poi.hslf.model.Sheet;
import org.testng.ITestContext;
import org.testng.annotations.DataProvider; /**
* @author QiaoJiafei
* @version 创建时间:2016年1月20日 上午11:58:26
* 类说明
*/
public class TestD {
@DataProvider(name="testdp")
public static Iterator<Object[]> createData(Method method, ITestContext context) {
System.out.println("-----------"+method.getName());
System.out.println("-----------"+context.getName());
HashSet<Integer> set = new HashSet<Integer>();
set.add(Integer.valueOf(4));
set.add(Integer.valueOf(5)); HashSet<Object[]> so = new HashSet<Object[]>();
for(Integer intg:set){
so.add(new Object[]{intg});
} return so.iterator();
}
}
注意:参数可以传其中一个,也可以两个一起传入
四.参数化后,在测试报告的显示如下图:
TestNG之参数化的更多相关文章
- 使用 testng.xml 参数化
1. 创建 Java 测试类 2. 添加测试方法 TestngParameterTest(String name, String age) 3. 为测试方法添加注释 @Parameters({&quo ...
- TestNg 9. 参数化测试-DataProvider参数化
首先利用@DataProvider(name = "XXX")的属性,将name的值XXX 传递给 @Test(dataProvider = "XXX") 看以 ...
- TestNg 8.参数化测试 - xml
有的时候,case需要参数,那么,传餐怎么传? 我的目录结构:首先建一个包叫做parameter,然后在resource里面新建一个parameter.xml文件 看以下代码: ParameterTe ...
- testNG之参数化测试
@Parameters 测试的时候,测试的数据可以放在testng.xml文件中,被测试的方法通过@Parameters注解传递到测试方法中 parameterizedTest.java import ...
- testng XMl 参数化
方法一: 方法二: 方法三: (1)如果测试的数据较多的情况下,很显然这种方式不适合,那么可以通过@DataProvider生成测试数据,通过@Test(dataProvider = "&q ...
- JUnit 4 与 TestNG 对比
原文出处: 付学良的网志 原文出处2: http://www.importnew.com/16270.html -------------------------------------------- ...
- testNG中dataprovider使用的两种方式
testNG的参数化测试有两种方式:xml和dataprovider.个人更喜欢dataprovider,因为我喜欢把测试数据放在数据库里. 一.返回类型是Iterator<Object[]&g ...
- JUnit 4 Vs TestNG比较
JUnit 4和TestNG都是Java中非常受欢迎的单元测试框架.两种框架在功能上看起来非常相似. 哪一个更好? 在Java项目中应该使用哪个单元测试框架? 下面表中概括了JUnit 4和TestN ...
- 关于testNG和JUnit的对比
关于选择JUnit还是选testNG,这几篇文章,建议读一读: API参考文档: Junit API文档:http://junit.org/junit4/javadoc/latest/index.ht ...
随机推荐
- python之import机制
1. 标准 import Python 中所有加载到内存的模块都放在 sys.modules .当 import 一个模块时首先会在这个列表中查找是否已经加载了此模块,如果加载了则只是将 ...
- C++ 面向对象的三个特点--继承与封装(二)
顺着上一篇的内容,我们继续来了解继承的基本知识. 派生类的构造函数和析构函数 派生类继承了基类的成员,但是不能继承基类的构造函数和析构函数,首先,我们了解构造函数和析构函数的执行顺序是当我们创建一个派 ...
- C++调用C#dll类库中的方法(非显性COM)
一般在网上搜C++如何调用C#的函数,出来的结果都是做成COM组件,但是这种方法dll安装麻烦,需要注册COM组件,需要管理员权限,调试麻烦,经常需要重启机器,反正有诸多不便. 然后在看<CLR ...
- vh属性-- 一个永远垂直居中的弹出框
下面的demo,无论浏览器大小如何改变,滚动条是否滚动,弹出框永远水平垂直居中 <html> <head> <title></title> </h ...
- Atitit.为什么小公司也要做高大上开源项目
Atitit.为什么小公司也要做高大上开源项目 1. 为什么手头有很多加急的事情还要做高大上开源项目??1 2. 从长远看,发展 高大上开源项目计划对于解决我们在应急项目正面临着的种种严峻问题也大有裨 ...
- 2015年第7本(英文第6本):纳尼亚传奇I–狮子、女巫、魔衣橱
书名: The Chronicles of Narnia 1 — The Lion, the Witch and the Wardrobe 作者:C.S. Lewis 单词数:4.2万 不重复单词数: ...
- C#中读写JSON风格的配置信息
程序里经常要保存一些设置参数,可以用INI,CONFIG,注册表,XML等等,在stackoverflow中找到这样一篇帖子. http://stackoverflow.com/questions/4 ...
- iOS 视频播放 - YVideoPlayer - UIView
这是一个使用简便的视频播放框架,它基于UIView,它可以是一个小窗口,也可以是一个全屏的窗口 简单的方式加载Video框架: 一行代码加载! 一行代码更新! 下载链接 : https://githu ...
- 真机测试时的错误:No matching provisioning profiles found
1.出现错误的原因是这样的---- 公司开始做项目,原来做真机测试的时候,用的是公司申请的苹果开发者账号.现在项目结束了,准备上线,但客户要求使用客户自己的苹果开发者是账号上线,于是就用客户的账号测试 ...
- Android线程池(一)
本篇文章主要介绍Android自带的线程池的使用. 首先要引入线程池的概念 线程池:是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务. 线程池线程都是后台线程.每个线 ...