接口测试 疑问:” 接口测试:为没开发完成的 url 地址 mock 一个响应,url 只能通过 localhost 连接到却不能用本地 ip 访问

oly · 2018年03月26日 · 最后由 among 回复于 2018年03月26日 · 3275 次阅读

主题:为没开发完成的接口做 mock,url 只能通过 localhost 连接到却不能用本地 ip 访问

目的:为一个不具有响应能力的接口,mock 一个响应,伪造测试接口的响应。
例如:
现在需要对 Aip:8088/services(运行 mock 程序在机器 A)发起请求,我需要在这个响应信息里面写入信息。

现在的问题是:
我想让别人远程调用, Aip 只能用 localhost ,修改为我本地 ip:192.168.46.12 地址之后接口响应链接超时。

pom.xml


<!--mock自定义测试模块-->
       <!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/mockwebserver -->
       <dependency>
           <groupId>com.squareup.okhttp3</groupId>
           <artifactId>mockwebserver</artifactId>
           <version>3.6.0</version>
           <scope>test</scope>
       </dependency>

testng 测试方法


    @Test
    public void testName() throws Exception {
        /*
        https://github.com/square/okhttp/tree/master/mockwebserver
         https://www.jianshu.com/p/7dc3d12ac67f
         */
        MockResponse mockResponse = new MockResponse();
        mockResponse.setHeader("Content-Type", "application/json");
        mockResponse.setHeader("Connection", "keep-alive");
        mockResponse.setHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:48.0) Gecko/20100101 Firefox/48.0");
        mockResponse.setHeader("Host", "192.168.46.12");
//        mockResponse.setBody("{\"flag\":\"success\",\"message\":\"\"}");
//        mockResponse.setBodyDelay(5, TimeUnit.SECONDS);
//        server.enqueue(mockResponse);
//        server.setDispatcher(new QueueDispatcherImpl());
        server.setDispatcher(new QueueDispatcher() {
            @Override
            public MockResponse dispatch(RecordedRequest request) throws InterruptedException {
                switch (request.getMethod().toLowerCase()) {
                    case "post":
                        return new MockResponse().addHeader("aa", "1S").setBody("{\"flag\":\"success\",\"message\":\"\"}").setResponseCode(200);
                    case "get":
                        return new MockResponse().addHeader("aa", "2S").setBody("{\"flag\":\"faillure\",\"message\":\"\"}").setResponseCode(200);
                    default:
                        return new MockResponse().setResponseCode(400);
                }
            }
        });
        server.start(8088);
        server.url("/services");
        TimerOparation.sleep(3000);
    }

现在的解决思路:改一个 start 函数的写法

        server.start(InetAddress.getByName("192.168.46.12"),8088);//localhost 不可访问,ip可访问
//        server.start(InetAddress.getByName("host"),8088);//localhost 可访问,ip不可访问

也不行

共收到 8 条回复 时间 点赞
oly #1 · 2018年03月26日 Author

解决思路:
现在的解决思路:改一个 start 函数的写法

server.start(InetAddress.getByName("192.168.46.12"),8088);//localhost 不可访问,ip 可访问
// server.start(InetAddress.getByName("host"),8088);//localhost 可访问,ip 不可访问

这是可以通过的,有么有更好的方式?

绑定 0.0.0.0 这个地址就好。

绑定 0.0.0.0,服务器创建 tcp 监听套接字绑定 INADDR_ANY,不管数据是从哪个网卡过来的,只要是绑定的端口号过来的数据,都可以接收到。

3、4 楼正解!

绑定 0.0.0.0,不管你电脑几个网卡,都能解析到

oly #2 · 2018年03月26日 Author

多谢各位大侠: server.start(InetAddress.getByName("0.0.0.0"), 8088); //localhost 可访问,ip 可访问

设置 0.0.0.0 是对的,看看对应的监听端口有没有启动。另外看看网络防火墙有没有阻止。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册