【问题标题】:Pass test data from one test case to another将测试数据从一个测试用例传递到另一个
【发布时间】:2020-06-15 16:37:41
【问题描述】:

我想使用 TestNG 和 RestAssured 测试 API。要测试此 API,需要进行几次 API 调用。我的第一个 API 调用请求下一个 API 调用所需的数据。

我的代码:

我有一个数据提供者,它从 Excel 文件中提取测试信息并将其打包到 Java 对象中。

 @Test(dataProvider = "test1", dataProviderClass = test1.class)
    public void test1(Transfer data) {

        //basic test case for consent
        response =
                given().
                        spec(spec).
                        body(data).
                        when().
                        post("/firstCall").
                        then().
                        assertThat().
                        body("accepted", equalTo("accepted")).
                        response();
    }

现在我有第二个测试用例。此测试用例还应使用从 Excel 文件中获取一些相关信息的数据提供程序。我还必须在 test2 中使用来自 test1 答案的信息。

@Test(dataProvider = "test2", dataProviderClass = test2.class, dependsOnMethods = { "test1" })
        public void test2(Transfer data2) {

        //use test data of test1 in this test

        }

如何在第二个 API 调用中使用第一个 API 调用的结果?或者更好地说我如何将 test1 的信息传递给 test2 的数据提供者?

【问题讨论】:

  • Imo 最好的选择是在两个测试中重复相同的操作来获取响应。
  • 测试应该是独立的,我建议不要在它们之间共享任何数据。如果在 test1 之前运行 test2 会怎样?如果 test1 失败并且您没有 test2 的数据怎么办?您不希望 test2 因为 test1 而失败。
  • @Amongalen 你能解释一下原因吗?
  • 我应该对每个单独的步骤进行测试吗?像这样:Test1只调用test1,Test2调用test1,test2等等?

标签: java spring dependencies testng


【解决方案1】:

首先,测试应该是atomic,这意味着一个测试不依赖于另一个。

现在,在任何需要一些数据的测试中,您都应该尝试从测试逻辑中拆分数据;例如,创建一个处理数据生成的对象和一个用于设置的对象。

在您的测试套件中,您可以为套件范围创建数据对象(在套件运行时创建并可用)或具有静态字段/方法的对象。

在设置中,您可以执行创建测试数据的操作,例如:从保存的类中获取数据 生成新数据并请求将其添加到应用程序中。

getSomeData() -> returns data saved locally in a class if available, else generate and create data in the app

因此,在您的特定情况下,您可以将数据保存在类测试范围之外的类中,并在设置类中创建一个方法来检查是否可用,否则调用一个方法来创建它。

【讨论】:

  • Np,玩得开心:)
猜你喜欢
  • 2020-09-04
  • 2017-10-30
  • 2016-04-25
  • 1970-01-01
  • 2020-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
相关资源
最近更新 更多