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

Automated tests 如何在TestNG中的测试之间共享变量?,automated-tests,testng,rest-assured,Automated Tests,Testng,Rest Assured,我有一个测试登录类,它对登录有正面和负面的测试。响应中的肯定案例-接收令牌的结果 另外,我还有另一个功能类,它对一些功能进行了测试,可供登录用户使用 如何从肯定登录测试到功能测试获取令牌 我只找到了一个解决方案: 在登录类中创建静态变量标记 在肯定的登录测试之后,令牌变量应该是response的init 在所有功能测试中,应添加对登录肯定测试的依赖性 但似乎向所有功能测试添加依赖项不是一个好主意。 还有其他选择吗?可能的解决方案是将登录功能移动到一个单独的位置,并在登录和功能测试中重用它。例

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

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

如何从肯定登录测试到功能测试获取令牌

我只找到了一个解决方案:

  • 在登录类中创建静态变量标记
  • 在肯定的登录测试之后,令牌变量应该是response的init
  • 在所有功能测试中,应添加对登录肯定测试的依赖性
但似乎向所有功能测试添加依赖项不是一个好主意。
还有其他选择吗?

可能的解决方案是将登录功能移动到一个单独的位置,并在登录功能测试中重用它。例如,您可以在功能测试之前使用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
  }
}

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

可能的解决方案是将登录功能移动到单独的位置,并在登录测试和功能测试中重复使用。例如,您可以在功能测试之前使用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
  }
}

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

我们可以使用TestNG的
ITestContext

例如:

在测试课上

    ctx.setAttribute("TOKEN", token);
在另一个班级进行同样的测试

    String token = ctx.getAttribute("TOKEN");
看看这个例子


我们可以使用TestNG的
ITestContext

例如:

在测试课上

    ctx.setAttribute("TOKEN", token);
在另一个班级进行同样的测试

    String token = ctx.getAttribute("TOKEN");
看看这个例子


您可以在runner xml文件中传递参数。 及
您可以使用属性外部文件保存值。

您可以在runner xml文件中传递参数。 及 可以使用属性外部文件保存值