共计 5099 个字符,预计需要花费 13 分钟才能阅读完成。
本文霍格沃兹测试学院学员学习实际笔记。
一、利用背景
因为本章的内容是应用 jq
工具配合实现,因而在开始局部会先花肯定的篇幅介绍 jq
机器应用,如果读者曾经相熟jq
,能够间接跳过这部分。
先来看利用场景,App 常常会有一些信息展现的列表页,比方商家的菜品、股票的公司、文章的列表展现等,例如上面这样:
菜品不够吃的话~ 不是,是菜品数量较少不够测试的量,如果咱们想要测试几百个菜品时,会不会在刷的时候是否有 性能影响
, 展现
是否失常,列表展现的 边界值
测试等;
而要测就得有数据展现,这个时候要是通过后端去找或者造这么多数据是有点麻烦的, 其实咱们这个测试的测试点就是要测试前端页面的展现和性能,只有有这部分数据就能够,无所谓数据是否实在从数据库得来。
这个时候能够就能够利用 mock
的伎俩,对这种大数据进行等价类的生成,使前端能够拿到这类数据即可,而 Charles
正是咱们实现手工 mock
测试的利器之一!
二、jq 简介
2.1 jq 的概述与用处
按常规,先看官网对 jq
的解释:
jq 官网地址:https://stedolan.github.io/jq/
大略意思就是轻量灵便的 Json
解决命令行。
用处
说到这大略有些人有点感觉它能用来做什么了,为啥手工 mock
要应用 jq
了?没错!要用它来解决接口返回的 json
数据以达到 mock
的成果。
2.2 jq 的下载安装
Mac:Mac 还是判若两人的简略 (香~),装了Homebrew
的话一条命令 brew install jq
即可
其余零碎:jq 的官网很贴心,给出了各个系统的下载方式及其相干所需下载工具的链接,具体的就查看官网吧,链接如下
https://stedolan.github.io/jq…
2.3 jq 的根本应用
- 根本过滤
.
最简略的过滤,
.
这是一个过滤器,它承受输出,并将其不变地生成为输入。
简略的说就是原样输入来:
$ echo '{"jq":"jqTest"}' | jq '.'
{"jq": "jqTest"}
- 对象过滤
.key
、.key1.key2
、.["key"]
能够通过
.key
或.key1.key2
的形式来获取对应的value
,这样的形式是不是有点像jsonpath
?
$ echo '{"jq": {"jqTest": 1} }' | jq '.jq'
{"jqTest": 1}
$ echo '{"jq": {"jqTest": 1} }' | jq '.jq.jqTest'
1
$ echo '{"jq": {"jqTest": 1} }' | jq '.["jq"]'
{"jqTest": 1}
- 索引过滤
.key[index]
、.key[startIndex: endIndex]
其实就是在
对象过滤
的根底上加个索引
而已,学过编程的都懂的~左闭右开
,当然是针对数组的操纵,
这里就以一种对象过滤写法根底上举例子,.key[index]
$ echo '{"jq": ["jqTest",1] }' | jq '.jq[0]'
"jqTest"
.key[startIndex: endIndex]
$ echo '{"jq": ["jqTest",1] }' | jq '.jq[0:1]'
["jqTest"]
- 对象构建
{}
、[]
能够利用 {}、[] 构建新的对象(数组)
$ echo '{"jq": ["jqTest",1] }' | jq '{newJq: .jq[1], }'
{"newJq": 1}
如果其中一个表达式有多个后果,那么输入也会产生多个后果
$ echo '{"user":"stedolan","titles":["JQ Primer","More JQ"]}' |jq '{user, title: .titles[]}'
{
"user": "stedolan",
"title": "JQ Primer"
}
{
"user": "stedolan",
"title": "More JQ"
}
如果 key
是不存在的,value
将会赋值为null
$ echo '{"user":"stedolan","titles":["JQ Primer","More JQ"]}' |jq '{user111, title: .titles[]}'
{
"user111": null,
"title": "JQ Primer"
}
{
"user111": null,
"title": "More JQ"
}
如果再键的四周加括号就意味着它将作为表达式进行计算。
$ echo '{"user":"stedolan","titles":["JQ Primer","More JQ"]}' |jq '{(.user): .titles[]}'
{"stedolan": "JQ Primer"}
{"stedolan": "More JQ"}
- 其余常见用法:
计算
echo "10" | jq '(.+2)*5'
echo null | jq '{a: 1} + {b: 2} + {c: 3} + {a: 42}'
echo '["xml","yaml","json"]' | jq '. - ["xml"]'
echo '{"a":5}' | jq‘.a+=10'
获取长度
echo '[[1,2],"string", {"a":2}, null]' | jq '.[] | length’
- 数组运算
这里要特地介绍一下数组的运算操作,也是上面实现目标的伎俩
jq
对于数组能够有并集 (’+’) 和差集 (’-’) 的操作:
并集 ('+')
:有数组a
,b
; a+b
就会失去一个 蕴含所有 a
,b
数组元素的新数组:
$ echo '{"a": [1,2,3] ,"b": [3,4,5]}' | jq '.a+.b'
[
1,
2,
3,
3,
4,
5
]
差集 ('-')
:有数组a
,b
; a-b
就会失去一个 只蕴含 a
中元素,不蕴含 b
中元素的新数组:
$ echo '{"a": [1,2,3] ,"b": [3,4,5]}' | jq '.a-.b'
[
1,
2
]
- 更多用法
更多用法可参考官网:
https://stedolan.github.io/jq…
3、Mock 实现
3.1 实现目标
如下图中的科普举荐栏目中有 2 则科普文章,当初想要 mock
几十甚至上百篇文章或广告。
3.2 数据筹备
- 抓取接口的响应
json
报文如下:
{
"code": 1,
"msg": null,
"data": {
"pageNumber": 0,
"pageSize": 10,
"totalElements": 12,
"totalPages": 2,
"pageList": [{
"id": 18,
"title": "老年痴呆症有哪些危害?",
"type": "patient",
"img": "https://greenvalley.oss-cn-shanghai.aliyuncs.com/hospital/a295c2081459450ba6679db48d6a2471_700_360.png",
"content": "<p>https://fx.wxbjq.net.cn/preview/6cAH</p>"
}, {
"id": 17,
"title": "你理解老年痴呆是如何发病的嘛?",
"type": "patient",
"img": "https://greenvalley.oss-cn-shanghai.aliyuncs.com/hospital/953fc541af7b4576b233d2d6b364bddf_700_360.png",
"content": "<p>https://fx.wxbjq.net.cn/preview/6cAK</p>"
}]
}
}
- 咱们将数据存入 json 文件中,而后赋值给一个变量
$ mockData=$(cat /tmp/guanggao.json)
$ echo "$mockData"
{
"code": 1,
"msg": null,
"data": {
"pageNumber": 0,
"pageSize": 10,
"totalElements": 12,
"totalPages": 2,
"pageList": [{
"id": 18,
"title": "老年痴呆症有哪些危害?",
"type": "patient",
"img": "https://greenvalley.oss-cn-shanghai.aliyuncs.com/hospital/a295c2081459450ba6679db48d6a2471_700_360.png",
"content": "<p>https://fx.wxbjq.net.cn/preview/6cAH</p>"
}, {
"id": 17,
"title": "你理解老年痴呆是如何发病的嘛?",
"type": "patient",
"img": "https://greenvalley.oss-cn-shanghai.aliyuncs.com/hospital/953fc541af7b4576b233d2d6b364bddf_700_360.png",
"content": "<p>https://fx.wxbjq.net.cn/preview/6cAK</p>"
}]
}
}
- 而后咱们利用
jq
对pageList
中的列表进行+=
操作,实现一次翻倍增长,将后果传给变量mockData
。
这里用到的是
jq
对数组的并集 (‘+’) 运算
,两个数组相加,最终失去一个蕴含两个数组所有元素的新数组。
mockData=$(echo "$mockData" | jq '.data.pageList+=.data.pageList')
$ echo "$mockData"
{
"code": 1,
"msg": null,
"data": {
"pageNumber": 0,
"pageSize": 10,
"totalElements": 12,
"totalPages": 2,
"pageList": [
{
"id": 18,
"title": "老年痴呆症有哪些危害?",
"type": "patient",
"img": "https://gv.oss-cn-shanghai.aliyuncs.com/hospital/a295c2081459450ba6679db48d6a2471_700_360.png",
"content": "<p>https://fx.wxbjq.net.cn/preview/6cAH</p>"
},
{
"id": 17,
"title": "你理解老年痴呆是如何发病的嘛?",
"type": "patient",
"img": "https://gv.oss-cn-shanghai.aliyuncs.com/hospital/953fc541af7b4576b233d2d6b364bddf_700_360.png",
"content": "<p>https://fx.wxbjq.net.cn/preview/6cAK</p>"
},
{
"id": 18,
"title": "老年痴呆症有哪些危害?",
"type": "patient",
"img": "https://gv.oss-cn-shanghai.aliyuncs.com/hospital/a295c2081459450ba6679db48d6a2471_700_360.png",
"content": "<p>https://fx.wxbjq.net.cn/preview/6cAH</p>"
},
{
"id": 17,
"title": "你理解老年痴呆是如何发病的嘛?",
"type": "patient",
"img": "https://gv.oss-cn-shanghai.aliyuncs.com/hospital/953fc541af7b4576b233d2d6b364bddf_700_360.png",
"content": "<p>https://fx.wxbjq.net.cn/preview/6cAK</p>"
}
]
}
}
依照上述的办法,每次列表的元素个数都会翻倍,也就是 操作 n 次
就变成 2 的 n 次方倍
,指数增长的速度就不必多说了~
这样依据本人的须要失去数据后将新数据存入 json
文件,最重要的数据筹备过程也就实现了:
$ echo "$mockData" > /tmp/MockTest.json
3.3 Charles 的 Mock 实现
说了这么多“废话”,总算是到了配角了,其实数据筹备好了,工具的应用还是很简略的,Charles
有一个叫做 Map Local
的性能,在你要 mock
的申请上右击就可找到:
Map Local
能够对指定的接口返回应用本地文件进行替换,如这里替换为上文中废话半天生成的数据文件MockTest.json
:
而后再次刷新页面,看看成果,页面的列表就如愿倍增了,也不必去数据库增加数据,保留一份 json
文件即测即用即可:
以上,期待大家一起交换,多多斧正。
收费支付:接口测试 + 性能测试 + 自动化测试 + 测试开发 + 测试用例 + 简历模板 + 测试文档