java - 具有重复查询参数的 RestAssured
问题描述
处理使用REST-assured rest-assured-3.3.0
的自动化测试包。有一个要测试的端点,该端点具有许多用于驱动其搜索功能的重复查询参数:
/count?taskTypes=EAS&taskTypes=MBO&taskTypes=OTHER&taskAges=NEW&taskAges=EXISTING&ageSelection=ALL
REST-assured在它的请求规范中提供了一个params(Map<String, ?> var1)
传递参数的规范。但是,这使用不能包含重复键的 Map。因此,为了在测试代码中构造查询,我在Multimap中设置参数和关联值:
import com.google.common.collect.Multimap;
Multimap<String, String> searchParams = ArrayListMultimap.create();
searchParams.put("taskTypes", "EAS");
searchParams.put("taskTypes", "MBO");
searchParams.put("taskTypes", "OTHER");
searchParams.put("taskAges", "NEW");
searchParams.put("taskAges", "EXISTING");
searchParams.put("ageSelection", "ALL");
然后将 Multimap 传递给一个函数以格式化查询并使用 REST-assured 设置 GET 请求:
import org.apache.http.client.utils.URIBuilder;
import io.restassured.http.Method;
import io.restassured.response.ExtractableResponse;
import io.restassured.specification.RequestSpecification;
protected ExtractableResponse request(Method method, Multimap<String, ?> params, String url)
{
URIBuilder builder = new URIBuilder();
for (Map.Entry<String, ?> entry : params.entries()) {
builder.addParameter(entry.getKey(), entry.getValue().toString());
}
try {
url = url + builder.build().toString();
} catch(URISyntaxException e) {}
return getRequestSpec()
.when()
.headers("Content-Type", "application/json")
.request(method, url)
.then()
.spec(getResponseSpec(method))
.extract();
}
运行此代码会产生具有以下参数的请求:
/count?taskTypes=OTHER&taskAges=EXISTING&ageSelection=ALL
问题是REST-assured似乎删除了在参数中传递给它的重复查询url
参数。有趣的是REST-assured提供以下接口given().queryParam("param", 1,2,3)
解决方案
在此处检查 for 循环:
URIBuilder builder = new URIBuilder();
for (Map.Entry<String, ?> entry : params.entries()) {
builder.addParameter(entry.getKey(), entry.getValue().toString());
}
params
尽管为您使用了 Multimap ,但看起来仍然以构建器的 Map 结尾。无论如何,这是您摆脱重复键的地方。
推荐阅读
- python - 如何在keras中设置嵌入层名称
- mysql - MySQL - 仅获取最近的先前记录,而不是所有先前的记录
- class-diagram - 类图中的什么关系是合适的?
- python - 如何在不删除 unicode 的情况下使用 shell 中的 json.tool 来验证和打印语言文件?
- error-handling - 如何处理来自 reqMktData 调用的错误
- angular - 在失败测试中测试 ngrx/影响成功操作
- c# - Winforms C#中需要jQuerify CEF浏览器的解决方案
- docker - Docker 上的 Rviz 核心转储
- python - 为什么python安装sha256总是失败?
- numpy - 了解一维向量上的 np.matmul