当前位置: 首页 > 知识库问答 >
问题:

取决于重新发布的两个不同json文件

元胡媚
2023-03-14

我创建了两个java类TestA.java和TestB。java使用restAssured,其中每个类都从TestA读取json。json和testB。json并向endpointuri.TestA发出请求。java返回一个带有标记“customerID”的json响应,该标记将作为TestB的一个标记的输入。当我使用“TestB.java”customerID发布请求时,必须从TestB中选择。我的代码看起来怎么样?有什么想法吗?

我的代码:

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"
},

现在我想把这个客户ID作为测试B.json测试B的输入.java这是动态的。

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

< code>TestA.java和< code>TestB.java看起来几乎一样,除了post uri

提前谢谢。

共有1个答案

孔硕
2023-03-14

这取决于您如何分发类:

> < li>

如果您想在单个类中编写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类。

> < li>

如果您希望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
}}
 类似资料:
  • 我发送JSON文件(现在从邮递员)的身体是这样的: 控制器上的方法是: 我犯了个错误- 如何解决这个问题?

  • 我目前面临一个相当奇怪的问题,因为它发生在同一个Eclipse项目中,但仅在某些计算机上(安装Eclipse IDE)。到目前为止,问题发生在安装了eclipse版本2019-12(4.14.0)和eclipse fortune(非常旧,遗憾的是我不知道确切版本)的计算机上。我的笔记本电脑(2020-03(4.15.0))和另一台2019-06(4.12.0)版本的笔记本电脑上不会出现这种情况。关

  • 问题内容: 我有一个项目,其中有两个使用sqlline的单独模块和另一个依赖jline的库(例如OtherLib)。但是在不同版本上。 Module1使用Sqlline取决于 jline 2.10 Module2使用OtherLib取决于 jline 0.9.94 并且这两个版本不兼容。因此,我设置了类路径,以便Module1首先在 $ HOME / lib / module1 文件夹中搜索,而M

  • 我只想为这样的json发布json请求(使用restassured): Im定义基本uri,并尝试使用hashmap: 当然是“红色”,因为尝试将整数作为字符串。 我正在换成字符串。valueOf()用于我的1和111个数字, 然后使用smth like成功发布请求 但响应不正确(与所需的json相比): 此处有2点: 那么,问题是:在这种情况下,以正确的顺序并使用id和usedId的int值正确

  • 问题内容: 我正在使用logback / slf4j进行日志记录。我想解析我的日志文件以分析一些数据,所以我不想解析一个很大的大文件(主要由调试语句组成),而是要有两个记录器实例,每个实例都记录到一个单独的文件中。一种用于分析,另一种用于通用日志记录。有谁知道使用Logback或其他任何记录器是否可行? 问题答案: 很可能在logback中执行类似的操作。这是一个示例配置: 然后,您将设置两个单独

  • 问题内容: $ resource非常棒,它提供了非常方便的方式来处理Web服务。如果必须在不同的URL上执行GET和POST怎么办? 例如,GET URL是, 而POST URL 没有任何参数 问题答案: 您应该能够将URL作为参数公开。我能够做到这一点: 然后,您可以覆盖通话中的URL 。 在我的简短测试中发现的一个警告是,如果我将URL字符串包含在内,则该字符串将无法正常工作。我没有收到错误消