数据驱动:pytest.mark.parametrize()
首先看个样本:
import pytest
class TestData:
# parametrize有两个值,一个是args_name:参数名,一个是args_value:参数值,可以有多个,进行数据解包
# args_value可以是:list列表,数组,字典列表,在数据中有多少个值,接口用例就会执行多少次,相等于遍历
# 基础用法
@pytest.mark.parametrize('name', ["李四", '王五'])
def test_data(self, name):
print(name)
# 多层数据,解包
@pytest.mark.parametrize('name,age', [["李四", '15岁'], ["王五", '16岁'], ["刘大", '126岁']])
def test_data1(self, name, age):
print(name, age)
上面的测试数据都是死的,项目中很少把测试用例 数据写在py文件中,那么就需要单独对数据进行封装,就有了yaml文件或excel文件,进行数据驱动封装
二、了解yaml详情及写法:
一种数据格式
主要作用:
1、配置文件
2、测试用例
数据组成:
1、map对象:键:(空格)值对,如:"a": "b"
2、多组需要用-开头,标注为不同组数据:
-
name: 正确验证码登录
request:
method: get
url: http://域名/jeecg-boot/sys/login
data:
captcha: Gkak!@#2019s
checkKey: 1637811815838
password: 123456
remember_me: 1
username: admin
validate: None
-
name: 错误验证码登录
request:
method: get
url: http://ip:端口号/jeecg-boot/sys/login
data:
captcha: Gkak!@#2019s
checkKey: 1637811815838
password: 123456
remember_me: 1
username: admin
三、首先我们要读取yaml文件的方法:
之前封装过一个yaml工具类文件,我们只需在里面加入下面这方法即可
# 读取测试用例的Yaml文件
def readCaseYaml(self, yamlfileDir, yamlfileName):
work = os.getcwd() + "/" + yamlfileDir + "/" + yamlfileName
print(work)
with open(work, mode='r', encoding='utf-8') as f:
value = yaml.load(stream=f, Loader=yaml.FullLoader)
return value
四、统一接口请求封装
因为:如果我么需要多所有的接口请求进行分析处理,日志监控,这样我们就需要制定提取出接口请求的规则:
import json
import requests
class RequestUnit:
session = requests.session()
def sendRequest(self, method, url, data, **kwargs):
#把请求方法改成小写
method = str(method).lower()
rep = None
#get请求以params接参数
if method == "get":
rep = RequestUnit.session.request(method=method, url=url, params=data, **kwargs)
# post请求以data接参数,原因:data只能传输简单的只有键值对的dict或者str格式的数据,json一般只能传输dict格式,简单复杂的都可以
#data可以满足多种格式,那我们只需把都转成str类型
elif method=="post":
# 把键值对转换成str类型
data = json.dumps(data)
rep = RequestUnit.session.request(method=method, url=url, data=data, **kwargs)
return rep.text
遗留问题:
1、yaml文件里面怎么使用动态参数
2、yaml文件里面怎么实现文件上次
3、yaml文件怎么实现断言(断言写在py接口请求文件里又过于多了)
4、yaml文件数据量过多咋办
带着问题继续学习思考。。。
网友评论