我正在努力为 springboot Rest api 设置wiremock,并使用 spring cloud 中的放心和 spring-cloud-starter-contract-stub-runner 。当我运行示例集成测试时,我遇到模块冲突错误
我有一个使用Feign客户端的课程.之前我使用过Mockito并为Feign客户端中的每个方法调用提供了存储响应.现在我想使用WireMock,以便我可以看到我的代码正确处理不同类型的响应代码.我该怎么做呢?我无法弄清楚如何在测试中连接我的Feign客户端,并将其连接起来,以便它使用Wiremock而不是我在我的application.yml文件中设置的URL .任何指针都将非常感激.
我已经有效地使用了 wiremock 一段时间了,我想启用对模拟 API 的 CORS 访问。
我试过在响应头中设置 Access-Control-Allow-Origin: * 和其他头,但都无济于事。
这是我拥有的映射示例:
{
"request": {
"method": "POST",
"urlPattern": "/api/v2/general/login[\\/\\&\\?]*",
"bodyPatterns": [{
"equalToJson": "{\"password\":\"password\",\"username\":\"john@cougar.com\"} ",
"jsonCompareMode": "LENIENT",
"ignoreArrayOrder" : true,
"ignoreExtraElements" : true
}]
},
"response": {
"status": 200,
"headers": {
"Content-Type": "application/json",
"Access-Control-Allow-Origin" : "*",
"Access-Control-Allow-Methods" : "*",
"Access-Control-Allow-Headers": "Accept, Content-Type, Content-Encoding, Server, Transfer-Encoding",
"X-Content-Type-Options" : "nosniff",
"x-frame-options" : "DENY",
"x-xss-protection" : "1; mode=block"
},
"bodyFileName": "/login_response_johncougar.json"
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么导致 CORS 不起作用?
提前致谢。
我试图使用Wiremock Standalone服务器实现POST REST调用的模拟.我面临这样的挑战,假设帖子正文包含一个"名称"字段及其值,应该在该POST调用的响应中返回相同的值.我的json文件如下所示:
{
"priority": 1,
"request": {
"method": "POST",
"urlPath": "/primeSlots",
"bodyPatterns" : [ {
"matchesJsonPath" : "{ \"things\": [ { \"name\": \"794363\" }]
}"
} ]
},
"response": {
"status": 200,
"body": "{{$.things.name.value}}",
"transformers": ["response-template"]
}
}
Run Code Online (Sandbox Code Playgroud)
所以,我需要获得值,即794363,但使用上述方法无法在post响应体中获取它.
我也试过这个:
{
"request": {
"method": "POST",
"urlPath": "/transform",
"bodyPatterns": [
{
"matchesJsonPath" : "$.things[?(@.name =~ /[0-9]+/i)]"
}
]
},
"response": {
"status": 200,
"body": "{\"responseName\": \"
{{request.body.things.name.value}}\"}",
"headers": {
"Content-Type": "application/json"
},
"transformers": ["body-transformer"]
}
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,即使我使用的regEx与请求中的任何数字相匹配,如何使用Wiremock独立的json文件在响应中返回相同的数字?谢谢.
我试图找到一种方法来通过WireMock. WireMock很容易模拟任何相对 URL,但是如果我们想要拦截从我们的节点发送到某个 3rd 方服务并返回预定义响应的 REST 调用呢?有没有可能做到这一点?
我在合同中定义了查询参数。我需要这个参数是可选的:
method 'GET'
url($(regex(urlRegex))) {
queryParameters {
parameter 'fitler': $(stub(regex(filterRegex)))
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这个合同适用于带有过滤器的 URL/my/sample/url?fitler=some-filter-expression和不带过滤器参数的URL /my/sample/url。
我怎样才能做到这一点?这甚至可能吗?
我有一个Spring Boot测试,它使用wiremock来模拟外部服务.为了避免与并行构建冲突,我不想为wiremock设置固定端口号,并且希望依赖其动态端口配置.
该应用程序使用application.yml中external.baseUrl设置的property()(在src/test/resources下).但是我找不到以编程方式覆盖它的方法.我尝试过这样的事情:
WireMockServer wireMockServer = new WireMockServer();
wireMockServer.start();
WireMock mockClient = new WireMock("localhost", wireMockServer.port());
System.setProperty("external.baseUrl", "http://localhost:" + wireMockServer.port());
Run Code Online (Sandbox Code Playgroud)
但它不起作用,而是使用application.yml中的值.我看过的所有其他解决方案都使用静态值覆盖属性(例如在某些注释中),但在运行测试之前我不知道wiremock端口的值.
澄清:
弹簧引导和线缆都在随机端口上运行.那很好,我知道如何获得两个端口的价值.然而,wiremock应该模拟外部服务,我需要告诉我的应用程序如何到达它.我和这家external.baseUrl酒店一起做.我想在测试中设置的值当然取决于线程端口号.我的问题是如何在Spring启动测试中以编程方式设置属性.
我们有一个 Spring Boot 2.2.0.RELEASE 应用程序,我们正在使用 WireMock 使用 JUnit 5 测试类对其进行测试。测试在本地运行良好,但在我们的 Jenkins 上,它在测试成功运行后失败并显示“地址已在使用中”消息。
这是我们的 spring 依赖项pom.xml:
<properties>
<java.version>11</java.version>
<spring-cloud.version>Hoxton.RC2</spring-cloud.version>
<spring-cloud-stream.version>3.0.0.RC2</spring-cloud-stream.version>
<openapi.codegen.maven.plugin.version>4.1.2</openapi.codegen.maven.plugin.version>
<jacoco-maven-plugin.version>0.8.4</jacoco-maven-plugin.version>
</properties>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-kafka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<!-- Utils -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator</artifactId>
<version>${openapi.codegen.maven.plugin.version}</version>
</dependency>
<!-- Testing -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion> …Run Code Online (Sandbox Code Playgroud) 我正在使用 WireMock 运行 JUnit 测试用例。嵌入式 Jetty 服务器配置如下。
@Before
public void setup() {
final ResponseTemplateTransformer theTemplateTransformer =
new ResponseTemplateTransformer(false);
templateTransformerName = theTemplateTransformer.getName();
mWireMockServer = new WireMockServer(
WireMockConfiguration
.options()
.notifier(new ConsoleNotifier(false))
.extensions(theTemplateTransformer));
mWireMockServer.start();
}
Run Code Online (Sandbox Code Playgroud)
仅该方法的输出setup()就非常冗长,大约有 200 行长。它是这样开始的:
> Task :processResources
> Task :classes
> Task :compileTestJava
> Task :processTestResources
> Task :testClasses
> Task :test
log4j: Threshold ="null".
log4j: Level value for root is [DEBUG].
log4j: root level set to DEBUG
log4j: Class name: [org.apache.log4j.ConsoleAppender]
log4j: Setting property [immediateFlush] to …Run Code Online (Sandbox Code Playgroud) 当我尝试执行mvn clean install. 作为构建的一部分,我们编译多个组件,最后使用wiremock 执行功能测试。它应该从功能测试配置文件中选择特定配置,并且应该从 application.properties 文件中选择默认属性。但由于某种原因,相同的代码无法找到这些文件中提到的属性。所以,只是想知道是否可以以某种方式获取在wiremock 期间加载的属性文件列表?这将提供一些线索,说明为什么没有选择预期的属性文件?
所有属性文件都位于内部:
src/main/resources
Run Code Online (Sandbox Code Playgroud)
并且,从测试课开始。
@ContextConfiguration(classes = SampleFTConfiguration.class)
public class SampleControllerTest{
//test method
}
@ComponentScan("com.xxx.xxx.xxx.ft")
@PropertySource("classpath:application-test.properties")
public class SampleFTConfiguration{
}
Run Code Online (Sandbox Code Playgroud)
注意:我不希望任何人解决这个问题,我只想知道,我们是否可以获得加载的属性文件的名称?