文章目录
- 1 项目结构
- 2 核心代码
- 3 自动生成xml文件
- 4 执行结果
之前的文章有介绍过使用
Junit进行参数化测试,参数化测试就是一次性执行多个测试用例。本文介绍使用TestNG进行参数化测试。相比Junit,TestNG参数化测试所需要写的代码更加简洁方便。
1 项目结构
2 核心代码
这里主要给出PeopleTestParameterized.java文件,其余文件在上面的文章里有。
package com.example.testng;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.AfterTest;
//表示使用参数化测试的方法
//@RunWith(Parameterized.class)
public class PeopleTestParameterized {
private People param;
private double result;
@BeforeTest
public void setUp() {
//People people = new People();
}
@AfterTest
public void tearDown() {
}
@DataProvider(name = "test1")
public static Object[][] prices(){
Cap cap = new Cap(1999,0.1,0);
Jacket jacket = new Jacket(2999,0.2,1);
Trousers trousers = new Trousers(7999,0.1,1);
People p_1 = new People(cap,jacket,trousers);
double re_1 = PeopleTest.cal(cap, jacket, trousers);
cap = new Cap(19999,0.1,0);
jacket = new Jacket(29999,0.2,1);
trousers = new Trousers(79999,0.1,1);
People p_2 = new People(cap,jacket,trousers);
double re_2 = PeopleTest.cal(cap, jacket, trousers);
cap = new Cap(199,0.1,0);
jacket = new Jacket(9999,0.2,1);
trousers = new Trousers(799,0.1,1);
People p_3 = new People(cap,jacket,trousers);
double re_3 = PeopleTest.cal(cap, jacket, trousers);
cap = new Cap(2199,0.1,0);
jacket = new Jacket(49999,0.2,1);
trousers = new Trousers(6799,0.1,1);
People p_4 = new People(cap,jacket,trousers);
double re_4 = PeopleTest.cal(cap, jacket, trousers);
cap = new Cap(199,0.1,0);
jacket = new Jacket(9999,0.2,1);
trousers = new Trousers(799,0.1,1);
People p_5 = new People(cap,jacket,trousers);
double re_5 = PeopleTest.cal(cap, jacket, trousers)+1;
Object[][] re = new Object[][]{{p_1,re_1},
{p_2,re_2},
{p_3,re_3},
{p_4,re_4},
{p_5,re_5}};
return re;
}
@Test(dataProvider = "test1")
public void testprices(People p, double result) {
System.out.println(p.getAllprice()+" "+result);
Assert.assertEquals(p.getAllprice(), result);
}
}
JUnit的参数化测试需要@RunWith(Parameterized.class)声明好,创建所有测试用例,为测试用例创建好容器,写好构造函数负责将测试用例依次放入测试用例,最后执行测试代码。
相比JUnit,TestNG要更为简单,创建测试用例,编写测试代码。(其实到这里可以直接执行测试了),如果还要使用xml文件进行测试,那么可以生成一个testng.xml文件进行测试。具体生成方法如下。
点击那个Convert to TestNG
ok了。
再运行就好了。
3 自动生成xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test thread-count="5" name="Test">
<classes>
<class name="com.example.testng.PeopleTestParameterized"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
4 执行结果
五个测试用例中故意写错一个,因此是通过四个,错误一个。