我有一个简单的POST请求,使用application/x-www-form-urlencoded
编码发送参数。
在wiremock docs中,我找不到通过参数值匹配请求的方法,类似于我所说的querystring
匹配。
此外,似乎也不可能为身体contains
,也不可能匹配整个身体的清晰(就像base64)。
有没有一种方法可以满足这种请求?
发布于 2019-04-24 03:31:07
在经典wiremock中,你可以使用bodyPatterns的匹配器和正则表达式:
例如:
...
"request": {
"method": "POST",
"url": "/api/v1/auth/login",
"bodyPatterns": [
{
"matches": "(.*&|^)username=test($|&.*)"
},
{
"matches": "(.*&|^)password=123($|&.*)"
}
]
},
发布于 2020-04-16 17:14:16
我遇到了一个类似的问题--我想检查确切的参数,但没有使用patterm的魔力(所以更容易维护)。作为一种解决办法,我创建了一个帮助器类:
import java.util.Iterator;
import java.util.LinkedHashMap;
public class WireMockUtil {
public static String toFormUrlEncoded(LinkedHashMap<String, String> map) {
if (map == null) {
return "";
}
StringBuilder sb = new StringBuilder();
Iterator<String> it = map.keySet().iterator();
while (it.hasNext()) {
String key = it.next();
String value = map.get(key);
appendFormUrlEncoded(key,value,sb);
if (it.hasNext()) {
sb.append('&');
}
}
return sb.toString();
}
public static String toFormUrlEncoded(String key, String value) {
StringBuilder sb = new StringBuilder();
appendFormUrlEncoded(key, value,sb);
return sb.toString();
}
public static void appendFormUrlEncoded(String key, String value, StringBuilder sb) {
sb.append(key).append('=');
if (value != null) {
sb.append(value);
}
}
}
在Wiremock测试中,您可以通过以下方式使用它:
LinkedHashMap<String, String> map = new LinkedHashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
...
withRequestBody(equalTo(WireMockUtil.toFormUrlEncoded(map))).
或仅检查containing
的专用部件:
withRequestBody(containing(WireMockUtil.toFormUrlEncoded("key","value1"))).
https://stackoverflow.com/questions/48627656
复制相似问题