TestNG @Parameters – 测试参数示例

TestNG @Parameters – 测试参数示例

原文: https://howtodoinjava.com/testng/testng-parameters/

TestNG 的重要功能之一是参数化。 此功能允许用户将参数作为参数传递给测试。 通过使用 testng @Parameters注解支持此功能。

我们可以通过两种方式为 testng 测试提供参数值。

  1. 通过testng.xml XML 配置文件
  2. 通过DataProviders

@Parameters注解可用于任何@Before@After@Factory@Test注解方法。 它可以用于初始化变量并将其用于类,测试中,也可以用于整个测试执行。

1. TestNG @Parameters – 使用testng.xml测试参数

如果需要在运行时将一些简单的值(例如String类型)传递给测试方法,则可以使用这种通过 testng XML 配置文件发送参数值的方法。 您必须使用@Parameters注解将参数值传递给测试方法。

@Parameters({ "param-name" })

让我们编写一个简单的示例,通过 XML 配置文件将参数传递给测试方法。

1.1 测试

在下面的测试中,我们创建了一个包含多个方法的测试类,这些方法接受来自 testng 的参数。 在 testng XML 文件中的套件级别和测试级别都设置了参数值。

如果在套件级别定义,则在测试级别定义的任何参数值都将覆盖具有相同名称的参数值。 您可以在测试方法prameterTestThree()的测试三中看到这一点。

package com.howtodoinjava.test;

import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

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);
	}
}

1.2 testng.xml

现在将testng.xml文件添加到项目根目录,并将以下代码放入其中。 在这里,我们定义要传递的参数值。

<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>

1.3 演示

现在使用testng.xml运行以上测试。 以上测试运行的输出如下:

[TestNG] Running: C:\somepath\testng.xml

Test one suite param is: suite level parameter

Test two param is: Test two parameter

Test three suite param is: overiding suite parameter
Test three param is: test three parameter

===============================================
Parameter test Suite
Total tests run: 3, Failures: 0, Skips: 0
===============================================

从测试结果中可以看出,只有timeTestTwo()被执行,因为它的执行时间少于testng.xml文件中定义的超时时间。 timeTestOne()执行被取消,因为完成所需的时间超过配置的超时时间。

2. TestNG @Parameters – 可选参数

TestNG 还提供了提供可选参数的选项,如果在定义的文件中找不到参数值,则将使用此值。

2.1 使用@Optional注解进行测试

要传递可选参数,请使用@Optional注解。

package com.howtodoinjava.test;

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

public class ParameterTest 
{
	@Parameters({ "optional-value" })
	@Test
	public void optionTest(@Optional("optional value") String value) {
		System.out.println("This is: " + value);
	}
}

前面的类文件包含一个将一个参数作为输入的测试方法。 所述执行中的测试方法打印使用System.out.println方法传递到控制台的参数值。

使用 XML 文件中名为optional-value的参数将参数值传递到测试方法。 使用针对所述参数的@Optional注解定义所述参数的可选值。

2.2 使用@Optional注解进行测试

在此testng.xml文件中,上面定义了两个测试。 在第一个测试中未定义任何参数,第二个测试在其中声明了一个名为“optional-value”的参数。

<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>

2.3 演示

将以上代码作为测试套件运行的输出为:

[TestNG] Running: C:\somepath\testng.xml

This is: optional value
This is: passed from xml

===============================================
Optional test Suite
Total tests run: 2, Failures: 0, Skips: 0
===============================================

从先前的测试结果可以看出,TestNG 在第一次执行测试时就将可选值传递给了测试方法。 发生这种情况是因为 TestNG 在第一次测试中无法在 XML 文件中找到名为optional-value的参数。

在第二次测试期间,它在 XML 中找到了参数值,并将该值传递给执行过程中的测试方法。

学习愉快!