如何測(cè)試POST方法發(fā)送JSON數(shù)據(jù)的接口?
之前寫過一篇關(guān)于Json完整性和一致性校驗(yàn)的文章,希望對(duì)你有所幫助。
在測(cè)試工作中,一般都會(huì)接觸到期望結(jié)果數(shù)據(jù)與實(shí)際結(jié)果數(shù)據(jù)一致性比對(duì)的測(cè)試場(chǎng)景,對(duì)于復(fù)雜、龐大數(shù)據(jù)的比對(duì)工作。如果依靠人工執(zhí)行,其成本相當(dāng)高,難以保障執(zhí)行結(jié)果的一致性(多次執(zhí)行可能存在偏差),并且重復(fù)性極高。因此,通常我們需要考慮如何通過自動(dòng)化工具實(shí)現(xiàn)數(shù)據(jù)的比對(duì)。
之前分享過《Python實(shí)現(xiàn)復(fù)雜場(chǎng)景下文本數(shù)據(jù)的一致性比對(duì)》文章,主要應(yīng)用于文件一致性比對(duì)的測(cè)試場(chǎng)景。今天分享下如何實(shí)現(xiàn)Json數(shù)據(jù)的一致性校驗(yàn)的整體設(shè)計(jì)與實(shí)現(xiàn)。
JSON的兩種數(shù)據(jù)結(jié)構(gòu)1.Key-Value對(duì)集合,在Python語(yǔ)言中可以理解為字典(Dict),如下圖。
2.有序集合,在Python語(yǔ)言中可以理解為列表(List),如下圖。
一致性校驗(yàn)核心設(shè)計(jì)在測(cè)試工作中接觸的Json數(shù)據(jù)校驗(yàn),大多是請(qǐng)求響應(yīng)體的校驗(yàn),設(shè)計(jì)主要考慮了以下兩點(diǎn):
1.需支持復(fù)雜JSON比對(duì),如查詢地市編碼基本信息接口的響應(yīng)體中包含,省份編碼、省份地市的基本信息(地市編碼、地市名稱、地市排序),例如 :
2.需支持比對(duì)結(jié)果的可追溯,比如地市數(shù)量(Count)不一致時(shí),不能僅輸出期望、實(shí)際結(jié)果的地市數(shù)量,還需要輸出整個(gè)JSON的哪個(gè)節(jié)點(diǎn)的值不一致,或者缺失哪個(gè)節(jié)點(diǎn),如Detail.Count的值不一致,例如:
[ERROR] ACTUAL-JSON ==> [Detail.Count]的VALUE不同: <actual>: 2 <expect>: 3
設(shè)計(jì)實(shí)現(xiàn)一致性比對(duì)的整體設(shè)計(jì)包含三個(gè)模塊:遞歸解析模塊,格式轉(zhuǎn)換模塊,數(shù)據(jù)比對(duì)模塊,具體描述如下。
遞歸解析模塊
遞歸解析,按key的層次關(guān)系,每層生成數(shù)據(jù)結(jié)構(gòu)為[[key1,key2,value1],[key1,key2,value2]],代碼設(shè)計(jì)如下:
格式轉(zhuǎn)換模塊
創(chuàng)建節(jié)點(diǎn)流及值映射,數(shù)據(jù)結(jié)構(gòu)為{key1.key2:value1,key1.key3:value2},如下
數(shù)據(jù)比對(duì)模塊
針對(duì)格式轉(zhuǎn)換模塊的結(jié)果,遍歷比對(duì)各節(jié)點(diǎn)流(如,Detail.City.sort),校驗(yàn)節(jié)點(diǎn)與值是否一致,對(duì)于不一致的數(shù)據(jù)輸出節(jié)點(diǎn)流及值,輸出節(jié)點(diǎn)流及值,如下。
結(jié)果輸出如下:
[ERROR] ACTUAL-JSON ==> [Detail.Count]的VALUE不同: <actual>: 2 <expect>: 3
若對(duì)你有所幫助,歡迎大家評(píng)論、留言。