我用 Java 编写了一个 TestNG Suite,它将使用测试帐户在另一个系统上运行。该帐户的凭据存储在密码库中,并通过 API 获取。每个测试都需要此登录信息,并且每个测试类都会调用密码库 API。我将此作为每个测试类的设置方法中的一个步骤。
如果可能的话,我想将其减少到仅一次 API 调用。是否可以在套件开始时获取凭据并将其传递给每个测试类?
我将此视为一个潜在的解决方案:如何在特定测试中在运行时添加参数
我不想以这种方式修改 XML,因为我发现这会在 TestNG 的结果报告中公开登录信息。
这就是你如何去做的。
org.testng.ISuiteListener
onStart()
方法中,包含从保管库检索凭证的逻辑,然后将它们设置为 ISuite
对象上的属性(您可以将其作为 onStart()
方法的参数获取) suite.setAttribute("username", 'foo');
suite.setAttribute("password", "foopassword");
org.testng.ITestResult itr = org.testng.Reporter.getCurrentTestResult();
org.testng.ISuite currentSuite = itr.getTestContext().getSuite();
String username = Optional.ofNullable(currentSuite.getAttribute("username"))
.map(Object::toString)
.orElseThrow(() -> new IllegalArgumentException("Could not find a valid user name"));
String password = Optional.ofNullable(currentSuite.getAttribute("password"))
.map(Object::toString)
.orElseThrow(() -> new IllegalArgumentException("Could not find a valid password"));