Python接口自動(dòng)化?之用例讀取方法總結(jié)
前言:
在軟件測(cè)試中,為項(xiàng)目編寫接口自動(dòng)化用例已成為測(cè)試人員常駐的測(cè)試工作。本文以python為例,基于筆者曾使用過(guò)的三種用例數(shù)據(jù)讀取方法:xlrd、pandas、yaml,下面簡(jiǎn)要地介紹下它們的使用方法及簡(jiǎn)單分析。
1. Python第三方庫(kù)xlrd
xlrd模塊可用于讀取excel文檔,是一種最常用的用例讀取方式,使用方式如下。以演示慣例---注冊(cè)接口為例,首先新建一個(gè)excel文檔,文檔中自定義接口用例參數(shù):
(以下data均為隨機(jī)生成,不涉及任何系統(tǒng))
python已安裝第三方庫(kù)后,開始讀取接口用例。本次為了方便演示,方法未進(jìn)行封裝。
xlrd代碼演示
以下為實(shí)例代碼:
import unittest import xlrd # 打開接口用例excel文件 excel_data = xlrd.open_workbook('register.xlsx') # 讀取excel文件中存放用例的sheet頁(yè),命名無(wú)要求 sheet = excel_data.sheet_by_name('register') print(sheet.nrows) print(sheet.row_values(1)) # 將讀取到的用例全部追加到data列表中 data = [] for i in range(1, sheet.nrows): data.append(sheet.row_values(i)) print(data) class register(unittest.TestCase): def test_register_check(self): pass
執(zhí)行py文件后,打印讀取data列表,成功讀取出excel文件中用例數(shù)據(jù):
但是上面的方法會(huì)把整個(gè)excel文件的用例全部存放到一個(gè)列表中,數(shù)據(jù)取用不太方便?,F(xiàn)在我們對(duì)數(shù)據(jù)進(jìn)行拆分,結(jié)合ddt數(shù)據(jù)驅(qū)動(dòng)方式,進(jìn)行數(shù)據(jù)讀取:
import unittest import xlrd from ddt import ddt,data,unpack excel_data = xlrd.open_workbook('register.xlsx') sheet = excel_data.sheet_by_name('register') # print(sheet.nrows) # print(sheet.row_values(1)) data_ = [] for i in range(1, sheet.nrows): data_.append(sheet.row_values(i)) print(data_) # 引入的裝飾器@ddt;導(dǎo)入數(shù)據(jù)的@data;拆分?jǐn)?shù)據(jù)的@unpack @ddt class register(unittest.TestCase): @data(*data_) @unpack def test_register(self, title, data, check): print(data) if __name__ == '__main__': unittest.main()
通過(guò)ddt中的data及unpack方法,excel文件中的每條數(shù)據(jù)都是一個(gè)單獨(dú)的列表,更便于提供給接口測(cè)試用例使用:
xlrd模塊在接口自動(dòng)化中的使用頻率非常高,調(diào)用方法也非常簡(jiǎn)單。讀取到excel測(cè)試用例后,還可以使用裝飾器DDT進(jìn)行數(shù)據(jù)拆分,使數(shù)據(jù)更加簡(jiǎn)化。
xlrd適用于項(xiàng)目接口數(shù)據(jù)較少、接口字段不經(jīng)常調(diào)整的項(xiàng)目。如果項(xiàng)目中,接口數(shù)量非常多,在編寫接口用例時(shí),存放用例的excel文件內(nèi)容會(huì)不斷擴(kuò)充。測(cè)試用例的易讀性和維護(hù)性都會(huì)成為后期測(cè)試工作的難題,影響測(cè)試效率。
2. Python第三方庫(kù)pandas
pandas是python的一個(gè)數(shù)據(jù)分析包,可幫助使用者處理大型數(shù)據(jù)集。使用pandas中的DataFrame(二維的表格型數(shù)據(jù)結(jié)構(gòu))方法,即可獲取到excel表格中的測(cè)試數(shù)據(jù)。pandas與xrld一樣,都可讀取excel文件。
首先創(chuàng)建一個(gè)excel文件,存放測(cè)試數(shù)據(jù):
pandas代碼演示
實(shí)例代碼:
# 從excel文件中讀取用例,name參數(shù)為sheet名稱 def read_excel_data(inputdir,name): dataframe = pandas.DataFrame(columns=['接口名','用例','請(qǐng)求地址','請(qǐng)求體','斷言','協(xié)議','請(qǐng)求方式']) # 傳入?yún)?shù)就是excel文件中的列名 try: datafile = pandas.read_excel(inputdir,sheet_name=name) dataframe = dataframe.append(datafile, ignore_index=True, sort=True) except: print("Warning:excel文件打開異常,請(qǐng)重試!") To_list = dataframe.to_dict(orient='records') # 參數(shù)='records'時(shí),轉(zhuǎn)化后是 list形式 return To_list
from common.data import read_excel_data import pytest def getdata(path): getdata = read_excel_data(path, '編輯xx') print(getdata) path = r'..\common\接口用例文檔.xlsx' # excel文件的路徑,按實(shí)際項(xiàng)目結(jié)構(gòu)指明 getdata(path)
調(diào)用封裝好的方法,成功讀取到excel文件中的全部用例數(shù)據(jù):
該方法與xlrd類似,也是通過(guò)讀取二維表格中數(shù)據(jù)的方式,獲取到我們所需接口用例。
通過(guò)xlrd等方法讀取excel文件中的測(cè)試用例,是接口測(cè)試中比較主流的數(shù)據(jù)讀取方式。但是通過(guò)上面的案例展示可以發(fā)現(xiàn),如果excel文件中的數(shù)據(jù)越來(lái)越多,后期測(cè)試的維護(hù)成本是比較高的,同時(shí)表格格式在大篇幅數(shù)據(jù)中,也不方便閱讀。這也是此類方法的一個(gè)弊端。
3. Python第三方庫(kù)yaml
yaml是一種用來(lái)寫配置文件的序列化語(yǔ)言,文件格式輸出可以是列表、字典,也支持嵌套。層級(jí)關(guān)系用空格區(qū)分,但不支持tab縮進(jìn)。
破折號(hào)和空格( “ - ” ):列表格式
# 以下數(shù)據(jù)會(huì)以list形式被讀取 - testapi - url - get
常見(jiàn)的yaml格式:
冒號(hào)和空格( “ :” ) :字典格式
# 以下數(shù)據(jù)會(huì)以dict形式被讀取 name: A age: 1 spouse: name: B age: 2 slave: - name: C # - 表示為列表 age: 3 - name1: D age1: 4
yaml代碼演示
讀取yaml文件中的dict數(shù)據(jù),代碼如下:
import os import yaml class LoadTestData: # 設(shè)置路徑,獲取yaml文件數(shù)據(jù) def load_data(self, file_name): yaml_path = os.path.join(os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'test_file'), file_name) yaml_data = yaml.load(open(yaml_path), Loader=yaml.FullLoader) # print(yaml_data) return yaml_data def get_yaml_data(api_file, api_name): ''' 獲取yaml中 api_name的數(shù)據(jù) :param api_file: api文件位置 :param api_name: api文件名稱 :return: 文件數(shù)據(jù) ''' data = LoadTestData().load_data(api_file)[api_name] print(data) return data if __name__ == '__main__': file_name = 'api_data.yaml' api_name = 'test' # LoadTestData().load_data(file_name) get_yaml_data(file_name,api_name ) print('讀取成功')
請(qǐng)注意yaml.load在調(diào)用時(shí),可能會(huì)因?yàn)閥aml版本較高而提示異常。解決方法:指定loader = yaml.FullLoader可解決異常。
根據(jù)上面yaml的實(shí)際運(yùn)用可以發(fā)現(xiàn),相比excel表格存放的數(shù)據(jù),yaml可讀性更好,而且python本身也支持新建yaml文件,與腳本語(yǔ)言的交互性更佳。對(duì)于不同的測(cè)試模塊,也可以新建不同的yaml文件,實(shí)現(xiàn)了功能模塊之間的測(cè)試數(shù)據(jù)隔離。
總結(jié)
測(cè)試中,不管是以excel表格存放數(shù)據(jù)還是yaml文件存放數(shù)據(jù),都能做到快速集成組裝測(cè)試數(shù)據(jù)。但excel表格存放數(shù)據(jù)過(guò)大時(shí),有可讀性降低及腳本執(zhí)行時(shí)間較長(zhǎng)等問(wèn)題。yaml擁有簡(jiǎn)潔、與python交互性高,可以把功能模板的測(cè)試數(shù)據(jù)相互隔離等優(yōu)點(diǎn)。但也需要對(duì)yaml的寫法規(guī)范有一些了解,才能正確使用。
到此這篇關(guān)于Python接口自動(dòng)化 之用例讀取方法總結(jié)的文章就介紹到這了,更多相關(guān)Python 用例讀取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python接口自動(dòng)化淺析如何處理動(dòng)態(tài)數(shù)據(jù)
- Python接口自動(dòng)化淺析如何處理接口依賴
- python接口自動(dòng)化測(cè)試數(shù)據(jù)和代碼分離解析
- python中playwright結(jié)合pytest執(zhí)行用例的實(shí)現(xiàn)
- Python教程之pytest命令行方式運(yùn)行用例
- Python+Opencv答題卡識(shí)別用例詳解
- Python接口自動(dòng)化之文件上傳/下載接口詳解
- python+pytest接口自動(dòng)化之token關(guān)聯(lián)登錄的實(shí)現(xiàn)
- python+pytest接口自動(dòng)化之日志管理模塊loguru簡(jiǎn)介
- Python自動(dòng)化實(shí)戰(zhàn)之接口請(qǐng)求的實(shí)現(xiàn)
相關(guān)文章
DataFrame窗口函數(shù)rolling()的用法
這篇文章主要介紹了DataFrame窗口函數(shù)rolling()的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02Python matplotlib圖例放在外側(cè)保存時(shí)顯示不完整問(wèn)題解決
這篇文章主要介紹了Python matplotlib圖例放在外側(cè)保存時(shí)顯示不完整問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07基于Python和Scikit-Learn的機(jī)器學(xué)習(xí)探索
這篇文章主要介紹了基于Python和Scikit-Learn的機(jī)器學(xué)習(xí)探索的相關(guān)內(nèi)容,小編覺(jué)得還是挺不錯(cuò)的,這里分享給大家,供需要的朋友學(xué)習(xí)和參考。2017-10-10Python從ZabbixAPI獲取信息及實(shí)現(xiàn)Zabbix-API 監(jiān)控的方法
這篇文章主要介紹了Python從ZabbixAPI獲取信息及實(shí)現(xiàn)Zabbix-API 監(jiān)控的方法,需要的朋友可以參考下2018-09-09python中dir()與__dict__屬性的區(qū)別淺析
這篇文章主要給大家介紹了關(guān)于python中dir()與__dict__屬性的區(qū)別的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12使用Python的Treq on Twisted來(lái)進(jìn)行HTTP壓力測(cè)試
這篇文章主要介紹了使用Python的Treq on Twisted來(lái)進(jìn)行HTTP壓力測(cè)試,基于Python中的Twisted框架,需要的朋友可以參考下2015-04-04