TestNG参数– DataProvider和XML

时间:2020-02-23 14:41:57  来源:igfitidea点击:

TestNG方法也可以有参数。
我们可以通过两种方式注入方法参数:

  • 使用@ DataProvider注释–我已经在TestNG DataProvider教程中对此进行了解释。

  • 使用@ Parameters注释–该注释使我们能够从TestNG XML套件文件中注入参数。
    在本教程中,我们将专注于此批注并学习如何使用它。

TestNG参数注释

关于@Parameters批注的一些重要点是:

  • TestNG @Parameters批注可以应用于@ Before,@ After和@Test方法。

  • 如果我们想继续更改测试方法的输入,这是首选方法,因为我们不需要再次编译测试类。

  • @Parameters批注要求我们提供要在测试套件xml文件中查找的参数名称的字符串数组。
    参数的数量应与方法中的参数的数量匹配。

  • 当测试套件xml文件中缺少参数时,我们可以将@Optional与方法参数一起使用以提供默认值。

可以在套件级别或者测试级别定义TestNG套件XML文件中的参数。
如果存在具有相同名称的参数,则测试参数具有优先权并覆盖该值。

TestNG参数示例

现在我们已经完成了理论部分,我们来看一个完整的TestNG测试类示例,其中我们将使用@Parameters批注。

package com.theitroad.parameters;

import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Optional;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class TestParameters {

	@Test
	@Parameters("arguments")
	public void singleParameterTest(String s) {
		System.out.println("Testing for input parameter = " + s);
	}

	@Test
	@Parameters({ "id", "name" })
	public void multipleParameterTest(int id, String s) {
		System.out.println("Testing for multiple input parameter = " + id + " and " + s);
	}

	@BeforeSuite
	@Parameters("before_suite")
	public void beforeSuite(String s) {
		System.out.println("Before Suite Parameter = " + s);
	}

	@AfterSuite
	@Parameters("after_suite")
	public void afterSuite(@Optional("Default Parameter") String s) {
		System.out.println("After Suite Parameter = " + s);

	}

}

这是测试套件的xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Default suite" guice-stage="DEVELOPMENT">
	<parameter name="before_suite" value="My Before Suite Parameter"></parameter>
	<parameter name="id" value="100"></parameter> <!-- Suite Level Parameters -->
	<test thread-count="5" name="Default test" verbose="2">
		<parameter name="arguments" value="hyman"></parameter>
		<parameter name="name" value="theitroad"></parameter> <!-- Test Level Parameters -->
		<classes>
			<class name="com.theitroad.parameters.TestParameters" 
		</classes>
	</test>
</suite>

TestNG参数XML Suite测试

如果使用的是Eclipse TestNG插件,则可以直接运行测试套件XML文件,如下图所示。

我们将在eclipse控制台中获得以下输出。

[RemoteTestNG] detected TestNG version 6.14.3
Before Suite Parameter = My Before Suite Parameter
Testing for multiple input parameter = 100 and theitroad
Testing for input parameter = hyman
PASSED: multipleParameterTest(100, "theitroad")
PASSED: singleParameterTest("hyman")

===============================================
  Default test
  Tests run: 2, Failures: 0, Skips: 0
===============================================

After Suite Parameter = Default Parameter

===============================================
Default suite
Total tests run: 2, Failures: 0, Skips: 0
===============================================

我们还可以通过org.testng.TestNG类从命令行运行测试套件XML文件。
您所有的测试类和TestNG jar都应该在类路径中。

$java -cp .:../../lib/testng-6.14.3.jar:../../lib/jcommander-1.72.jar:../../lib/bsh-2.0b6.jar org.testng.TestNG test_parameters.xml