<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
前言:
在軟體測試中,為專案編寫介面自動化用例已成為測試人員常駐的測試工作。本文以python為例,基於筆者曾使用過的三種用例資料讀取方法:xlrd、pandas、yaml,下面簡要地介紹下它們的使用方法及簡單分析。
xlrd模組可用於讀取excel檔案,是一種最常用的用例讀取方式,使用方式如下。以演示慣例---註冊介面為例,首先新建一個excel檔案,檔案中自定義介面用例引數:
(以下data均為隨機生成,不涉及任何系統)
python已安裝第三方庫後,開始讀取介面用例。本次為了方便演示,方法未進行封裝。
以下為範例程式碼:
import unittest import xlrd # 開啟介面用例excel檔案 excel_data = xlrd.open_workbook('register.xlsx') # 讀取excel檔案中存放用例的sheet頁,命名無要求 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
執行py檔案後,列印讀取data列表,成功讀取出excel檔案中用例資料:
但是上面的方法會把整個excel檔案的用例全部存放到一個列表中,資料取用不太方便。現在我們對資料進行拆分,結合ddt資料驅動方式,進行資料讀取:
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;匯入資料的@data;拆分資料的@unpack @ddt class register(unittest.TestCase): @data(*data_) @unpack def test_register(self, title, data, check): print(data) if __name__ == '__main__': unittest.main()
通過ddt中的data及unpack方法,excel檔案中的每條資料都是一個單獨的列表,更便於提供給介面測試用例使用:
xlrd模組在介面自動化中的使用頻率非常高,呼叫方法也非常簡單。讀取到excel測試用例後,還可以使用裝飾器DDT進行資料拆分,使資料更加簡化。
xlrd適用於專案介面資料較少、介面欄位不經常調整的專案。如果專案中,介面數量非常多,在編寫介面用例時,存放用例的excel檔案內容會不斷擴充。測試用例的易讀性和維護性都會成為後期測試工作的難題,影響測試效率。
pandas是python的一個資料分析包,可幫助使用者處理大型資料集。使用pandas中的DataFrame(二維的表格型資料結構)方法,即可獲取到excel表格中的測試資料。pandas與xrld一樣,都可讀取excel檔案。
首先建立一個excel檔案,存放測試資料:
範例程式碼:
# 從excel檔案中讀取用例,name引數為sheet名稱 def read_excel_data(inputdir,name): dataframe = pandas.DataFrame(columns=['介面名','用例','請求地址','請求體','斷言','協定','請求方式']) # 傳入引數就是excel檔案中的列名 try: datafile = pandas.read_excel(inputdir,sheet_name=name) dataframe = dataframe.append(datafile, ignore_index=True, sort=True) except: print("Warning:excel檔案開啟異常,請重試!") To_list = dataframe.to_dict(orient='records') # 引數='records'時,轉化後是 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檔案的路徑,按實際專案結構指明 getdata(path)
呼叫封裝好的方法,成功讀取到excel檔案中的全部用例資料:
該方法與xlrd類似,也是通過讀取二維表格中資料的方式,獲取到我們所需介面用例。
通過xlrd等方法讀取excel檔案中的測試用例,是介面測試中比較主流的資料讀取方式。但是通過上面的案例展示可以發現,如果excel檔案中的資料越來越多,後期測試的維護成本是比較高的,同時表格格式在大篇幅資料中,也不方便閱讀。這也是此類方法的一個弊端。
yaml是一種用來寫組態檔的序列化語言,檔案格式輸出可以是列表、字典,也支援巢狀。層級關係用空格區分,但不支援tab縮排。
破折號和空格( “ - ” ):列表格式
# 以下資料會以list形式被讀取 - testapi - url - get
常見的yaml格式:
冒號和空格( “ :” ) :字典格式
# 以下資料會以dict形式被讀取 name: A age: 1 spouse: name: B age: 2 slave: - name: C # - 表示為列表 age: 3 - name1: D age1: 4
讀取yaml檔案中的dict資料,程式碼如下:
import os import yaml class LoadTestData: # 設定路徑,獲取yaml檔案資料 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的資料 :param api_file: api檔案位置 :param api_name: api檔名稱 :return: 檔案資料 ''' 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('讀取成功')
請注意yaml.load在呼叫時,可能會因為yaml版本較高而提示異常。解決方法:指定loader = yaml.FullLoader可解決異常。
根據上面yaml的實際運用可以發現,相比excel表格存放的資料,yaml可讀性更好,而且python本身也支援新建yaml檔案,與指令碼語言的互動性更佳。對於不同的測試模組,也可以新建不同的yaml檔案,實現了功能模組之間的測試資料隔離。
測試中,不管是以excel表格存放資料還是yaml檔案存放資料,都能做到快速整合組裝測試資料。但excel表格存放資料過大時,有可讀性降低及指令碼執行時間較長等問題。yaml擁有簡潔、與python互動性高,可以把功能模板的測試資料相互隔離等優點。但也需要對yaml的寫法規範有一些瞭解,才能正確使用。
到此這篇關於Python介面自動化 之用例讀取方法總結的文章就介紹到這了,更多相關Python 用例讀取內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45