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())

 

posted @ 2022-09-01 19:38  小情绪1999  阅读(806)  评论(0编辑  收藏  举报