我有一个简单的POST请求,使用application/x-www-form-urlencoded
编码发送params。
查看线索docs我无法通过参数值找到匹配请求的方法,例如我所说的querystring
匹配。
此外,身体contains
似乎也不可能,也不可能完全匹配整个身体(就像base64一样)。
有没有办法匹配这类请求?
答案 0 :(得分:2)
我发现的另一个选择是使用contains
进行 存根 Content-Type: application/x-www-form-urlencoded
{
"request": {
"method": "POST",
"url": "/oauth/token",
"basicAuthCredentials": {
...
},
"bodyPatterns": [
{
"contains": "username=someuser"
}
]
},
"response": {
....
}
}
答案 1 :(得分:1)
您可以尝试https://github.com/WireMock-Net/WireMock.Net
使用此示例json可以匹配查询参数和 body :
{
"Guid": "dae02a0d-8a33-46ed-aab0-afbecc8643e3",
"Request": {
"Url": "/testabc",
"Methods": [
"put"
],
"Params": [
{
"Name": "start",
"Values": [ "1000", "1001" ]
},
{
"Name": "end",
"Values": [ "42" ]
}
],
"Body": {
"Matcher": {
"Name": "WildcardMatcher",
"Pattern": "test*test"
}
}
}
}
答案 2 :(得分:1)
我有一个类似的问题-我想检查确切的参数,但没有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"))).
答案 3 :(得分:0)
使用经典的Wiremock,您可以使用bodyPatterns的匹配器和正则表达式:
例如:
...
“请求”:{
“ method”:“ POST”,
“ url”:“ / api / v1 / auth / login”,
“ bodyPatterns”:[
{
“ matches”:“(。*&| ^)username = test($ |&。*)”
},
{
“ matches”:“(。*&| ^)password = 123($ |&。*)”
}
]
},