当前位置: 首页 > 知识库问答 >
问题:

使用Wiremck时请求不匹配(测试对外部服务器的请求)

周培
2023-03-14

我已经使用wiremck配置了几个存根。我需要检查通过Rest API向外部服务器发送请求的客户端。但是当我配置存根时,出于某种原因,存根的请求被截断,主机(模拟外部服务器)被截断。

application.properties

api.url.fail.header.rec.count.external.server=http://127.0.0.1:8282/dataByUnloadPlanPaysSet/failRecCount
  • Rest客户端

    public ResponseEntity<InfoFromExternalServerDto>
    sendRequestFromExternalServer(String blockId, String urlToExternalServer) {

        UriComponentsBuilder uriComponentsBuilder = buildUriToExternalServer(blockId, urlToExternalServer);
        String uriWithParamsToExternalServer = uriComponentsBuilder.toUriString();

        HttpHeaders requestHttpHeaders = getHeadersHttpHeaders();
        HttpEntity<Object> requestHttpEntity = new HttpEntity<>(null, requestHttpHeaders);

        return restTemplate.exchange(
                uriWithParamsToExternalServer,
                HttpMethod.GET,
                requestHttpEntity,
                InfoFromExternalServerDto.class
        );
    }


    private UriComponentsBuilder buildUriToExternalServer(String blockId, String urlToExternalServer) {

        return UriComponentsBuilder.fromHttpUrl(urlToExternalServer)
                .queryParam("format", "json")
                .queryParam("block", blockId);
    }

    private HttpHeaders getHeadersHttpHeaders() {

        var requestHttpHeaders = new HttpHeaders();
        requestHttpHeaders.add("Accept", MediaType.APPLICATION_JSON_VALUE);

        return requestHttpHeaders;
    }

    < li>wiremock配置
@Value("${api.url.fail.header.rec.count.external.server}")
    private String apiUrlFailHeaderRecCountToExternalServer;


    public void setupStubForProcessingRequest(int portExternalServerMock) {

        String addressHost = "127.0.0.1";

        configureFor(addressHost, portExternalServerMock);

        setupResponseInCaseFailRecCount();
    }

    private void setupResponseInCaseFailRecCount(){

        String countEntriesIntoHeaderRecCount = "1";

        UrlPattern urlPattern = urlEqualTo(this.apiUrlFailHeaderRecCountToExternalServer);

        MappingBuilder mappingBuilder = get(urlPattern);

        MappingBuilder mappingBuilderWithHeader = serverMockUtils.makeMappingBuilderSuccess(mappingBuilder);

        int statusOk = HttpStatus.OK.value();

        ResponseDefinitionBuilder responseDefinitionBuilder = aResponse().
                withStatus(statusOk)
                .withHeader("Content-Type", "application/json")
                .withHeader("rec_count", countEntriesIntoHeaderRecCount)
                .withBodyFile("json/infoFromExternalServer.json");

        MappingBuilder responseForReturn = mappingBuilderWithHeader.willReturn(responseDefinitionBuilder);

        stubFor(responseForReturn);
    }

 public MappingBuilder makeMappingBuilderSuccess(MappingBuilder mappingBuilder){

        return mappingBuilder
                .withHeader("Accept", matching("application/json"))
                .withQueryParam("format", equalTo("json"))
                .withQueryParam("block", equalTo(blockId));
    }

  • 测试

@Value("${api.url.fail.header.rec.count.external.server}")
    private String apiUrlFailHeaderRecCountToExternalServer;

    @Value("${blockId.param.query}")
    private String blockId;

    private WireMockServer wireMockServer;

    private final int portExternalServerMock = 8282;

    @BeforeEach
    void setup() {

        WireMockConfiguration mockConfigurationPort = wireMockConfig()
                .port(this.portExternalServerMock);

        wireMockServer = new WireMockServer(mockConfigurationPort);
        wireMockServer.start();

        restServerMockForClient.setupStubForProcessingRequest(this.portExternalServerMock) ;
    }

@AfterEach
    void teardown() {
        wireMockServer.stop();
    }

    @Test
    void getDataFromExternalServer() {
        InfoFromExternalServerDto dataFromExternalServer =
                clientToExternalServer.getDataFromExternalServer(this.blockId,
                        this.apiUrlFailHeaderRecCountToExternalServer);

       
    }


我有多个不同地址主机的配置。每台主机都有自己的端口。当我通过endpointRest控制器发送请求时,主机地址不会被截断。如果我调用从测试循环中调用客户机的方法,那么由于某种原因,主机地址形成了,Wiremock存根无法给出有效的答案。

请告诉我发生了什么。我该如何解决这个问题?

共有1个答案

臧曜瑞
2023-03-14

我找到了解决办法

  • application.properties
api.url.fail.header.rec.count.external.server=http://127.0.0.1:8282/dataByUnloadPlanPaysSet/failRecCount

api.url.fail.header.rec.count.for.stubs=/dataByUnloadPlanPaysSet/failRecCount

请点击此处了解详情。存根-创建存根时必须分配此地址(不指定主机地址和主机端口)

这很重要。

使用方法 - urlPathEqualTo()

UrlPathPattern urlPathPattern = urlPathEqualTo(this.apiUrlFailHeaderRecCountToExternalServer);
 类似资料:
  • 测试这种服务的基本策略是验证请求的内容(正确的URL),并确保我们模拟到服务中的数据通过正确的方法正确返回。 wikisearch.ts 我们的测试策略是检查服务是否已请求正确的网址,一旦我们回复了模拟数据,我们就要验证它是否返回相同的数据。

  • 本文向大家介绍JS跨域请求外部服务器的资源,包括了JS跨域请求外部服务器的资源的使用技巧和注意事项,需要的朋友参考一下 tomcat服务器提供的接口,不能在其他域中访问的时候,需要增 Access-Control-Allow-Origin:* 以下操作均在需要被访问的项目中设置 1、编写拦截器代码 2、配置web.xml

  • 我正在使用Spring云合同创建集成测试。从配置到将存根jar添加到项目,一切都正常工作。因此,我发现尽管所有参数和标头都相同,但请求不匹配。 这是API测试 这是API调用的合约 即使我从合同请求中删除用户名,仍然收到相同的错误。 我需要为X-B3-ParentSpanId等创建标题来使其匹配吗?

  • 我正在尝试使用Jmeter测试一个soap服务。当使用SOAP/XML-RPC请求元素时,服务给出正确的结果。当使用Fiddler执行时,它给出正确的响应(响应代码200)。 但是当我使用Http Request在Jeter上运行相同的服务时。它返回响应代码为500并给出 “请求格式无效:文本/xml。 这在响应数据中。我试着把它改成许多格式,像“应用程序/xml”等等,但是没有用。 [HTTP_

  • 我们当前的项目需求是将一些请求路由到第三方外部api服务器。为此,我们使用的是基于spring祖尔的路由器服务。 现在的要求是,对于某些endpoint,到外部api服务器的请求已经通过不属于我们的外部代理服务器路由, 如何通过卷曲完成此操作: 通过给定的代理重定向请求。如何通过spring-祖尔服务器做到这一点? 我有一条线索?https://github.com/spring-cloud/sp

  • 我正在使用Modeshape rest服务器。Modeshape的版本是2.8.2。 当我向诸如这样的节点发送GET请求时,它会返回关于该节点的信息。 但是当我在同一个地址上发送删除请求(例如,使用Fiddler)时,它返回。根据文档,这样的地址应该支持删除请求。 更详细。我发送 我得到了 pom.xml,我正在使用它构建rest-server.war 我做错什么了吗? 而且我也在使用jboss-