放心的两个不同的json文件之间的依赖

时间:2018-07-21 10:49:48

标签: json rest-assured rest-assured-jsonpath

我使用restAssured创建了两个Java类 TestA.java TestB.java ,其中每个类都从 TestA.json 读取json和 testB.json 并向端点uri发送请求。TestA.java返回带有标签“ customerID ”的json响应,该标签将输入 customerID > TestB.json ,并且每当我使用“ TestB.java”发布请求时,都必须从TestB.json中选择customerID。我的代码看起来如何?有什么想法吗?

我的代码:

TestA.java

String requestBody = generateString("CreateCustomer.json");
RestAssured.baseURI = "https://localhost:8080";
Response res = given().contentType(ContentType.JSON)
            .header("Content-Type", "application/json").header("checkXML", "N").body(requestBody).when()
            .post("/restservices/customerHierarchy/customers").then().assertThat()
            .statusCode(201).and().body("transactionDetails.statusMessage", equalTo("Success")).and().log().all()
            .extract().response();

    //converts response to string
    String respose = res.asString();
    JsonPath jsonRes = new JsonPath(respose);
    CustomerID = jsonRes.getString("customerNodeDetails.customerId");

TestA.java response
{
"customerNodeDetails": {

    "customerId": "81263"
},

现在,我想将此customerID作为动态的testB.jsontestB.java中的输入来传递。

TestB.json
 "hierarchyNodeDetails": { 
      "**customerId**":"", 
        "accountNumber": "", 
        "startDate": "", 
}

TestA.javaTestB.java看起来几乎相同,除了uri后

预先感谢

1 个答案:

答案 0 :(得分:0)

这取决于您如何分配课程:

  1. 如果要在单个类中编写A和B的测试。声明一个类型为Response / String的局部变量,然后将客户ID存储在该变量中。变量的范围将存在于所有TestNG方法中。您可以从本地变量设置B.json的客户ID。

    public class Test{  
    String _cust_id; 
    
    @Test
    public void test_A(){
        // ceremony for getting customer id
        _cust_id = jsonRes.getString("customerNodeDetails.customerId");
    }
    
    @Test
    public void test_B(){
        // write value of customer id using the variable _cust_id
    }}
    

您可以尝试这种方法,但是建议将数据部分分离为dataProvider类。

  • 如果要为A和B具有单独的类,请使用ITestContext将值从一个类传递到另一个。

        public class A{
            @Test
            public void test1(ITestContext context){
                context.setAttribute("key", "value");
            }
        }
    
        public class B{
            @Test
            public void test2(ITestContext context){
                String _attribute = context.getAttribute(key);
            }
        }
    
  • 一种优雅的方法可能是,将dataProvider用于B类测试,在该仪式上执行从A类测试获取customerID的仪式。

    public class DataB{
    @DataProvider
    public static Object[][] _test_data_for_b(){
        // get the customerID
        // create the json for class B
        // return the json required for class B test
        // All these could be achieved as everything has a common scope
    }}
    
    public class B{
    @Test(dataProvider = "_test_data_for_b", dataProviderClass = DataB.class)
    public void test_B(String _obj){
        // perform the testing
    }}