标签: spring-cloud-contract

为什么WireMock说请求不匹配?春云合约

Wiremock记录以下请求不匹配:

    WireMock                                 : Request was not matched:
{
  "url" : "/api/accounts?username=defaultuser",
  "absoluteUrl" : "http://localhost:11651/api/accounts?username=defaultuser",
  "method" : "GET",
  "clientIp" : "127.0.0.1",
  "headers" : {
    "authorization" : "bearer test123",
    "accept" : "application/json, application/*+json",
    "user-agent" : "Java/1.8.0_121",
    "host" : "localhost:11651",
    "connection" : "keep-alive"
  },
  "cookies" : { },
  "browserProxyRequest" : false,
  "loggedDate" : 1500711718016,
  "bodyAsBase64" : "",
  "body" : "",
  "loggedDateString" : "2017-07-22T08:21:58Z"
}
Closest match:
{
  "urlPath" : "/api/accounts",
  "method" : "GET",
  "headers" : {
    "authorization" : {
      "matches" : "^bearer"
    }, …
Run Code Online (Sandbox Code Playgroud)

spring-boot spring-cloud spring-cloud-netflix spring-cloud-contract

3
推荐指数
1
解决办法
8495
查看次数

Spring Cloud Contract Verifier - 正文匹配

我正在使用 Spring Cloud Contract Verifier

org.springframework.cloud:spring-cloud-starter-contract-verifier:jar:2.0.0.M8 org.springframework.cloud:spring-cloud-contract-maven-plugin:1.2.4.RELEASE

我有以下合同:

request:
  method: GET
  url: /cars/list
response:
  status: 200
  headers:
    Content-Type: application/json;charset=UTF-8
  body:
    cars:
      [
        {
          "make": "Ford",
          "model": "Fiesta",
          "year": 2016,
          "price": 16500.50
        },
        {
          "make": "BMW",
          "model": "X1",
          "year": 2014,
          "price": 22000.00
        },
        {
          "make": "NISSAN",
          "model": "Juke",
          "year": 2017,
          "price": 19300.00
        }
      ]
Run Code Online (Sandbox Code Playgroud)

然后在以下java代码中转换:

DocumentContext parsedJson = JsonPath.parse(response.getBody().asString());
assertThatJson(parsedJson).array("['cars']").contains("['model']").isEqualTo("Juke");
assertThatJson(parsedJson).array("['cars']").contains("['make']").isEqualTo("Ford");
assertThatJson(parsedJson).array("['cars']").contains("['year']").isEqualTo(2014);
assertThatJson(parsedJson).array("['cars']").contains("['year']").isEqualTo(2016);
assertThatJson(parsedJson).array("['cars']").contains("['model']").isEqualTo("Fiesta");
assertThatJson(parsedJson).array("['cars']").contains("['make']").isEqualTo("BMW");
assertThatJson(parsedJson).array("['cars']").contains("['year']").isEqualTo(2017);
assertThatJson(parsedJson).array("['cars']").contains("['make']").isEqualTo("NISSAN");
assertThatJson(parsedJson).array("['cars']").contains("['price']").isEqualTo(16500.5);
assertThatJson(parsedJson).array("['cars']").contains("['model']").isEqualTo("X1");
assertThatJson(parsedJson).array("['cars']").contains("['price']").isEqualTo(22000.0);
assertThatJson(parsedJson).array("['cars']").contains("['price']").isEqualTo(19300.0);
Run Code Online (Sandbox Code Playgroud)

我对这个测试有几个问题:

1)它不考虑顺序,这意味着以下机构仍将被视为有效:

{
  "cars": [
    {
      "make": "NISSAN",
      "model": "Juke", …
Run Code Online (Sandbox Code Playgroud)

spring-boot spring-cloud spring-cloud-contract

3
推荐指数
1
解决办法
3915
查看次数

如何启用 Spring Cloud Contract Wiremock 服务器日志记录?

根据官方文档How to Debug,我需要将以下内容添加到属性文件中以启用日志记录

logging.level.org.apache.http.wire=DEBUG
logging.level.com.github.tomakehurst.wiremock=DEBUG
Run Code Online (Sandbox Code Playgroud)

但是,当请求发送到wiremock服务器时,我在控制台上看不到任何可见的日志。我500 Internal Server Error只得到特定的平台。因此,为了排除故障,我尝试在请求到达wiremock服务器时拦截活动。

在我的 pom 文件中

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
</dependency>

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-contract-stub-runner</artifactId>
  <scope>test</scope>
</dependency>

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-webflux</artifactId>
  <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我还尝试添加logback-test.xml包含以下内容的文件。但是,这也没有记录任何内容。

<logger name="com.github.tomakehurst.wiremock" level="DEBUG"/> 
<logger name="wiremock.org" level="DEBUG"/> 
<logger name="WireMock" level="DEBUG"/> 
<logger name="/" level="DEBUG"/> 
Run Code Online (Sandbox Code Playgroud)

我的测试班

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT,
    classes = MyApplication.class)
@AutoConfigureMockMvc
@TestPropertySource(
    locations = "/application-integration-test.properties"
)
@AutoConfigureWireMock(port = 0)
@AutoConfigureWebTestClient(timeout = "100000")
public class MyApplicationTest {

  private WebTestClient client;

  @LocalServerPort
  private int port;


  @Before
  public void …
Run Code Online (Sandbox Code Playgroud)

java logging spring-test wiremock spring-cloud-contract

3
推荐指数
1
解决办法
2331
查看次数

Spring Cloud Contract DSL指定路径参数

我正在尝试为GET请求创建合同,并且我想使用path参数,该参数也可以在响应中重用。这是可能吗?我只能找到POST,查询参数和正文的示例。因此,如果我想定义一个请求实体的合同,即/ books / 12345-6688,则想在响应中重用指定的ID。

如何为这样的合同创建合同?

java dsl spring spring-cloud-contract

2
推荐指数
1
解决办法
2197
查看次数

为什么使用 Spring Cloud Contract 在 Gradle、Kotlin、Spring Boot 应用程序中compileTestGroovy 失败

Spring Cloud Contract Gradle 插件 (2.0.2.RELEASE)

我的Kotlin项目是一个带有合同文件的Spring Boot 2.0.5.RELEASE应用程序,并且基本测试类成功生成了一个文件,打开该文件表明 IntelliJ 对该文件感到满意,但运行失败Groovysrc/test/resources/contractscom.mycompany.practice.base.producer.PracticeMessagingBaseContractVerifierTest./gradlew clean buildcompileTestGroovy

> Task :compileTestGroovy FAILED
file or directory '/Users/abc/Documents/code/dev/practice-service/src/test/groovy', not found
file or directory '/Users/abc/Documents/code/dev/practice-service/src/test/groovy', not found
Task ':compileTestGroovy' is not up-to-date because:
  Task has failed previously.
Excluding []
file or directory '/Users/abc/Documents/code/dev/practice-service/src/test/groovy', not found
Starting process 'Gradle Worker Daemon 1'. Working directory: /Users/abc/.gradle/workers Command: /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java -Djava.security.manager=worker.org.gradle.process.internal.worker.child.BootstrapSecurityManager -Dfile.encoding=UTF-8 -Duser.country=GB -Duser.language=en -Duser.variant -cp /Users/abc/.gradle/caches/4.7/workerMain/gradle-worker.jar worker.org.gradle.process.internal.worker.GradleWorkerMain 'Gradle Worker Daemon 1' …
Run Code Online (Sandbox Code Playgroud)

spring-cloud-contract

2
推荐指数
1
解决办法
5335
查看次数

Spring Cloud Contract:多个控制器

我有一个 spring 云合同基础测试类:

public abstract class TestsBase {

    @Autowired
    protected MyFirstController myFirstController;
    ...

    RestAssuredMockMvc.standaloneSetup(myFirstController);
}
Run Code Online (Sandbox Code Playgroud)

这个类在我的 maven 插件配置中被引用如下:

<plugin>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-contract-maven-plugin</artifactId>
    <version>${spring-cloud-contract.version}</version>
    <extensions>true</extensions>
    <configuration>
      <basePackageForTests>com.contracts.basepackage</basePackageForTests>
      <baseClassForTests>com.contracts.basepackage.TestsBase</baseClassForTests>
    </configuration>
  </plugin>
Run Code Online (Sandbox Code Playgroud)

我需要在MySecondController此设置中添加第二个控制器。只是添加

RestAssuredMockMvc.standaloneSetup(mySecondController);
Run Code Online (Sandbox Code Playgroud)

不起作用。知道我如何实现这一目标吗?我还没有在任何地方找到解决方案。

java spring-boot spring-cloud-contract

1
推荐指数
1
解决办法
744
查看次数