最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

接口測試 Mock 實戰(zhàn)(二) | 結(jié)合 jq 完成批量化的手工 Mock

2022-09-15 18:03 作者:愛測軟件測試  | 我要投稿
本文霍格沃茲測試學(xué)院學(xué)員學(xué)習(xí)實踐筆記,進(jìn)階學(xué)習(xí)文末加群。

一、應(yīng)用背景

因為本章的內(nèi)容是使用jq工具配合完成,因此在開始部分會先花一定的篇幅介紹jq機器使用,如果讀者已經(jīng)熟悉jq,可以直接跳過這部分。

先來看應(yīng)用場景,App 經(jīng)常會有一些信息展示的列表頁,比如商家的菜品、股票的公司、文章的列表展示等,例如下面這樣:

菜品不夠吃的話~不是,是菜品數(shù)量較少不夠測試的量,假如我們想要測試幾百個菜品時,會不會在刷的時候是否有性能影響,展示是否正常,列表展示的邊界值測試等;

而要測就得有數(shù)據(jù)展示,這個時候要是通過后端去找或者造這么多數(shù)據(jù)是有點麻煩的,其實我們這個測試的測試點就是要測試前端頁面的展示和性能,只要有這部分?jǐn)?shù)據(jù)就可以,無所謂數(shù)據(jù)是否真實從數(shù)據(jù)庫得來。

這個時候可以就可以利用mock的手段,對這種大數(shù)據(jù)進(jìn)行等價類的生成,使前端可以拿到這類數(shù)據(jù)即可,而Charles正是我們實現(xiàn)手工mock測試的利器之一!

二、jq 簡介

2.1 jq 的概述與用途

按慣例,先看官網(wǎng)對jq的解釋:

jq 官網(wǎng)地址:stedolan.github.io/jq/

大概意思就是輕量靈活的Json處理命令行。

用途

說到這大概有些人有點感覺它能用來做什么了,為啥手工mock要使用jq了?沒錯!要用它來處理接口返回的json數(shù)據(jù)以達(dá)到mock的效果。

2.2 jq 的下載安裝

  • Mac:Mac還是一如既往的簡單(香~),裝了Homebrew 的話一條命令brew install jq即可

  • 其他系統(tǒng):jq 的官網(wǎng)很貼心,給出了各個系統(tǒng)的下載方式及其相關(guān)所需下載工具的鏈接,具體的就查看官網(wǎng)吧,鏈接如下

stedolan.github.io/jq/d


霍格沃茲-測試開發(fā):500G軟件測試資料免費領(lǐng)取,100+名企大廠崗位免費內(nèi)推0 贊同 · 0 評論文章0 贊同 · 0 評論文章


2.3 jq 的基本使用

  • 基本過濾?.

最簡單的過濾,.這是一個過濾器,它接受輸入,并將其不變地生成為輸出。

簡單的說就是原樣輸出來:

$ echo'{"jq": "jqTest"}' | jq '.'

{

"jq": "jqTest"

}

  • 對象過濾?.key、.key1.key2、.["key"]

可以通過.key或.key1.key2的方式來獲取對應(yīng)的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]

其實就是在對象過濾的基礎(chǔ)上加個索引而已,學(xué)過編程的都懂的~ 左閉右開,當(dāng)然是針對數(shù)組的操縱,這里就以一種對象過濾寫法基礎(chǔ)上舉例子,

.key[index]

$ echo'{"jq": ["jqTest",1] }' | jq '.jq[0]'

"jqTest"

.key[ startIndex: endIndex]

$ echo'{"jq": ["jqTest",1] }' | jq '.jq[0:1]'

[

"jqTest"

]

  • 對象構(gòu)建?{} 、[]

可以利用{} 、[]構(gòu)建新的對象(數(shù)組)

$ echo'{"jq": ["jqTest",1] }' | jq '{ newJq: .jq[1], }'

{

"newJq": 1

}

如果其中一個表達(dá)式有多個結(jié)果,那么輸出也會產(chǎn)生多個結(jié)果

$ 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"

}

如果再鍵的周圍加括號就意味著它將作為表達(dá)式進(jìn)行計算。

$ echo '{"user":"stedolan","titles":["JQ Primer", "More JQ"]}' |jq '{(.user): .titles[]}'

{

"stedolan": "JQ Primer"

}

{

"stedolan": "More JQ"

}

  • 其他常見用法

計算

echo"10" | jq '(.+2)*5'

echonull | 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’

  • 數(shù)組運算

這里要特別介紹一下數(shù)組的運算操作,也是下面實現(xiàn)目標(biāo)的手段

jq 對于數(shù)組可以有并集(’+’)和差集(’-’)的操作:

并集('+'):有數(shù)組a,b; a+b就會得到一個包含所有a,b數(shù)組元素的新數(shù)組:

$ echo'{"a": [1,2,3] ,"b": [3,4,5]}' | jq '.a+.b'

[

1,

2,

3,

3,

4,

5

]


