参数化有两种方法:

第一种:在xml文件中声明

第二种:用@DataProvider注解

先介绍第一种方法:

ParameterTest类:用@Parameters({"name","age"}) 注解声明参数

package com.janson.parameter;

import org.testng.annotations.Parameters;
import org.testng.annotations.Test; public class ParameterTest {
@Test
@Parameters({"name","age"})
public void paramTest(String name,int age) {
System.out.println("name:"+ name);
System.out.println("age:"+age);
}
}

在resources文件夹下新建parameter.xml文件:

注:<parameter>标签中的name需要与上面类中的@Parameters({"name","age"}) 一致

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="parameter">
<test name="parameterTest">
<parameter name="name" value="janson"/>
<parameter name="age" value="22"/>
<classes>
<class name="com.ucar.parameter.ParameterTest"/>
</classes>
</test>
</suite>

执行结果如下:

name:janson
age:22

第二种方法:

package com.janson.parameter;

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test; import java.lang.reflect.Method; public class DataProviderTest { //演示两个参数
@Test(dataProvider = "twoParam")
public void dataProviderTest(String name,int age) {
System.out.println("name = "+name+";age = "+age);
} @DataProvider(name = "twoParam")
public Object[] provideData() {
Object[][] o = new Object[][] {
{"zhangsan",10},
{"lisi",11},
{"wangwu",12},
{"zhaoliu",13}
};
return o;
} //演示一个参数
@Test(dataProvider = "OneParam")
public void onlyOneDataProvider(int money) {
System.out.println("my Money is:"+ money+"万");
} @DataProvider(name="OneParam")
public Object[] oneProvideData() {
Object[] o = new Object[]{
100,200,1000,2000
};
return o;
} //演示多个参数
@Test(dataProvider = "manyParam")
public void manyDataProvider(String name,int age,String nation,int height) {
System.out.println("name:"+name+",age:"+age+",nation:"+nation+",height:"+height);
} @DataProvider(name = "manyParam")
public Object[][] manyProvideData() {
Object[][] o = new Object[][] {
{"A",20,"中国",180},
{"B",21,"USA",150},
{"C",22,"AUS",160},
{"D",23,"CAN",170}
};
return o;
} //演示根据不同方法传不同的参数
@Test(dataProvider = "methodData")
public void test1(String name,int age) {
System.out.println("test1方法: name="+name+",age="+age);
} @Test(dataProvider = "methodData")
public void test2(String name,int age) {
System.out.println("test2方法: name="+name+",age="+age);
} @DataProvider(name = "methodData")
public Object[][] provideMethodData(Method method) {
Object[][] result = null;
if(method.getName().equals("test1")) {
result = new Object[][] {
{"ZhangSan",30},
{"LiSi",31}
};
}else if(method.getName().equals("test2")) {
result = new Object[][] {
{"WangWu",40},
{"ZhaoLiu",41}
};
}
return result;
}
}

执行结果如下:

---两个参数---
name = zhangsan;age = 10
name = lisi;age = 11
name = wangwu;age = 12
name = zhaoliu;age = 13 ---多个参数---
name:A,age:20,nation:中国,height:180
name:B,age:21,nation:USA,height:150
name:C,age:22,nation:AUS,height:160
name:D,age:23,nation:CAN,height:170 ---一个参数---
my Money is:100万
my Money is:200万
my Money is:1000万
my Money is:2000万 ---根据不同方法传入不同参数---
test1方法: name=ZhangSan,age=30
test1方法: name=LiSi,age=31
test2方法: name=WangWu,age=40
test2方法: name=ZhaoLiu,age=41

补充:如果被引用数据源在另一个测试类中定义的,还需要指明其所在测试类,示例如下:

 @Test(dataProvider = "create", dataProviderClass = StaticProvider.class)

  public void test(Integer n) {

    // ...

  }

