我正在自动化在多线程环境中运行的网页,因此我将每个测试结果导出到文件系统中,并且我希望将每个测试结果保持唯一以供将来参考。那么有没有办法在从TestNG类调用它时动态地将文件名作为参数传递给测试方法。
我知道我们可以从 .xml 文件中传递参数但是如果我这样做,那么值将更像静态,并且可以被并行运行的所有线程看到。
测试类将从主方法调用,如下所示
public class Test {
public static void main(String[] args) throws ParseException {
try
{
TestNG testng = new TestNG();
testng.setTestClasses(new Class[] { Testing.class });
testng.run();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
Bellow代码是我的测试方法
公共课测试{
@Test
@Parameters("filename")
public void testMethod(String fileName){
System.out.println("filename is: "+fileName);
// ---- remaining test logic -----
}
}
或者我们可以使用 TestListenerAdapter onStart()方法来注入参数值......?。
答案 0 :(得分:1)
如果您想要唯一的文件名,可以添加时间戳
Date date = new Date();
Format formatter = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
String timeStamp = formatter.format(date);
String fileName = "TestResults-" + timeStamp;
答案 1 :(得分:1)
您可以将值存储到ITestContext
,以便所有测试都可用。
您可以在配置方法(例如@BeforeSuite
)或监听器中设置值。
答案 2 :(得分:0)
在运行时将动态参数传递给TestNG套件
以下代码的作用: 我想在运行时为每个测试添加参数列表。这些参数作为maven运行时参数传递。使用System.getProperty()方法读取它们,如下所示。然后将这些参数添加到套件内部的测试中,并成功运行testng。这在其他情况下也非常有用。
下面的代码读取testng.xml文件并将参数添加到
List<String> parameters = new ArrayList<>();
parameters = Arrays.asList(System.getProperty("parameters").split(",");
TestNG tng = new TestNG();
File initialFile = new File("testng.xml");
InputStream inputStream = FileUtils.openInputStream(initialFile);
Parser p = new Parser(inputStream);
List<XmlSuite> suites = p.parseToList();
for(XmlSuite suite:suites){
List<XmlTest> tests = suite.getTests();
for (XmlTest test : tests) {
for (int i = 0; i < parameters.size(); i++) {
HashMap<String, String> parametersMap = new HashMap<>();
parametersMap.put("parameter",parameters.get(i));
test.setParameters(parametersMap);
}
}
}
tng.setXmlSuites(suites);
tng.run();