首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >参数发布Wiremock匹配请求

参数发布Wiremock匹配请求
EN

Stack Overflow用户
提问于 2018-02-06 00:59:01
回答 2查看 5.4K关注 0票数 5

我有一个简单的POST请求,使用application/x-www-form-urlencoded编码发送参数。

在wiremock docs中,我找不到通过参数值匹配请求的方法,类似于我所说的querystring匹配。

此外,似乎也不可能为身体contains,也不可能匹配整个身体的清晰(就像base64)。

有没有一种方法可以满足这种请求?

EN

回答 2

Stack Overflow用户

发布于 2019-04-24 03:31:07

在经典wiremock中,你可以使用bodyPatterns的匹配器和正则表达式:

例如:

代码语言:javascript
复制
...
"request": {
   "method": "POST",
   "url": "/api/v1/auth/login",
   "bodyPatterns": [
     {
       "matches": "(.*&|^)username=test($|&.*)"
     },
     {
       "matches": "(.*&|^)password=123($|&.*)"
     }
   ]
},
票数 2
EN

Stack Overflow用户

发布于 2020-04-16 17:14:16

我遇到了一个类似的问题--我想检查确切的参数,但没有使用patterm的魔力(所以更容易维护)。作为一种解决办法,我创建了一个帮助器类:

代码语言:javascript
复制
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测试中,您可以通过以下方式使用它:

代码语言:javascript
复制
LinkedHashMap<String, String> map = new LinkedHashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");

...

withRequestBody(equalTo(WireMockUtil.toFormUrlEncoded(map))).

或仅检查containing的专用部件:

代码语言:javascript
复制
withRequestBody(containing(WireMockUtil.toFormUrlEncoded("key","value1"))).
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48627656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档