首頁 > 軟體

Python介面自動化 之用例讀取方法總結

2022-06-16 18:02:22

前言:

在軟體測試中,為專案編寫介面自動化用例已成為測試人員常駐的測試工作。本文以python為例,基於筆者曾使用過的三種用例資料讀取方法:xlrd、pandas、yaml,下面簡要地介紹下它們的使用方法及簡單分析。

1. Python第三方庫xlrd

xlrd模組可用於讀取excel檔案,是一種最常用的用例讀取方式,使用方式如下。以演示慣例---註冊介面為例,首先新建一個excel檔案,檔案中自定義介面用例引數:

(以下data均為隨機生成,不涉及任何系統)

python已安裝第三方庫後,開始讀取介面用例。本次為了方便演示,方法未進行封裝。

xlrd程式碼演示

以下為範例程式碼:

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檔案內容會不斷擴充。測試用例的易讀性和維護性都會成為後期測試工作的難題,影響測試效率。

2. Python第三方庫pandas

pandas是python的一個資料分析包,可幫助使用者處理大型資料集。使用pandas中的DataFrame(二維的表格型資料結構)方法,即可獲取到excel表格中的測試資料。pandas與xrld一樣,都可讀取excel檔案。

首先建立一個excel檔案,存放測試資料:

pandas程式碼演示

範例程式碼:

# 從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檔案中的資料越來越多,後期測試的維護成本是比較高的,同時表格格式在大篇幅資料中,也不方便閱讀。這也是此類方法的一個弊端。

3. Python第三方庫yaml

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程式碼演示

讀取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!


IT145.com E-mail:sddin#qq.com