接口自動(dòng)化框架-數(shù)據(jù)驅(qū)動(dòng)

本文章將介紹接口自動(dòng)化所覆蓋的接口測(cè)試場(chǎng)景和接口測(cè)試斷言的深度

場(chǎng)景:

1.單接口各類接口異常傳參組合

2.多接口集成執(zhí)行,模擬業(yè)務(wù)場(chǎng)景

斷言深度:

1.HTTP狀態(tài)碼校驗(yàn)

2.接口返回值校驗(yàn)

3.接口返回值內(nèi)包含json校驗(yàn)

4.數(shù)據(jù)庫(kù)結(jié)果校驗(yàn)

一,用到的第三方庫(kù)一覽:

parameterized==0.6.1? ?

mysqlclient==1.3.13

requests==2.18.4

rsa==4.0

wheel==0.32.2

configparser==3.5.0

sshtunnel==0.1.4

文檔目錄結(jié)構(gòu):


文檔目錄介紹:

1.mysql_dml該目錄存放sql執(zhí)行方法,在后續(xù)需要執(zhí)行sql語(yǔ)句時(shí),調(diào)用該文件下的類即可

2.public_api 目錄為所有接口請(qǐng)求類,每個(gè)接口為類中的一個(gè)方法

3.service_logic 所有接口的共用邏輯,在此文件夾內(nèi)實(shí)現(xiàn)(如2個(gè)或者3個(gè)接口以上,在進(jìn)行集成接口調(diào)用時(shí)經(jīng)常被使用到的,可以拆出來(lái)放在這個(gè)文件夾)

4.test_case 測(cè)試方法的main函數(shù),所有測(cè)試方法主入口在這里執(zhí)行

5.test_data 測(cè)試數(shù)據(jù),csv文件管理的測(cè)試數(shù)據(jù)在該文件中存放

6.test_report測(cè)試報(bào)告,存放HTML測(cè)試報(bào)告文件

7.utils 該文件存放接口測(cè)試時(shí)需要用到的工具,比如公私鑰加密的方法,日志類,HTML測(cè)試報(bào)告類,數(shù)據(jù)庫(kù)連接器等


執(zhí)行過(guò)程如下:

首先test_case測(cè)試方法主入口,都加入了一個(gè)裝飾器:


getJsonData接收一個(gè)參數(shù):測(cè)試用例文件的url

將文件路徑傳入至該函數(shù)中時(shí),該方法會(huì)將csv中得到的數(shù)據(jù),序列化為dict數(shù)據(jù),例如csv中數(shù)據(jù)如下:

case_name? api_url? type? header .......

登錄? ? ? ? ? ? ? /login? ? post? {"content-type":""}........

第二行

轉(zhuǎn)為:[{"case_name":"登錄","api_url":"/login","type":"post"...},{第二行}]

轉(zhuǎn)為列表包字典的數(shù)據(jù)格式后,傳入paranmeterized.expand()方法

該方法的作用是會(huì)根據(jù)列表的長(zhǎng)度生成以下標(biāo)從0開始的方法個(gè)數(shù),比如:

我在test_login(self,data):方法上加入該裝飾器,csv文件中有2行數(shù)據(jù),那么運(yùn)行時(shí)會(huì)生成test_login0(self,data),test_login1(self,data)的方法個(gè)數(shù)

然后調(diào)用unittest.main調(diào)用所有以test_開頭的的方法,即可達(dá)到循環(huán)傳參的方式了。


csv中字段詳解:

caseName,:測(cè)試用例名稱

apiUrl, 測(cè)試用例url(注意不包含域名,域名卸載config.ini配置文件中)

type,(接口類型,post,get或其他的,需要其他的可自行擴(kuò)展)

header,(默認(rèn)的請(qǐng)求頭,{"content-type":"application/json"})

precondition_type,(前置條件類型,目前三種:為空,script,sql)

precondition,(前置條件具體數(shù)據(jù))

on-off,(單接口執(zhí)行的開關(guān))

jsonData,(json數(shù)據(jù))

assertWay,(斷言方式,return_result,sql)

assertField, (斷言的字段)

assertValue(斷言的值)

這里著重講解precondition_type,precondition,jsonData的關(guān)系:

如果前置條件選擇為空的話,precondition則也為空

如果precondition前置條件選擇為script的話,precondition的值為{"$需要替換的字段":"需要替換的取值方式"},假如json數(shù)據(jù)為{"a":{"b":"$c"}}

上個(gè)接口返回的數(shù)據(jù)為{"d":{"c":"e"}},其中C這個(gè)值需要從這個(gè)返回結(jié)果中取出,precondition則要設(shè)置為{"$c":"d|c"},這樣json數(shù)據(jù)就能成功被替換,多個(gè)的話也是支持的

如果precondition前置條件選擇為sql的話,precondition的值為{"$需要替換的字段":"需要替換的sql語(yǔ)句"},在測(cè)試過(guò)程中,有些接口需要從數(shù)據(jù)庫(kù)中得到一些數(shù)據(jù)才能測(cè)試,這樣的情況下,可以使用sql的方式去對(duì)json數(shù)據(jù)做替換,寫法為

{"$c":"select id from user where name='張三'"} 這樣我們就能將查詢出的結(jié)果替換給json了



另外:assertWay,assertField,assertValue也很重要

其中assertWay如果選擇為sql的話,

斷言的值為取json的數(shù)據(jù),例如json_result 為 {"a":{"b":"c"}},取b的值為a|b

assertValue 直接填寫sql語(yǔ)句例如,select.........

如果assertWay為return_result的話,就顧名思義了,直接查詢返回結(jié)果對(duì)不對(duì),取值方式和上面一樣也是a|b|c之類的


多接口集成測(cè)試差點(diǎn)忘記講了:

由于上面部分全部講的是單接口運(yùn)行,所以在串聯(lián)的時(shí)候,當(dāng)然不需要paranmeterized.expand()該裝飾方法了,所以調(diào)用public_api文件中的接口時(shí),調(diào)用方式需要改變?yōu)椋?/p>

接口方法(csv中第幾行)例如:login_api(1) 這個(gè)1為csv中第一行的數(shù)據(jù),于是就是用csv中第一行的數(shù)據(jù)執(zhí)行該接口,

如果集成多接口的場(chǎng)景為登錄,新增某條數(shù)據(jù),注銷則為:

login_result = login_api(1)

login_required = login_result.json()['Authorization']

insert_data_api(1,header=login_required)

logout_api(1,header=login_required)

另外還記得之前csv字段提到的on-off字段嗎,那個(gè)字段是為了表示有些數(shù)據(jù)只能在集成的時(shí)候用到,所以將字段改為OFF的情況下,代碼在單接口執(zhí)行的情況下將不會(huì)執(zhí)行這行數(shù)據(jù)


另外附上源碼,如果有優(yōu)化意見有待改進(jìn)的地方,歡迎指出

https://github.com/ZhangWei55kai/api_testV3.0

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容