使用WireMock"伪造"服务接口

    在前后端分离的开发模式下,后端的接口可能还没开发完成,但是前端开发又要用到,这时可以使用wiremock来"伪造"服务接口提供,这个"伪造"的接口和真正的接口API是一致的,只是真假数据之分,下面介绍下使用过程:

    1.  下载WireMock

        

        然后启动( java -jar wiremock-standalone-2.18.0.jar --port 3298 ),如下:

        

    2. 项目中增加wiremock的maven依赖

        <dependency>
            <groupId>com.github.tomakehurst</groupId>
            <artifactId>wiremock</artifactId>
        </dependency>

        注意到这里没有写版本号,因为这里用到了spring的io platform,它会自动选择项目每个依赖的兼容性最好的版本,确保依赖之间不会冲突:    

            <dependency>
                <groupId>io.spring.platform</groupId>
                <artifactId>platform-bom</artifactId>
                <version>Brussels-SR4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

    3. 代码编写,这里新建一个包(cn.linjk.wiremock)来专门处理"伪造服务",它作为一个客户端,去连接第一步启动的wiremock服务,去配置wiremock服务如何响应客户端的请求

package cn.linjk.wiremock;

import com.github.tomakehurst.wiremock.client.WireMock;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.core.io.ClassPathResource;

import java.io.IOException;

public class MockServer {
    public static void main(String[] args) throws IOException {
        WireMock.configureFor("127.0.0.1", 3298);
        WireMock.removeAllMappings(); // 清空原来配置

        mock("/user/1", "getUserByIdResponse.json");
    }

    private static void mock(String url, String fileName) throws IOException {
        ClassPathResource resource = new ClassPathResource("mock/response/" + fileName);
        String content = StringUtils.join(FileUtils.readLines(
                resource.getFile(), "UTF-8"), "\n");
        WireMock.stubFor(
                // 收到/user/1请求时的处理
                WireMock.get(WireMock.urlEqualTo(url))
                        .willReturn(
                                WireMock.aResponse()
                                        // 返回的状态码
                                        .withStatus(200)
                                        // 返回的JSON串
                                        .withBody(content)));
    }
}

    在src/main/resources目录下添加json响应文件:

    

    然后运行这个MockServer类,发生如下错误:

    

    添加缺失的pom依赖:

            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
            </dependency>

    再次启动,请求数据如下:

    

    数据一致,因此后面可以使用这种方式去"伪造"服务供前端调用,关于WireMock更高级用法,可以参考其文档

    

猜你喜欢

转载自blog.csdn.net/linjingke32/article/details/80789105