【问题标题】:How to turn Pact HTTP Request interactions into Curl如何将 Pact HTTP 请求交互转换为 Curl
【发布时间】:2021-01-08 12:15:45
【问题描述】:

我一直在寻找一种方法,将我的 Pact 测试的交互转换为 cUrl 以便于调试,但不知道该怎么做。

【问题讨论】:

    标签: java curl pact


    【解决方案1】:

    可能有更好的方法可以做到这一点,但我能够使用我编写的 logCurlFromPact() 方法并从 pactTestTemplate 调用它来做到这一点。

    @TestTemplate
    @ExtendWith(PactVerificationInvocationContextProvider.class)
    void pactTestTemplate(PactVerificationContext context, HttpRequest request) throws IOException {
        request.addHeader("Authorization", AUTHORIZATION_TOKEN);
    
        logCurlFromPact(context, request);
    
        context.verifyInteraction();
    }
    
    
    public static void logCurlFromPact(PactVerificationContext context, HttpRequest request) throws IOException {
    
        String bodyParam = ((RequestResponseInteraction) context.getInteraction()).getRequest().getBody().valueAsString();
    
        String bodyResponse = ((RequestResponseInteraction) context.getInteraction()).getResponse().getBody().valueAsString();
    
        String method = ((RequestResponseInteraction) context.getInteraction()).getRequest().getMethod();
    
        String baseUrl = "";
        if (method.equals("POST")) {
            baseUrl = ((HttpPost) request).getURI().toString();
        } else if (method.equals("GET")) {
            baseUrl = ((HttpGet) request).getURI().toString();
        }
    
        Header[] headers = request.getAllHeaders();
    
        String headersString = "";
    
        for (Header s : headers) {
            headersString = headersString + "--header " + "'" + s.getName() + ": " + s.getValue() + "'" + "\\" + "\n";
        }
    
        String curl = "" +
                "curl " +
                "'" + baseUrl + "' \\" + "\n" +
                headersString +
                "--data-binary " + "'" + bodyParam + "' \\" + "\n" +
                "--compressed \\" + "\n" +
                "--insecure \\" + "\n" +
                "--verbose" +
                "";
    
        System.out.println(curl + "\n\n " + bodyResponse + "\n ---- \n\n");
    
    }
    

    这里是 logback.xml 文件的示例,以防您可能想要使用日志而不是 System.out.print()

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    
        <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>%d{HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
            </layout>
        </appender>
    
        <appender name="File" class="ch.qos.logback.core.FileAppender">
            <file>logback.log</file>
            <append>true</append>
    
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
            </layout>
        </appender>
    
        <logger name="com.my.package.packagewiththelogmethod" level="DEBUG">
            <appender-ref ref="File"/>
        </logger>
    
        <logger name="curl" level="DEBUG">
            <appender-ref ref="File"/>
        </logger>
    
        <root level="info">
            <appender-ref ref="Console" />
        </root>
    
    </configuration>
    

    更新

    对于Pact 4.3.2&lt;http.client.version&gt;5.1.2&lt;/http.client.version&gt;

    public static void logCurlFromPact(PactVerificationContext context, HttpRequest request) {
    
            String bodyParam = ((RequestResponseInteraction) context.getInteraction()).getRequest().getBody().valueAsString();
    
            String bodyResponse = ((RequestResponseInteraction) context.getInteraction()).getResponse().getBody().valueAsString();
    
            String method = ((RequestResponseInteraction) context.getInteraction()).getRequest().getMethod();
    
            String baseUrl = "";
            switch (method) {
                case "POST":
                    baseUrl = ((HttpPost) request).getURI().toString();
                    break;
                case "GET":
                    baseUrl = ((HttpGet) request).getURI().toString();
                    break;
                case "PUT":
                    baseUrl = ((HttpPut) request).getURI().toString();
                    break;
                case "PATCH":
                    baseUrl = ((HttpPatch) request).getURI().toString();
                    break;
                case "DELETE":
                    baseUrl = ((HttpDelete) request).getURI().toString();
                    break;
            }
    
            Header[] headers = request.getAllHeaders();
    
            String headersString = "";
    
            for (Header s : headers) {
                headersString = headersString + "--header " + "'" + s.getName() + ": " + s.getValue() + "'" + "\\" + "\n";
            }
    
            String curl = "" +
                    "curl " +
                    "--request " + method + " " +
                    "'" + baseUrl + "' \\" + "\n" +
                    headersString +
                    "--data-binary " + "'" + bodyParam + "' \\" + "\n" +
                    "--compressed \\" + "\n" +
                    "--insecure \\" + "\n" +
                    "--verbose" +
                    "";
    
            log.debug(curl + "\n\n " + bodyResponse + "\n ---- \n\n");
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 2017-06-25
      • 2020-12-21
      • 2016-11-25
      相关资源
      最近更新 更多