charles mock接口_charles mock接口


现在,WEB系统的开发一般都采用前后端分离的架构,以及部分公司采用“前台-中台-后台“的组织架构,难免会出现开发进度不一致的情况,导致系统联调或测试需要等到所有依赖开发完成后才能够进行,为不影响软件开发、测试进度,消除等待浪费,因此引入了Mock服务。

本文主要介绍的Mock工具是Wiremock(一种开源的测试工具,Mock工具有很多种),其支持HTTP响应存根、请求验证、配置响应延迟、代理/拦截、录制和回放。

常见的Mock应用场景有如下几个:

  1. 依赖接口尚未开发完成,需要进行接口联调或自动化测试开发;
  2. 接口返回不满足目前需求,目前的接口虽然已实现,但个别字段/返回不满足目前的测试要求。

同时注意不要过于的依赖Mock接口服务。当实际接口开发完成后,测试人员需要对实际接口重新进行测试,避免出现实际接口与Mock接口不一致等情况,影响产品质量。同时可以延伸了解下契约测试,其测试理念有助于我们正确的理解Mock服务应用。接下来介绍WireMock的具体使用。


Wiremock安装


charles mock接口_属性值_02


最新下载地址(需要Java JDK环境):

http://repo1.maven.org/maven2/com/github/tomakehurst/wiremock-standalone/2.21.0/wiremock-standalone-2.21.0.jar

官网地址:

http://wiremock.org/

Github地址:

https://github.com/tomakehurst/wiremock

WireMock启动


charles mock接口_JSON_03


在命令行中运行:

java -jar wiremock-standalone-2.21.0.jar -port 9999 --verbose

启动后在该目录下生成__files 和 mappings两个空的文件夹,如下图。

  • __files :是存放上传、下载、录制文件;
  • mappings :存放request、response、url映射等信息;


charles mock接口_属性值_04


举一个简单例子,我们在对应目录下分别创建如下两个文件。


charles mock接口_jar_05


文件内容如下,然后我们再次运行启动命令,加载该mock服务。(注意,添加修改mapping文件后,需要重启服务才能生效。)


charles mock接口_mock测试_06

TouTiao.json


charles mock接口_mock测试_07

TouTiao_Detail.json


此时,在浏览器中输入http://localhost:9999/api/toutiao/,会看到该接口的响应内容,如下图,此时我们完成了/api/toutiao/接口的Mock服务创建。


charles mock接口_charles mock接口_08


同时也支持xml等格式请求、响应体,如下。


charles mock接口_mock测试_09


charles mock接口_mock测试_10



Wiremock服务创建

接下来主要介绍在创建WireMock服务的时候,常用的几种方法,主要分为两部分(更多方法可参考WriemocK官网)。

  • URL匹配方式
  • 请求体/响应体匹配方式

URL匹配方式-精确匹配


charles mock接口_jar_11


charles mock接口_属性值_12


URL匹配方式-模糊匹配(正则匹配)

如果URL符合正则匹配规则,则视为匹配。


charles mock接口_jar_13


charles mock接口_mock测试_14


请求体/响应体匹配-字符串相等

如果属性值等于预期值,则视为匹配。


charles mock接口_jar_15


charles mock接口_jar_16


请求体/响应体匹配-JSON相等


charles mock接口_属性值_17


charles mock接口_mock测试_18


请求体/响应体匹配-JSON属性包含(多级嵌套JSON)

如果属性存在于JSON中,则视为匹配。


charles mock接口_charles mock接口_19


charles mock接口_mock测试_20


请求体/响应体匹配-JSON属性值相等(多级嵌套JSON)

如果属性值等于预期值,则视为匹配。


charles mock接口_jar_21


charles mock接口_jar_22


若对你有所帮助,欢迎大家评论、留言。