如何使用SwaggerValidator(com.atlassian.oai.validator)验证Lagom API响应?

时间:2017-06-01 10:27:37

标签: validation swagger swagger-2.0 lagom

好吧,我陷入了这种情况,我想使用Swagger API来验证我的Lagom Service API的响应。 以下是一些示例代码:

@Test
public void shouldPayloadFromFileConformToSchema() throws Exception {
    // first test the plain json is valid with schema
    SwaggerRequestResponseValidator validator = SwaggerRequestResponseValidator
        .createFor("my-service-schema.yaml").build();
    final Request validRequest = SimpleRequest.Builder.get("/myService/AL20170730/11111555556161/191919")
        .withHeader("api-key", "TESTKEY")
        .build();
    Response validResponse = SimpleResponse.Builder.ok()
        .withBody(ValidatorTestUtil.loadResponse("my_service_sample_response_2017_03_16")).build();
    ValidationReport reportForText = validator.validate(validRequest, validResponse);
    logger.info(
        "shouldPayloadFromFileConformToSchema() ################# VALIDATION PAYLOAD REPORT ##################");
    reportForText.getMessages().forEach((m) -> {
        logger.info("{}", m);
    });
    assertFalse(reportForText.hasErrors());
    logger.info(
        "shouldPayloadFromFileConformToSchema() ################# VALIDATION PAYLOAD REPORT END ##################");
    logger.info(validRequest.getHeaders().toString());
    SwaggerModule swagger = new SwaggerModule();


}

当此代码运行时似乎它进入服务(因为它打印了一些服务的日志。)但是没有调用具有给定值的数据库的方法。

我需要在这里做一些事情,它调用服务的方法并根据这个swagger规范验证响应。

我看到了这个链接,但没有得到解决方案How to validate API in tests with Swagger?

1 个答案:

答案 0 :(得分:0)

如果您希望验证针对正在运行的服务的实际互动,我建议您使用RestAssured模块(https://bitbucket.org/atlassian/swagger-request-validator/src/master/swagger-request-validator-restassured/

这将允许您针对正在运行的服务执行请求,然后验证请求/响应交互是否符合您的swagger规范。

在示例模块中使用了它的一个示例 - https://bitbucket.org/atlassian/swagger-request-validator/src/master/swagger-request-validator-examples/src/test/java/com/atlassian/oai/validator/examples/restassured/SwaggerValidationFilterTestExample.java(请注意,那里的示例使用WireMock来存根实际服务,但您可以将其替换为实际运行的服务)。