echartInstance.dispatchAction({
type: 'dataZoom',
start: 90,
end: 100
});
1)在上面的代码片段中,如果我的测试类型是健全的,我想调用Sanity.java文件,就好像其他测试类型是回归一样,我想调用Regression.java
2)我们可以将参数值作为输入传递给testng.xml中的其他XML标签 示例:如果 那么我希望这个值基于参数值
进行动态变换3)另外从这个参数输入如何调用并行浏览器测试?
答案 0 :(得分:0)
1)在上面的代码片段中,如果我的测试类型是健全的,我想调用Sanity.java文件,就好像其他测试类型是回归一样,我想调用Regression.java
TestNG为您提供了一个名为 groups 的概念,可以为您解决此问题。对于每个@Test
方法,请为其添加groups
属性,然后在套件xml文件中,您可以选择要运行的组。有关详细信息,请参阅官方文档here。
2)我们可以将参数值作为输入传递给testng.xml中的其他XML标签示例:如果那时我想根据参数值对该值进行dyanamically
在此之后不确定您的身份,但testng套件xml文件中的参数本质上始终是静态的。它们不能被更改,除非你改变套件xml文件(或),你使用了一个TestNG监听器,例如org.testng.IAlterSuiteListener
,其中你基于其他东西捏造参数。这是一个展示我正在谈论的内容的样本
需要注入参数的测试类
package com.rationaleemotions.stackoverflow.qn46216357;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class SampleTestClass {
@Test
@Parameters("name")
public void testMethod(String name) {
System.err.println("Hello " + name);
}
}
此侦听器查找以jvm_
开头的JVM参数,其名称与xml套件中的参数匹配,如果找到,则使用JVM参数中发送的内容更新参数值。因此,使用这种方式,您可以真正实现您的目标。
package com.rationaleemotions.stackoverflow.qn46216357;
import org.testng.IAlterSuiteListener;
import org.testng.xml.XmlSuite;
import java.util.List;
import java.util.Map;
public class ParameterChangerListener implements IAlterSuiteListener {
@Override
public void alter(List<XmlSuite> suites) {
XmlSuite suite = suites.get(0);
for (Map.Entry<String, String> each : suite.getParameters().entrySet()) {
//Check to see if we were given any JVM arguments with the prefix as "jvm_" followed
//by the text of the parameter name.
String sysValue = System.getProperty("jvm_" + each.getKey());
if (sysValue != null && !sysValue.trim().isEmpty()) {
each.setValue(sysValue);
}
}
}
}
以下是xml套件的外观
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="46216357_Suite" verbose="2">
<listeners>
<listener class-name="com.rationaleemotions.stackoverflow.qn46216357.ParameterChangerListener"/>
</listeners>
<parameter name="name" value="Unknown"/>
<test name="46216357_test">
<classes>
<class name="com.rationaleemotions.stackoverflow.qn46216357.SampleTestClass"/>
</classes>
</test>
</suite>
如您所见,我为参数名称
定义了未知的值因此,如果您只是右键单击套件xml并从您喜欢的IDE运行它,输出将如下所示:
...
... TestNG 6.12 by Cédric Beust (cedric@beust.com)
...
Hello Unknown
PASSED: testMethod("Unknown")
===============================================
46216357_test
Tests run: 1, Failures: 0, Skips: 0
===============================================
===============================================
46216357_Suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================
但是如果你运行相同的套件,通过传入JVM参数-Djvm_name
,那么输出将是不同的。这是一个运行输出,其中我传递的值为 Rambo :-Djvm_name=Rambo
...
... TestNG 6.12 by Cédric Beust (cedric@beust.com)
...
Hello Rambo
PASSED: testMethod("Rambo")
===============================================
46216357_test
Tests run: 1, Failures: 0, Skips: 0
===============================================
===============================================
46216357_Suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================
3)另外从这个参数输入如何调用并行浏览器测试?
我会稍微改变这一点,而是建议您将并行模式作为JVM参数读取,并根据该更改并行执行策略。
您基本上采用了与我上面分享的相同类型的IAlterSuiteListener
实现,它可能如下所示:
import org.testng.IAlterSuiteListener;
import org.testng.xml.XmlSuite;
import java.util.List;
public class ParallelExecutorSetter implements IAlterSuiteListener {
@Override
public void alter(List<XmlSuite> suites) {
XmlSuite suite = suites.get(0);
String parallelMode = System.getProperty("parallelMode");
XmlSuite.ParallelMode mode = XmlSuite.ParallelMode.getValidParallel(parallelMode);
if (mode != null) {
suite.setParallel(mode);
}
}
}
因此,您现在可以通过JVM参数传递并行模式。例如,-DparallelMode=methods
可以在@Test
parallel
方法