gpt4 book ai didi

testing - 有没有办法完全根据条件忽略测试(如果测试中不存在参数)

转载 作者:行者123 更新时间:2023-11-28 20:11:05 25 4
gpt4 key购买 nike

下面是我的 TestNG 套件 xml 文件。

<test name="m_AggregatorTx">
<parameter name="logFile" value="hadoopmslogs/${Domain_Name}/${NODENAME}/Hive_961/m_AggregatorTx.log"/>
<classes>
<class name="executems.main.RunMS"></class>
</classes>
</test>

<test name="m_alldt">
<parameter name="logFile" value="hadoopmslogs/${Domain_Name}/${NODENAME}/Hive_961/m_alldt.log"/>
<parameter name="enableUT" value="true"/>
<classes>
<class name="executems.main.RunMS"></class>
</classes>
</test>

<test name="m_alldt_cpx">
<parameter name="logFile" value="hadoopmslogs/${Domain_Name}/${NODENAME}/Hive_961/m_alldt_cpx.log"/>
<classes>
<class name="executems.main.RunMS"></class>
</classes>
</test>


<test name="m_alldt_custom_query_prop">
<parameter name="logFile" value="hadoopmslogs/${Domain_Name}/${NODENAME}/Hive_961/m_alldt_custom_query_prop.log"/>
<parameter name="enableUT" value="true"/>
<classes>
<class name="executems.main.RunMS"></class>
</classes>
</test>

在运行时,我想忽略其中没有 enableUT 参数的测试。例如,在上述套件文件中,m_AggregatorTx 和 m_alldt_cpx 中没有 enableUT 参数。

注意:1. 我不想将 enabled=true/false 添加到我的套件 xml 中。 (因为我有 30 个不同的套件文件,每个套件文件有 100 个测试用例)2. 目前在运行时,我可以使用 throw new SkipException 跳过这些测试。但是一旦运行完成,结果如下:

============================================= hive _961

总测试运行:4,失败:0,跳过:2

  1. 我不希望这两个案例出现在结果的“跳过”部分中。我希望在运行时忽略这些情况。我想要这样的结果:

============================================= hive _961

总测试运行:2,失败:0,跳过:0

if(enableBugB.equals("true"))
{
System.out.println("enableBugB is set to true in this Test Case");
boolean result = Services.runMapping(applicationName, mappingName, database, runID);
if(runID != null && !runID.isEmpty())
{

VerifyMapping.compareResults(verifyXml, runID, logPath,result);
}
else
{

VerifyMapping.compareResults(verifyXml, mappingName, logPath,result);
}
}
else
{
//System.out.println("enableBugB is not present for this Test. Hence skipping this Test Case..");
throw new SkipException("enableBugB is not enabled. Skipping this Test Case..");

}

感谢任何帮助。谢谢。

最佳答案

是的,这是可能的。
您将需要访问测试上下文。

基本上在testng.xml中:

<suite name="Parameter Checker">
<listeners>
<listener class-name="listeners.ParametrizedMethodInterceptor" />
</listeners>

<test name="Without Parameter">
<classes>
<class name="TestClass" />
</classes>
</test>

<test name="With Parameter">
<parameter name="Name of the Parameter" value="Value of the Parameter" />
<classes>
<class name="TestClass" />
</classes>
</test>
</suite>

然后任何可以捕获此参数值并在测试前运行的监听器。我尝试使用带有反射的 IAnnotationTransformer 来完成它,但是如果没有方法实例化并且没有测试上下文,则无法访问参数值。

然而,有了 IMethodInterceptor,这很简单:

public class ParametrizedMethodInterceptor implements IMethodInterceptor {

@Override
public List<IMethodInstance> intercept(List<IMethodInstance> list,
ITestContext iTestContext) {
String parameterValue = iTestContext
.getCurrentXmlTest()
.getParameter("Name of the Parameter");
return (parameterValue != null)? list : new LinkedList<>();
}
}

那些被截获的方法没有依赖项,也不依赖于任何其他测试方法。

测试类:

public class TestClass {

@Test
@Parameters("Name of the Parameter")
public void testMethod(@Optional("unset") String parameter) {
System.out.print("In testMethod. ");
System.out.println("Parameter: " + parameter + ".");
}
}

输出:

In testMethod. Parameter: Value of the Parameter.

Test ignored.

对于报告生成尝试使用两个监听器:

<listeners>
<listener class-name="listeners.ParametrizedMethodInterceptor" />
<listener class-name="listeners.ParametrizedReportListener" />
</listeners>

并跳过不带参数的测试结果处理:

public class ParametrizedReportListener implements IReporter {

@Override
public void generateReport(List<XmlSuite> xmlSuites,
List<ISuite> suites,
String outputDirectory) {
for(ISuite suite : suites) {
suite.getResults().values().stream()
.filter(result -> result
.getTestContext()
.getCurrentXmlTest()
.getParameter("Name of the Parameter") != null)
.forEach(result -> {
System.out.println("Parameter found!");
System.out.println("Output formatting here.");
});
}
}
}

关于testing - 有没有办法完全根据条件忽略测试(如果测试中不存在参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43156994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com