【问题标题】:How to create query param body with multiple key param values如何创建具有多个关键参数值的查询参数主体
【发布时间】:2021-06-04 14:29:54
【问题描述】:

在下面的哈希图中,您可以看到,我有一个关键参数值列表,我需要为多个值自动处理多个值,而不是重复哈希图,而是重复它并更新。

我是怎么做的:

第一个测试用例

HashMap<String, String> queryParam = new HashMap<>();
queryParam.put("Name", Name);
queryParam.put("street","street" );
queryParam.put("city","city" );
queryParam.put("state", "state");
queryParam.put("postalCode","postalCode" );
queryParam.put("country", "country");
queryParam.put("email", "email");
queryParam.put("website","website" );
queryParam.put("phone", "phone");

Response response = request.auth().basic(uname, pwd).body(queryParam).contentType(APPLICATION_JSON)
            .post().then().extract()
            .response();

现在,如果您看到上面的 hashmap,它有强制参数,一些可选参数,然后每个参数都有不同的验证。现在它涵盖了每个键的所有测试用例,上面的 haspmap 是重复的,值或键正在改变。我想以更好、更有效的方式做到这一点。

【问题讨论】:

  • 我不清楚您要做什么。您编写的 sn-p 代码不是测试用例 - 它只是显示您进行 HTTP 调用并将一些 URL 参数传递给它。你在测试请求的接收者吗?你想测试什么?变量/可选参数是怎么进来的?
  • 当一个 api 测试用例将被执行时,将验证不同的验证组合和错误代码。为此,创建了上面的示例请求。问题是如果需要做同样的事情,需要创建多少个哈希图才能为此请求创建多个测试用例。现在有意义吗?
  • 不,抱歉 - 这仍然没有多大意义。您似乎在就您需要编写多少/什么测试用例(或如何更好地编写它们)来满足一些未知需求征求意见。如果没有有关您正在行使的功能的更多详细信息,我认为我们无法为您提供帮助。听起来这更像是代码审查网站的问题,而不是堆栈溢出?
  • 不,我不是在问需要创建多少测试用例,我是说我无法在更改哈希映射密钥对值的同时创建通用哈希映射来测试多个场景。感谢您的尝试。

标签: java rest rest-assured rest-assured-jsonpath


【解决方案1】:

您应该使用 Java POJO,而不是使用 Map。使用构造函数设置默认值,然后使用 setter 更改值。效率更高。

还有一件事,您可以应用工厂设计模式为每个测试用例构建具有所需值的对象。

测试示例

@Test
void test1() {
    QueryObject query = QueryObjectFactory.getDefaultValue();

    Response res = given().contentType(ContentType.JSON)
            .body(query)
            .post("to_your_api_endpoint");
}

工厂类

public class QueryObjectFactory {

    public static QueryObject getDefaultValue() {
        QueryObject queryObject = new QueryObject();
        queryObject.setName("name");
        queryObject.setStreet("street");
        queryObject.setCity("city");
        queryObject.setCountry("country");
        queryObject.setState("state");
        queryObject.setPostalCode("postalCode");
        queryObject.setEmail("email");
        queryObject.setWebsite("website");
        queryObject.setPhone("phone");
        return queryObject;
    }
}

POJO 注意:我使用 lombok 生成 getter 和 getter --> 减少 POJO 类的复杂度。

import lombok.Data;

@Data
public class QueryObject {
    private String name;
    private String street;
    private String city;
    private String state;
    private String postalCode;
    private String country;
    private String email;
    private String website;
    private String phone;
}

【讨论】:

  • 问题 - 龙目岛的数据将如何变化。我从来没有使用过,不胜感激。
  • Lombok 将在运行时根据您放入类的注解生成 getter、setter、构造函数、toString、hashCode 等代码。基本上,它可以帮助我减少 POJO 的冗长。
猜你喜欢
  • 2011-02-09
  • 1970-01-01
  • 2014-12-29
  • 1970-01-01
  • 2019-09-19
  • 1970-01-01
  • 2021-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多