使用Python快速搭建接口自動化測試腳本實(shí)戰(zhàn)總結(jié)
?測試需求介紹
通常,在我們的項(xiàng)目中,我們的接口測試需求一般都是構(gòu)造不同的請求數(shù)據(jù),然后發(fā)送請求到接口,拿到接口返回后,對返回的字段進(jìn)行提取和校驗(yàn),最后將結(jié)果存放在excel表格中方便查閱。接口一般是http或https請求,發(fā)送的結(jié)構(gòu)一般是json body或json結(jié)合一些文件附件,請求的返回結(jié)果都是json格式,我們的測試case可以用Excel或者數(shù)據(jù)庫保存,結(jié)果可以保存在數(shù)據(jù)庫或者直接存在Excel中,下面將具體拆解需求及逐步介紹實(shí)現(xiàn)過程。
請求體的定制和發(fā)送請求
構(gòu)造每次發(fā)送的請求內(nèi)容和向接口自動發(fā)送請求是構(gòu)造自動化測試腳本的核心,我們實(shí)現(xiàn)這一步驟主要是使用python 的requests庫,下面詳細(xì)做一下詳細(xì)介紹。
1.發(fā)送簡單的http post請求
發(fā)送請求前,我們需要明確請求的body,我們的body為json,具體內(nèi)容如下:

我們可以把這個作為模板保存為text.json文件作為模板,這樣可以直接讀取為后面構(gòu)造請求體做準(zhǔn)備。這一步我們可以這樣處理,這里借助了yaml包,可以把json轉(zhuǎn)換為字典,也可以使用python自帶的json,效果一樣。

獲取到了請求體模板后,我們得到了變量request_body,這是一個字典類型的數(shù)據(jù),我們就可以對其進(jìn)行參數(shù)化,以此構(gòu)造我們需要的請求體了,例如我們要對每次請求的請求id、用戶名、以及text的內(nèi)容做修改,可以這樣操作,左邊是需要修改的字段,右邊是我們需要的變量。

構(gòu)造好要發(fā)送的數(shù)據(jù),就可以準(zhǔn)備發(fā)送請求了,在發(fā)送請求之前我們還有一點(diǎn)工作要做,那就是設(shè)置請求接口的一些參數(shù)和一些請求頭的定制,這里我們簡單舉例如下:

我們定制了請求參數(shù)和請求頭,就可以發(fā)送類似如下URL的請求:

我們再把之前構(gòu)造好的body加上,再用requests庫的post方法發(fā)送請求,這里用到了方法中的data參數(shù),它接收的是一個json,因此在發(fā)送之前對之前的字典變量還需做下轉(zhuǎn)換再發(fā)送,這里用python自帶的json庫,使用其中的dumps方法即可將字典轉(zhuǎn)換為json:

至此,一個基本的http post請求就發(fā)送完成了,注意到,我們有一個名為 r 的 Response 對象。我們可以從這個對象中獲取所有我們想要的信息。
2.更加復(fù)雜的請求
前面我們介紹了最簡單的http post請求,在此基礎(chǔ)上,我們有時還需要一些更加復(fù)雜的請求,比如帶一個文件,https請求等,下面簡單講解一下如何實(shí)現(xiàn):
比如我們想要發(fā)送一個帶有格式為p?cm的音頻文件到接口中,并且接口是https的。

注意到,發(fā)送https請求需要做ssl認(rèn)證,在方法中使用verify參數(shù),這個參數(shù)默認(rèn)值是True,一般不需要驗(yàn)證的話,需要將這個置為False。還有一個需要注意的地方是,我們設(shè)置了一個timeout,防止請求過程超時,導(dǎo)致程序無響應(yīng)。
對請求返回?cái)?shù)據(jù)進(jìn)行關(guān)鍵數(shù)據(jù)抓取
在發(fā)送請求的步驟里我們有一個名為 r 的 Response 對象。我們可以從這個對象中獲取所有我們想要的信息。
獲取內(nèi)容有如下幾種方法,我們可以根據(jù)自己的需要來使用:

得到的一般為json格式的文本:

我們可以對json進(jìn)行轉(zhuǎn)換,使用json.loads方法,將一個json對象轉(zhuǎn)換為python的字典,這樣方便獲取其中我們想要的一些字段,這一步很簡單,就不做詳細(xì)介紹了。
如何執(zhí)行case和存儲測試結(jié)果
首先我們看一下我們的case,我們的case是使用Excel進(jìn)行編寫的,具體如下:

1080×112 39.8 KB
如何讀取Excel,獲取其中的case呢?我們使用了python中的pandas庫。這個庫很強(qiáng)大,有很多處理數(shù)據(jù)的方法,我們在這只使用其中讀取excel的方法,具體代碼如下:

這樣我們就將表格數(shù)據(jù)轉(zhuǎn)換了一個list,每個list中是一個字典格式,也就是我們的case,具體格式如下:

這樣做的目的是我們可以將表頭和每個case做一個映射,形成一個字典,這樣可以更加靈活操作case以及做數(shù)據(jù)對比。
有了case list,加上之前我們發(fā)送請求和獲取結(jié)果的步驟就可以進(jìn)行批量接口測試了,這里使用一個for循環(huán)就可以批量跑起來了:

我們將每次返回的結(jié)果,按照case的格式拼接成一個字典,就是我們的結(jié)果數(shù)據(jù),將每個結(jié)果字典再存儲到一個列表中,就得到了整個的結(jié)果字典列表,我們將它命名為case_result_list,這時,我們再次使用pandas庫,可以把這個列表轉(zhuǎn)換為dataframe格式:

之后我們將dataframe保存為excel文件:

至此,我們已經(jīng)完成了從獲取case到發(fā)請求獲取結(jié)果,保存結(jié)果的全部流程。
對結(jié)果數(shù)據(jù)進(jìn)行標(biāo)識處理
經(jīng)過以上的操作,我們已經(jīng)完成了批量發(fā)請求,獲取結(jié)果的過程,如果我們需要對結(jié)果單元格做一些處理,比如標(biāo)紅加粗等操作,使測試結(jié)果中的錯誤信息更加明顯,需要怎么操作呢?這里我們使用了python中的openpyxl庫。這個庫也是可以對Excel表格進(jìn)行讀寫操作,并且可以插入一些公式和樣式。我們在這里使用的是樣式操作,我們根據(jù)單元格中的數(shù)據(jù)對結(jié)果進(jìn)行標(biāo)紅加粗操作:

最后得到的測試結(jié)果如下,通過使用openpyxl,我們還可以在結(jié)果中追加行,增加一些測試結(jié)果的統(tǒng)計(jì)信息,如case數(shù)、error數(shù),錯誤率正確率等。

1080×224 61.6 KB
以上就是一次完整的接口自動化測試腳本搭建,實(shí)現(xiàn)自動請求、獲取結(jié)果、數(shù)據(jù)對比分析,導(dǎo)出結(jié)果到Excel等功能,每一個步驟都比較簡單,可以快速搭建出滿足需求的自動化測試腳本,方面快速驗(yàn)證服務(wù)端接口。
其中使用的requests庫、pandas庫是在python常用的庫,功能很強(qiáng)大,后續(xù)大家可以參考其官方文檔進(jìn)行深入了解。






























