如何放心参数化.json文件?

Posted

技术标签:

【中文标题】如何放心参数化.json文件?【英文标题】:How to parameterize .json file in rest assured? 【发布时间】:2022-01-21 19:35:55 【问题描述】:

我是放心自动化框架的新手,所以需要帮助。我必须自动化一个简单的 API,在其中我在正文中发送请求。

given().log().all().contentType("application/json").body(payload).when().log().all().post("THE 
   POST URL").then().log().all().assertThat().statusCode(200);

我必须从 json 文件中读取请求,并且我能够成功地从 .json 文件中读取请求。但是我想参数化这些值,并且无法理解如何参数化文件。以下是示例 .json 文件:


"id" : 5,
"name" : "Harry"

我不想在这里硬编码 id 和 name 的值,而是使用数据提供者或任何其他方法对它们进行参数化。任何关于相同的指针都会有所帮助。

【问题讨论】:

【参考方案1】:

使用 Rest-Assured 进行 API 测试的一个好的做法是 POJO 方法。它可以帮助您避免操作 json 文件(一种硬编码)

第 1 步:定义 POJO

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person 
    private int id;
    private String name;

我使用 lombok 来生成详细代码。

第 2 步:创建数据提供者方法

@DataProvider(name = "create")
public Iterator<Person> createData() 
    Person p1 = new Person(1, "Json");
    Person p2 = new Person(2, "James");
    Person p3 = new Person(3, "Harry");
    return Arrays.asList(p1,p2,p3).iterator();

第 3 步:编写测试

@Test(dataProvider = "create" )
void test1(Person person) 
    given().log().all().contentType(JSON)
            .body(person)
            .post("YOUR_URL")
            .then().log().all().assertThat().statusCode(200);

您需要在项目类路径中添加 2 个库才能使上述代码正常工作。

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.20</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.0</version>
</dependency>

【讨论】:

很好的解决方案。如果json结构不是常量而是动态的怎么办? @MansoorShaikh 如果“动态”意味着不同 API 的新 json,则为映射创建新 POJO。如果“动态”意味着只需在 json 中为相同的 API 添加/删除一些字段,那么利用 jackson lib 中的注释来做到这一点。

以上是关于如何放心参数化.json文件?的主要内容,如果未能解决你的问题,请参考以下文章

pytest参数化实现DDT:读取JSON数据

Jmeter使用csv参数化Json数据

Postman参数化

Postman参数化

Postman参数化

Postman参数化