差集('-'):有數(shù)組a,b; a-b就會得到一個只包含a中元素,不包含b中元素的新數(shù)組:

$ echo'{"a": [1,2,3] ,"b": [3,4,5]}' | jq '.a-.b'

[

1,

2

]

  • 更多用法

更多用法可參考官網(wǎng):

stedolan.github.io/jq/m

3、Mock 實現(xiàn)

3.1 實現(xiàn)目標(biāo)

如下圖中的科普推薦欄目中有 2 則科普文章,現(xiàn)在想要mock幾十甚至上百篇文章或廣告。

3.2 數(shù)據(jù)準(zhǔn)備

  • 抓取接口的響應(yīng)json報文如下:

{

"code": 1,

"msg": null,

"data": {

"pageNumber": 0,

"pageSize": 10,

"totalElements": 12,

"totalPages": 2,

"pageList": [{

"id": 18,

"title": "老年癡呆癥有哪些危害?",

"type": "patient",

"img": "greenvalley.oss-cn-shanghai.aliyuncs.com",

"content": "<p>fx.wxbjq.net.cn/preview</p>"

}, {

"id": 17,

"title": "你了解老年癡呆是如何發(fā)病的嘛?",

"type": "patient",

"img": "greenvalley.oss-cn-shanghai.aliyuncs.com",

"content": "<p>fx.wxbjq.net.cn/preview</p>"

}]

}

}

  • 我們將數(shù)據(jù)存入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": "greenvalley.oss-cn-shanghai.aliyuncs.com",

"content": "<p>fx.wxbjq.net.cn/preview</p>"

}, {

"id": 17,

"title": "你了解老年癡呆是如何發(fā)病的嘛?",

"type": "patient",

"img": "greenvalley.oss-cn-shanghai.aliyuncs.com",

"content": "<p>fx.wxbjq.net.cn/preview</p>"

}]

}

}

  • 然后我們利用jq對pageList中的列表進(jìn)行+=操作,完成一次翻倍增長,將結(jié)果傳給變量mockData。

這里用到的是jq對數(shù)組的并集(‘+’)運算,兩個數(shù)組相加,最終得到一個包含兩個數(shù)組所有元素的新數(shù)組。

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": "gv.oss-cn-shanghai.aliyuncs.com",

"content": "<p>fx.wxbjq.net.cn/preview</p>"

},

{

"id": 17,

"title": "你了解老年癡呆是如何發(fā)病的嘛?",

"type": "patient",

"img": "gv.oss-cn-shanghai.aliyuncs.com",

"content": "<p>fx.wxbjq.net.cn/preview</p>"

},

{

"id": 18,

"title": "老年癡呆癥有哪些危害?",

"type": "patient",

"img": "gv.oss-cn-shanghai.aliyuncs.com",

"content": "<p>fx.wxbjq.net.cn/preview</p>"

},

{

"id": 17,

"title": "你了解老年癡呆是如何發(fā)病的嘛?",

"type": "patient",

"img": "gv.oss-cn-shanghai.aliyuncs.com",

"content": "<p>fx.wxbjq.net.cn/preview</p>"

}

]

}

}


按照上述的方法,每次列表的元素個數(shù)都會翻倍,也就是操作n次就變成2的n次方倍,指數(shù)增長的速度就不用多說了~

這樣根據(jù)自己的需要得到數(shù)據(jù)后將新數(shù)據(jù)存入json文件,最重要的數(shù)據(jù)準(zhǔn)備過程也就完成了:

$ echo"$mockData" > /tmp/MockTest.json

3.3 Charles 的 Mock 實現(xiàn)

說了這么多“廢話”,總算是到了主角了,其實數(shù)據(jù)準(zhǔn)備好了,工具的使用還是很簡單的,Charles有一個叫做Map Local的功能,在你要mock的請求上右擊就可找到:

Map Local可以對指定的接口返回使用本地文件進(jìn)行替換,如這里替換為上文中廢話半天生成的數(shù)據(jù)文件MockTest.json:

然后再次刷新頁面,看看效果,頁面的列表就如愿倍增了,也不用去數(shù)據(jù)庫添加數(shù)據(jù),保存一份json文件即測即用即可:

以上,期待大家一起交流,多多指正。


接口測試 Mock 實戰(zhàn)(二) | 結(jié)合 jq 完成批量化的手工 Mock的評論 (共 條)

分享到微博請遵守國家法律
惠来县| 新昌县| 石柱| 金塔县| 徐汇区| 诏安县| 张家口市| 白银市| 固始县| 肥西县| 五家渠市| 炎陵县| 西乌珠穆沁旗| 元阳县| 富阳市| 阿瓦提县| 江陵县| 抚宁县| 普宁市| 双柏县| 滨州市| 日土县| 通辽市| 双牌县| 凉山| 鄱阳县| 平凉市| 长乐市| 得荣县| 天镇县| 孟津县| 乐至县| 馆陶县| 柳林县| 柳州市| 汝城县| 中山市| 万安县| 高唐县| 林州市| 阿拉善左旗|