pytest接口自动化-参数化:csv文件
实际工作中如何去实现数据和代码的分离
1.通过创建csv文件来存请求数据(请求参数,请求方法,请求地址,请求结果)
2.使用python自带的文件读取方法
3.读取csv文件时需要注意首行,如首行对应的是键,那么需要跳过首行
4.由于csv文件里面的内容格式为字符串,这时需要将字符串转换为列表格式
5.使用pytest中的parametrize函数来读取csv文件里面的参数
6.由于前面将csv的数据格式转换为列表格式了,那么可以通过索引去定位需要的数据
7.最后再断言返回结果
8.由于返回的内容是字典类型,csv文件里面是列表类型,现在是无法断言的,这时就需要对csv里面的内容进行反序列化操作。
(1).先通过反序列化将csv里面数据转为字典
(2).然后再取字典里面对应的键
9.建议:其实不管是csv,json,yaml,excel都是为了实现代码和数据的分离,方便后续的维护,可以适当根据自己喜好调整。我是比较喜欢yaml文件的,能帮我省下不少事。比如数据类型。
1、读取csv
# 读取csv文件
def readCsv():
# 定义一个列表(由于csv文件里面的数据类型是字符串,所以需要先定义列表,后面再反序列化为字典)
data=list()
with open('csv.csv','r',encoding='utf-8')as f:
reader = csv.reader(f)
# 不执行首行数据
next(reader)
for item in reader:
# 将csv里面的数据追加到列表当中
data.append(item)
return data
2、参数化及使用csv文件里面的数据
# 参数化
@pytest.mark.parametrize('data',readCsv())
def test_login(data):
r = requests.post(
url=data[0],
# headers=json.loads(data[1]),
json=json.loads(data[1]))
# 先将csv文件里面预期结果反序列化为字典
int1 = json.loads(data[2])
# 再取到对应的code的值
int2 = int1["code"] #这一步可以直接省去,后面直接调用 int1["code"] 就行
# 这时断言就不会出现数据类型不一致的问题了
assert r.json()["code"] == int2
3.完整代码
(1).csv数据
url,parametrize,expect
http://xxxx:2222/login,"{""account"":""pos"",""passwd"":""2""}","{""code"":0}"
http://xxxx:2222/login,"{""passwd"":""2""}","{""code"":100999}"
http://xxxx:2222/login,"{""account"":""passwd""}","{""code"":100999}"
http://xxxx:2222/login,"{""account"":""12321"",""passwd"":""2""}","{""code"":1100}"
http://xxxx:2222/login,"{""account"":""pos"",""passwd"":""12321""}","{""code"":1100}"
(2).代码
import csv
import pytest
import requests
import json
'''
实际工作中如何去实现数据和代码的分离
1.通过穿件csv文件来存请求数据(请求参数,请求方法,请求地址,请求结果)
2.使用python自带的文件读取方法
3.读取csv文件时需要注意首行,如首行对应的是键,那么需要跳过首行
4.由于csv文件里面的内容格式为字符串,这时需要将字符串转换为列表格式
5.使用pytest中的parametrize函数来读取csv文件里面的参数
6.由于前面将csv的数据格式转换为列表格式了,那么可以通过索引去定位需要的数据
7.最后再断言返回结果
8.由于返回的内容是字典类型,csv文件里面是列表类型,现在是无法断言的,这时就需要对csv里面的内容进行反序列化操作。
(1).先通过反序列化将csv里面数据转为字典
(2).然后再取字典里面对应的键
'''
# 读取csv文件
def readCsv():
# 定义一个列表(由于csv文件里面的数据类型是字符串,所以需要先定义列表,后面再反序列化为字典)
data=list()
with open('csv.csv','r',encoding='utf-8')as f:
reader = csv.reader(f)
# 不执行首行数据
next(reader)
for item in reader:
# 将csv里面的数据追加到列表当中
data.append(item)
return data
# 参数化
@pytest.mark.parametrize('data',readCsv())
def test_login(data):
r = requests.post(
url=data[0],
# headers=json.loads(data[1]),
json=json.loads(data[1]))
# 先将csv文件里面预期结果反序列化为字典
int1 = json.loads(data[2])
# 再取到对应的code的值
int2 = int1["code"] #这一步可以直接省去,后面直接调用 int1["code"] 就行
# 这时断言就不会出现数据类型不一致的问题了
assert r.json()["code"] == int2
# 查看反序列化后的数据类型
# print(type(int2))
# 查看接口返回的数据类型
# print(type(r.json()["code"]))
if __name__ == '__main__':
pytest.main('-v','-s','test_csv.py')
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfjbaec
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13