TestNG参数化测试的更多相关文章

  1. testng入门教程10 TestNG参数化测试

    在TestNG的另一个有趣的功能是参数测试.在大多数情况下,你会遇到这样一个场景,业务逻辑需要一个巨大的不同数量的测试.参数测试,允许开发人员运行同样的测试,一遍又一遍使用不同的值. TestNG让你 ...

  2. TestNG参数化测试Spring应用Dubbo接口

    一.配置dubbo的Bean文件: 配置spring-dubbo.xml文件: <dubbo:reference interface="com.datatrees.basisdata. ...

  3. TestNG参数化测试【转】

    原文:http://www.yiibai.com/testng/20130916303.html 在TestNG的另一个有趣的功能是参数测试.在大多数情况下,你会遇到这样一个场景,业务逻辑需要一个巨大 ...

  4. TestNG参数化测试-数据提供程序 @DataProvider方式

    在 testng.xml 中指定参数可能会有如下的不足: 1.如果你压根不用 testng.xml. 2.你需要传递复杂的参数,或者从Java中创建参数(复杂对象,对象从属性文件或者数据库中读取的et ...

  5. TestNG+Jenkins+Maven参数化测试dubbo接口

    1.TestNG参数化测试用例: package com.tree.autotest.testcase.IUserBankSummaryService; import com.datatrees.fi ...

  6. Junit4参数化测试实现程序与用例数据分离

    http://touchfu.iteye.com/blog/732930 现状:你是不是还在为自己的TestCase代码杂乱无章而苦恼,咎其根本还在于针对不同的用例,输入参数和mock信息的组装全部作 ...

  7. TestNG 搭建测试框架 自动化测试

    框架层级及基本组件:    参考:https://www.cnblogs.com/jier888/p/8998724.html Java作为开发语言 Maven管理项目及Jar包 Testng作为测试 ...

  8. TestNG 参数化应用

    一.第一种参数化方式(testng.xml配置参数) 1.新建ParameterDemo04类 2.拷贝类的路径 3.testng.xml配置类地址及参数 <?xml version=" ...

  9. Google C++单元测试框架GoogleTest---值参数化测试

    值参数化测试允许您使用不同的参数测试代码,而无需编写同一测试的多个副本. 假设您为代码编写测试,然后意识到您的代码受到布尔参数的影响. TEST(MyCodeTest, TestFoo) { // A ...

随机推荐

  1. java操作linux,调用shell命令

    import org.junit.jupiter.api.Test; import java.io.BufferedReader; import java.io.IOException; import ...

  2. 167. Two Sum II - Input array is sorted (二分ortwo-pointer)

    Given an array of integers that is already sorted in ascending order, find two numbers such that the ...

  3. Java序列化系列教程(下)

    一引言 将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口 ...

  4. end()与andSelf()

    end() 回到最近的一个"破坏性"操作之前.即,将匹配的元素列表变为前一次的状态. 如 果之前没有破坏性操作,则返回一个空集.所谓的"破坏性"就是指任何改变所 ...

  5. python使用ddt模块对用例执行操作

    import time import unittest import ddt from selenium import webdriver TEST_URL = "http://www.ba ...

  6. 使用printf和String.format格式化输出

    格式化输出 在哪些情况下使用格式化输出: 异常打印到日志中使用格式化输出有利于排查错误原因: printf格式化 示例: public class PrintfTest { public static ...

  7. js获取标签的三种方式

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. UVa 101 - The Blocks Problem STL

    题目:给你n个方块,有四种操作: .move a onto b,把a和b上面的方块都放回原来位置,然后把a放到b上面: .move a over b,把a上面的放回原处,然后把a放在b所在的方块堆的上 ...

  9. ACM_走楼梯Ⅱ

    走楼梯Ⅱ Time Limit: 2000/1000ms (Java/Others) Problem Description: 有一楼梯共N+1级,刚开始时你在第一级,若每次能走M级(1<=M& ...

  10. 全面学习ORACLE Scheduler特性(11)使用Job Classes

    六.使用Job Classes Job Classes 相当于创建了一个job组,DBA可以将那些具有相同特性的job,统统放到相同的Job Classes中,然后通过对Job Class应用ORAC ...