如何在TestNG中的测试之间共享变量?

时间:2019-01-17 13:53:54

标签: automated-tests testng rest-assured

我有一个测试登录类,该类对登录有正面和负面的测试。肯定案例的结果-在响应中接收令牌。

此外,我还有另一个Functionality类,该类对某些功能进行了测试,可供登录用户使用。

如何从积极的登录测试到功能测试获得令牌?

我只找到一种解决方案:

  • 在Login类中创建静态变量令牌
  • 经过积极的登录测试后,令牌变量应为响应中的
  • 在所有功能测试中应添加对登录肯定测试的依赖

但是,将依赖项添加到所有功能测试似乎不是一个好主意。 还有其他选择吗?

3 个答案:

答案 0 :(得分:1)

可能的解决方案可能是将登录功能移到单独的位置,然后在 登录 功能 测试中重新使用。例如,您可以在注释之前使用TestNG在 功能 测试之前提取令牌。

class RequestHelper {

  public static io.restassured.Response login(String username, String password) {
    Response response;
    //some code to get login response
    return response;
  }
}

class LoginTest {

 @Test
 public void shouldLogin() {
   Response loginResponse = RequestHelper.login("username", "password");
   //assertions that response is valid
 }
}

class FunctionalTest {

  private String token;

  @BeforeClass
  public void getToken(){
     Response response = RequestHelper.login("username", "password");
     //Extracting token from response here (depends on how token is returned)
     token = response.then().extract().jsonPath().getString("token");
  }

  @Test
  public void functionalTest(){
    //Use token here
  }
}

也进行 功能 测试取决于成功的 登录 测试是否成功也是一个好主意。这样,如果肯定的 登录 测试失败 功能 测试将不会执行。

答案 1 :(得分:0)

我们可以使用TestNG的ITestContext

例如:

在测试课中,

    ctx.setAttribute("TOKEN", token);

在另一个班级进行相同的测试,

    String token = ctx.getAttribute("TOKEN");

看看这个例子。

http://www.testautomationguru.com/selenium-webdriverreusable-tests-testng/

答案 2 :(得分:0)

您可以在运行程序xml文件中传递参数。 和 您可以使用属性外部文件来保存值。