pytest數據驅動應用-excel測試用例數據讀取封裝


接口測試數據存放

  excel、json、yaml、數據庫

實例:注冊功能

參數 變量名 類型 說明 是否必填
手機號 mobile_phone int 新用戶的手機號
密碼 pwd string 8-16位
類型 type int 0:管理員,1:普通用戶(默認為1)
注冊名 reg_name string 昵稱:長度最大為10位(不填寫有默認值)

讀取出來應該是一個大的列表,列表里面放的每一條測試用例,測試用例是一個字典(使用openpyxl)

 步驟:

1、對操作進行封裝(請求頭、發送請求的操作)

MyRequests.py
"""
對操作進行封裝 """ import requests class MyRequests: """ 將共性提取出來 headers="http://api.lemonban.com/futureloan" """ def __init__(self): #請求頭 self.headers={ "X-Lemonban-Media-Type":"lemonban.v2" } """ 定義一個私有方法,處理請求頭(有的請求頭有token) """ def __deal_header(self,token=None): if token: self.headers["Authorization"]="Bearer {}".format(token)#添加字典元素 """ 發請求方法封裝 method=post或者get """ def send_requests(self,method,url,json=None,params=None,token=None): self.__deal_header(token)#處理請求頭 #調用requests方法 resp=requests.request(method,url,json=json,params=params,headers=self.headers) return resp

2、對讀取數據的操作進行封裝(將excel的測試用例以字典的形式一條一條讀取出來)

My_Excel.py
"""
    封裝讀取表單測試用例的方法
"""
from openpyxl import load_workbook
class MyExcel:
    def __init__(self,excel_path,sheet_name):
        """
            打開工作簿,選擇一個表單
        """
        wb=load_workbook(excel_path)#加載一個excel,得到工作簿對象
        self.sh=wb[sheet_name]
    def read_data(self):
        """
            讀取excel表單數據
        """
        data=list(self.sh.values)#將生成器轉換為列表
        header=data[0]
        case_data=[]
        for row in data[1:]:
            row_dict=dict(zip(header,row))#將頭部和用例打包
            case_data.append(row_dict)
        return case_data
#返回的是一個列表,列表中每一條數據都是一個用例

3、執行用例

"""
    測試步驟
    1、讀取注冊接口的測試數據-讀取出來是個列表,列表中每個成員都是一個測試用例
    2、遍歷測試數據,每組數據發起一個http請求
"""
import pytest
import json
from common.MyRequests import MyRequests
from common.My_Excel import MyExcel
#1、讀取注冊接口的測試數據-讀取出來是個列表,列表中每個成員都是一個測試用例
excel_path=r'D:\study\study_API\day5\testdata\測試用例.xlsx'#測試用例的存放路徑
myexcel=MyExcel(excel_path,'注冊接口')
cases=myexcel.read_data()
#2、遍歷測試數據,每組數據發起一個http請求
myrequests=MyRequests()
class TestRegister:
    @pytest.mark.parametrize("case",cases)
    def test_register(self,case):
        #需要把請求參數cases轉換為字符串
        req_dict=json.loads(case['req_data'])
        resp=myrequests.send_requests(case["method"],case["url"],json=req_dict)
        print(resp.json())

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM