网络异常轻松Mock

达芬奇密码2018-07-19 09:52

作为一个服务端QA,服务端各端交互复杂,各端互相依赖,测试用例中经常会涉及到一些网络异常情况下的验证,其中网络延迟网络断链等场景会经常出现。通常我们的做法是提单申请TC、iptables等工具的使用权限,使用工具来模拟网络异常,使用非常不方便,且有些依赖第三方需要第三方模块配合进行网络异常模拟。

WireMock作为一款Mock工具,不仅仅提供普通的接口Mock,同时提供了一些异常场景的模拟,通过简单的配置即可完成一些简单网络异常的模拟,使用相当方便。

使用WireMock可以模拟网络延迟,及网络错误等异常情况。

网络延迟

通常我们在模拟网络延迟时会针对某些依赖服务进行延迟模拟,同时也会针对某些接口进行网络延迟模拟,WireMock不仅提供可Mock功能而且提供了代理功能,对此我们分以下场景分开进行模拟:

  • 接口Mock+网络延时模拟:

测试接口如下:

GET /lbs?version=1.0

在MockServer(此处测试使用的是独立进程MockServer形式)中添加接口规则,Mock接口并设置延迟参数,具体配置规则如下:

{
  "request" : {
    "url" : "/lbs?version=1.0",
    "method" : "ANY"
    },
  "response" : {
    "status" : 200,
    "fixedDelayMilliseconds": 2000
  }
}

上述示例中将请求接口Mock掉直接返回200,并设置延迟2s返回。

  • 接口回源+网络延时模拟:

使用过程中如果你仅仅借助Mock来进行网络模拟,所有请求直接回源,不需要进行必要的接口Mock,那么可以使用如下代理的方式。

配置规则如下:

{
  "request" : {
    "url" : "/lbs?version=1.0",
    "method" : "ANY"
    },
  "response" : {
    "proxyBaseUrl": "http://source.url.com/test",
    "fixedDelayMilliseconds": 2000
  }
}
  • 全局延迟设置:

如果在测试过程中需要模拟第三方服务所有的接口进行延时异常模拟,那么你有两种选择方式,一种是设置规则将请求全部回源,并设置延时,具体如下:

{
  "request" : {
    "url" : ".*",
    "method" : "ANY"
    },
  "response" : {
    "proxyBaseUrl": "http://source.url.com/test",
    "fixedDelayMilliseconds": 2000
  }
}

另外一种方式是对WireMock Server进行全局设置,WireMock 提供了如下接口,可以设置Server配置:

http://<host>:<port>/__admin/settings

通过上述接口进行POST如下参数:

{
    "fixedDelay": 500
}

设置成功后,访问Server会进行相应的延时。

错误响应

WireMock 不仅提供简单的网络延时mock,同时还提供了一些错误响应的模拟,如常见的空body,响应过程中连接断开等情况,这些功能让我们模拟类似异常情况非常方便,同上述模拟网络延迟一样,我们可以针对部分接口进行模拟,同时也可以通过代理方式将接口回源,mock所有回源接口的错误响应。

  • 使用示例如下:
{
    "request": {
        "method": "GET",
        "url": "/test/fault"
    },
    "response": {
        "fault": "MALFORMED_RESPONSE_CHUNK"
    }
}

上述是针对一个接口进行相应错误响应的mock。其中响应中的fault参数公有三个选项可以设置,具体选项如下:

EMPTY_RESPONSE:返回完全空的响应。
MALFORMED_RESPONSE_CHUNK:仅向客户端发送OK状态及Header数据然后关闭连接。
RANDOM_DATA_THEN_CLOSE:随机响应部分数据,并断开连接。

以上便是通过WireMock可以方便进行的一些异常情况的模拟,通过WireMock进行网络模拟简便快捷,无需申请特殊服务的权限,去除繁琐的异常模拟工具使用,且WireMock服务简单易学,值得我们去学习使用。

本文来自网易实践者社区,经作者刘成授权发布。