在运行时为 TestNG Suite 设置全局变量?

问题描述 投票:0回答:1

我用 Java 编写了一个 TestNG Suite,它将使用测试帐户在另一个系统上运行。该帐户的凭据存储在密码库中,并通过 API 获取。每个测试都需要此登录信息,并且每个测试类都会调用密码库 API。我将此作为每个测试类的设置方法中的一个步骤。

如果可能的话,我想将其减少到仅一次 API 调用。是否可以在套件开始时获取凭据并将其传递给每个测试类?

我将此视为一个潜在的解决方案:如何在特定测试中在运行时添加参数

我不想以这种方式修改 XML,因为我发现这会在 TestNG 的结果报告中公开登录信息。

java selenium-webdriver testng
1个回答
0
投票

这就是你如何去做的。

  • 通过实现 TestNG 接口构建 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"));
  • 您现在可以使用套件 xml 文件中的
    <listeners>
    标签包含对此套件的引用 [有关详细信息,请参阅此处](或)
  • 您可以将此侦听器设置为强制侦听器,通过将其连接为服务加载器加载的侦听器,它始终会自动调用,而无需显式引用它[有关详细信息,请参阅here]
© www.soinside.com 2019 - 2024. All rights reserved.