MockLab:基于MockLab的第三方平台对接测试

本文介绍了MockLab的使用,它可以帮助测试人员在系统对接第三方平台时,模拟请求和响应,辅助测试。MockLab支持URL匹配、JSON和XML正文匹配、响应模板等功能,适合前端和后台开发人员进行接口测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、背景

现因系统需要对接各种第三方平台,但是因为:

  1. 需要检查发送给第三方的请求是否正确
  2. 在第三方未完成功能时,需要模拟桩来模拟第三方各种响应,代码做相应的处理
  3. 在测试环境时,无法对接到正式的代码,故需要模拟桩来模拟第三方

故使用MockLab来模拟第三方平台,辅助测试人员测试。

MockLab不仅仅可以应用于这些场景,还可以:

  1. 后台开发人员模拟第三方平台的响应来自测代码是否处理正确
  2. 前端开发人员可以模拟后台处理代码的响应来辅助前端页面开发

二、前言

MockLab是基于WireMock,类同于WireMock的在线版,地址为MockLab

MockLab需要注册账户并登录后才可以使用,且免费版对api的个数有要求,具体参考MockLab的说明文档。

详细内容可以参考说明文档。

三、简易流程

1.新增Mock API

 

输入APIname、hostname,保存即可。

 

2.新增API

输入name、url和response,保存即可。

 

3.发送请求测试

 

四、操作指导

4.1请求匹配

4.1.1匹配URLs

  • path :匹配URL的路径,不匹配查询部分
  • path + query:匹配URL的路径和查询部分

例如:匹配规则是

/my/path?q=abc&limit=10

        请求URL是

A:https://my-api.mocklab.io/my/path?q=abcB:https://my-api.mocklab.io/my/path?q=abc&limit=10C:https://my-api.mocklab.io/my/pathD:https://my-api.mocklab.io/my/path?randomqueryparam=123

如果匹配策略是path时,ABCD都可以匹配。

如果匹配测试是path + query时,B才可以匹配,ACD匹配失败。

  • Path regex使用正则表达式匹配URL的路径,不匹配查询部分
  • path + queryregex使用正则表达式匹配URL的路径和查询部分

例如:匹配规则是

/users/[0-9]+?q=[a-zA-Z]{1,4}&limit=10

        请求URL是

A:/users/1B:/users/9832749823?q=abc&limit=10C:/users/321?q=abcde&limit=10D: /users/9832749823?p=abc&limit=10

如果匹配策略是pathregex时,ABCD都可以匹配。

如果匹配测试是path + query regex时,B才可以匹配,ACD匹配失败。

  • Any URL:匹配任何请求URL,该情况下可以使用其他方式来匹配

4.1.2匹配JSON请求

equalToJson

仅当输入JSON中的所有元素都与期望的JSON相同,数组的顺序相同并且不存在其他元素时,才会匹配。字典中的元素顺序不会影响匹配。

可选择:

  • 忽略list顺序的差异:勾选后list的元素的顺序不影响匹配。
  • 忽略额外的对象属性:勾选后字典中多了额外的元素也不会影响匹配。

如果要检查是否存在某个元素,但是不在乎值是什么,则可以使用JSONUnit占位符语法来实现。使用${json-unit.ignore}时,元素的类型也将被忽略(除了其值之外)。

如果要将元素限制为特定类型,但仍然忽略该值,则可以使用以下占位符之一:

${json-unit.regex}[A-Z]+ (可以使用任何Java风格的正则表达式)${json-unit.any-string}${json-unit.any-boolean}${json-unit.any-number}

matchesJsonPath

允按照指定的Xpath路径去匹配元素。

可选择:

  • equalTo:仅当输入字符串恰好等于期望值时才匹配
  • Contains:如果输入字符串包含期望值,则匹配
  • Matches regex:将输入字符串与Java样式正则表达式匹配
  • Ispresent:当该元素存在,则匹配

常见的匹配示例:

1.按位置匹配特定数组元素

$.sizes[1] equal to M

将匹配:

{

  "sizes":["S", "M", "L"]

}

匹配通过另一个元素找到的对象的一个​​元素。

$.addresses[?(@.type == 'business')].postcode contains N11NN

将匹配:

{

  "addresses":[

{

      "type":"home",

      "postcode":"Z55ZZ"

},

{

      "type":"business",

      "postcode":"N11NN"

}

]

}

contains在此实例中必须使用包含查询部分(在[?和之间])的JSONPath表达式,该表达式将始终返回结果集合。

递归匹配匹配的元素。

$..postcode contains N11NN

将匹配:

{

  "addresses":[

{

      "type":"home",

      "postcode":"Z55ZZ"

},

{

      "type":"business",

      "postcode":"N11NN"

}

]

}

并且还将匹配:

{

"address":{

"type":"business",

"postcode":"N11NN"

}

}

4.1.3匹配XML正文

Xml和json的匹配方式有些类似。

equalToXml

匹配操作者进行对照预期XML输入XML的语义比较,它会忽略空白中的差异、忽略元素和属性顺序。如果所有元素和属性都存在,具有相同的值并且没有其他元素或属性,则默认情况下会将输入与期望的XML匹配。

如果要检查是否存在某个元素,但是不在乎值是什么,则可以使用XMLUnit占位符语法来实现。使用${xmlunit.ignore实现。

matchesXPath

允按照指定的Xpath路径去匹配元素。

常见的匹配示例:

按位置匹配元素

/things/thing[@name = 'socks']

将匹配:

{

"sizes":["S","M","L"]

}

匹配通过另一个元素找到的对象的一个​​元素。

$.addresses[?(@.type == 'business')].postcode contains N11NN

将匹配:

<things>
<thingname="socks"></thing>
<thingname="shoes"></thing>
<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值