【问题标题】:Wiremock match request POST by paramsWiremock 匹配请求 POST by params
【发布时间】:2018-02-05 16:59:00
【问题描述】:

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

查看wiremock docs 我找不到通过参数值匹配请求的方法,就像我的意思是querystring 匹配。

此外,contains 似乎也不可能用于 body,也无法以 clear 方式匹配整个 body(就像 base64 一样)。

有没有办法匹配这种请求?

【问题讨论】:

    标签: post parameters wiremock


    【解决方案1】:

    我发现的另一个选项是将contains 用于存根 Content-Type: application/x-www-form-urlencoded

    {
      "request": {
        "method": "POST",
        "url": "/oauth/token",
        "basicAuthCredentials": {
          ...
        },
        "bodyPatterns": [
          {
            "contains": "username=someuser"
          }
        ]
      },
      "response": {
        ....
      }
    }
    

    【讨论】:

      【解决方案2】:

      通过经典的wiremock,您可以使用bodyPatterns 的匹配器和正则表达式:

      例如:

      ...
      "request": {
         "method": "POST",
         "url": "/api/v1/auth/login",
         "bodyPatterns": [
           {
             "matches": "(.*&|^)username=test($|&.*)"
           },
           {
             "matches": "(.*&|^)password=123($|&.*)"
           }
         ]
      },
      

      【讨论】:

        【解决方案3】:

        我有一个类似的问题 - 我想检查确切的参数,但没有模式魔法(更容易维护)。作为一种解决方法,我创建了一个辅助类:

        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"))).
        

        【讨论】:

          【解决方案4】:

          你可以试试https://github.com/WireMock-Net/WireMock.Net

          匹配查询 parametersbody 可以用这个示例 json 完成:

          {
              "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"
                  }
                }
              }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-02-22
            • 2018-09-08
            • 1970-01-01
            • 1970-01-01
            • 2017-12-31
            相关资源
            最近更新 更多