testNG参数传递方式
testNG传参数的两种方式(xml文件,@DataProvider)
使用testng.xml设置参数
参数在xml文件中可以在suite级别定义,也可以在test级别定义;testNG会尝试先在包含当前类的test标签中寻找参数,如果没找到则在上层的suite标签中查找。即在test标签中相同的参数对当前类当前方法的优先级比较高。 testNG支持这种传参方式的类型如下:String、 int/Integer、boolean/Boolean、 byte/Byte、 char/Character、 double/Double、 float/Float、 long/Long、 short/Short。对于非上述类型TestNG无法通过这种方式进行传参,可以通过@DataProvider方式传参
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
public class ParameterTest { /** * Following method takes one parameter as input. Value of the * said parameter is defined at suite level. */ @Parameters({ "suite-param" }) @Test public void prameterTestOne(String param) { System.out.println("Test one suite param is: " + param); } /** * Following method takes one parameter as input. Value of the * said parameter is defined at test level. */ @Parameters({ "test-two-param" }) @Test public void prameterTestTwo(String param) { System.out.println("Test two param is: " + param); } /** * Following method takes two parameters as input. Value of the * test parameter is defined at test level. The suite level * parameter is overridden at the test level. */ @Parameters({ "suite-param", "test-three-param" }) @Test public void prameterTestThree(String param, String paramTwo) { System.out.println("Test three suite param is: " + param); System.out.println("Test three param is: " + paramTwo); }} |
xml文件配置:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
<suite name="Parameter test Suite" verbose="1"> <!-- This parameter will be passed to every test in this suite --> <parameter name="suite-param" value="suite level parameter" /> <test name="Parameter Test one"> <classes> <class name="com.howtodoinjava.test.ParameterTest"> <methods> <include name="prameterTestOne" /> </methods> </class> </classes> </test> <test name="Parameter Test two"> <!-- This parameter will be passed this test only --> <parameter name="test-two-param" value="Test two parameter" /> <classes> <class name="com.howtodoinjava.test.ParameterTest"> <methods> <include name="prameterTestTwo" /> </methods> </class> </classes> </test> <test name="Parameter Test three"> <!-- Overriding suite level parameter --> <parameter name="suite-param" value="overiding suite parameter" /> <!-- Test specific parameter --> <parameter name="test-three-param" value="test three parameter" /> <classes> <class name="com.howtodoinjava.test.ParameterTest"> <methods> <include name="prameterTestThree" /> </methods> </class> </classes> </test></suite> |
也可以使用可选参数,如果xml里没有给参数传入值,那么测试方法将会调用可选的参数值:
|
1
2
3
4
5
6
7
8
|
public class ParameterTest{ @Parameters({ "optional-value" }) @Test public void optionTest(@Optional("optional value") String value) { System.out.println("This is: " + value); }} |
对应的xml文件配置:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<suite name="Optional test Suite" verbose="1"> <test name="Optional Test one"> <classes> <class name="test.parameter.OptionalTest" /> </classes> </test> <test name="Optional Test two"> <parameter name="optional-value" value="passed from xml" /> <classes> <class name="test.parameter.OptionalTest" /> </classes> </test></suite> |
这里配置了两个test,第一个执行option方法时,由于没有在xml文件里找到option-value对应的值,所以将会输出方法中的@Optional的值;而第二个test中有设置option-value的值为passed........那么将会输出对应的值。
结果:
This is: optional value
This is: passed from xml
===============================================
Optional test Suite
Total tests run: 2, Failures: 0, Skips: 0
===============================================
DataProvider方式传参
只提供了一个字符串属性:名称,供测试方法作为传递参数的annotation使用两种DataProvider,一种是返回一个二维数组对象(Object[][],第一个数组是数据集,第二个数组代表参数值),如上面的例子;另外一种DataProvider是返回一个Iterator,DataProvider可以向测试方法传递任意类型任意数目的参数,利用DataProvider提供不同的参数集合对一个测试方法进行多次调用。
dataProvider可以进行数据驱动的测试。
在同一个类中使用dataProvider:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
public class SameClassDataProvider{ @DataProvider(name = "data-provider") public Object[][] dataProviderMethod() { return new Object[][] { { "data one" }, { "data two" } }; } @Test(dataProvider = "data-provider") public void testMethod(String data) { System.out.println("Data is: " + data); }} |
结果:
Data is: data oneData is: data twoPASSED: testMethod("data one")PASSED: testMethod("data two")在不同的类中使用:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public class DataProviderClass{ @DataProvider(name = "data-provider") public static Object[][] dataProviderMethod() { return new Object[][] { { "data one" }, { "data two" } }; }}public class TestClass{ @Test(dataProvider = "data-provider", dataProviderClass = DataProviderClass.class) public void testMethod(String data) { System.out.println("Data is: " + data); }} |
结果和上面的一样,只是要注意,在使用数据集的方法中需要添加dataProviderClass的属性,指明是那个类提供数据。
testNG参数传递方式的更多相关文章
- 【整理】--C++三种参数传递方式
在C++中,共有三种参数传递方式: 按值传递(pass by value) 地址传递(pass by pointer) 引用传递(pass by reference) (1)按值传递的过程为:首先计算 ...
- 基于.Net Framework 4.0 Web API开发(2):ASP.NET Web APIs 参数传递方式详解
概述: ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.调用API过程中参数的传递是必须的,本节就来谈谈 ...
- 新手容易混乱的String+和StringBuffer,以及Java的方法参数传递方式。
之前在交流群里和猿友们讨论string+和stringbuffer哪个速度快以及Java的方法参数传递的问题,引起了群里猿友的小讨论.最终LZ得出的结果是string+没有stringbuffer快, ...
- Java 函数参数传递方式详解 分类: Java Game 2014-08-15 06:34 82人阅读 评论(0) 收藏
转:http://zzproc.iteye.com/blog/1328591 在阅读本文之前,根据自己的经验和理解,大家可以先思考并选择一下Java函数的参数传递方式: A. 是按值传递的? B. ...
- Java函数参数传递方式详解
在阅读本文之前,根据自己的经验和理解,大家可以先思考并选择一下Java函数的参数传递方式: A. 是按值传递的? B. 按引用传递的? C. 部分按值部分按引用? 此处暂不宣布正确答案,我们通过一个简 ...
- 产品经理学Python:参数传递方式
这是关于Python的第5篇文章,主要介绍下参数传递方式和如何设计自己的函数. (一) 本篇主要介绍2种参数传递方式. 位置参数 调用函数时,根据函数定义的参数位置来传递参数. def right_t ...
- Python 关于Python函数参数传递方式的一点探索
关于Python函数参数传递方式的一点探索 by:授客 QQ:1033553122 实践代码 #!/usr/bin/env python # -*- coding:utf-8 -*- __author ...
- 学习JS的心路历程-参数传递方式(上)
很多人认为JS的传递方式是值是Call by value, 物件及数组是Call by Reference.甚至还有人宣称其实JS是Call by sharing,那到底是哪一个呢? 这两天我们一一来 ...
- C# 同一应用程序域不同线程之间的参数传递方式
很久没有写博客了,最近的项目不用写代码.今天没事就看看thread之间的参数传递方式,这里主要适用于运行在不同线程的两个方法之间参数传递.直接看代码 1.方法之间直接传递参数 void DemoPar ...
随机推荐
- MySQL 分组
MySQL GROUP BY 语句 GROUP BY 语句根据一个或多个列对结果集进行分组. 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数. GROUP BY 语法 SELECT ...
- 1.项目开发-->Memcached之ASP.NET实现
1.Memcached安装 第一步:下载windows稳定版Memcached 1.2.1 win32,解压后,将memcached.exe文件放到自己想存放的盘符内,例如C:\Windows\Sys ...
- safeseh+dep保护绕过
[文章作者] :h_one [漏洞程序名称]:mplayer.exe [漏洞类型] :缓冲区溢出 [保护方式] :safeseh+dep [操作平台] ...
- Nginx使用webbench进行压力测试(转载)
在运维工作中,压力测试是一项非常重要的工作.比如在一个网站上线之前,能承受多大访问量.在大访问量情况下性能怎样,这些数据指标好坏将会直接影响用户体验. 但是,在压力测试中存在一个共性,那就是压力测试的 ...
- 《JavaScript DOM编程艺术》
第2章JS语法关联数组在为新元素给出下标时,不必局限于整数数字.数组下标可以是字符串逻辑与&&只有两个操作数都是true时结果才为true逻辑或||只有两个操作数都是false时结果才 ...
- maven mirror repository
简单点来说,repository就是个仓库.maven里有两种仓库,本地仓库和远程仓库.远程仓库相当于公共的仓库,大家都能看到.本地仓库是你本地的一个山寨版,只有你看的到,主要起缓存作用.当你向仓库请 ...
- Pytho中两种方式导入模块的差别
1.使用import module,只是把模块导入,访问模块中的函数名或者是属性是必须使用点运算符(.)来访问,否则直接访问会提示找不到这些函数或者属性. 2.使用from numpy import ...
- Selenium获取input输入框中值的三种方法
第一种用jQuery的val方法: js = "return $('input').val();" driver.execute_script(js) 第二种用jQuery的att ...
- 服务接口API限流 Rate Limit 续
一.前言 上一篇文章中粗浅的介绍使用Redis和基于令牌桶算法进行对服务接口API限流,本文介绍另一种算法---漏桶算法的应用.Nginx想必大家都有所了解是一个高性能的 HTTP 和反向代理服务器, ...
- HDU3341 Lost's revenge(AC自动机&&dp)
一看到ACGT就会想起AC自动机上的dp,这种奇怪的联想可能是源于某道叫DNA什么的题的. 题意,给你很多个长度不大于10的小串,小串最多有50个,然后有一个长度<40的串,然后让你将这个这个长 ...