一、问题
pytest参数化如何读取csv文件数据?
二、回答
有两种获取方式:
1.列表嵌套列表的方式
2.列表嵌套字典的方式
更加推荐第2种列表推荐字典的方式,更好用。
data\id.csv数据为:
代码如下所示:
1 import csv 2 import os 3 4 import openpyxl 5 6 7 def getFileDir(*args): 8 ''' 9 获取工程中文件路径,可以在根目录下面新建一个文件,在文件中填写该方法 10 :return:返回文件所在路径 11 ''' 12 #获取python工程的根目录,它获取rootPath的目录即为根目录 13 rootPath = os.path.dirname(__file__) 14 filePath = os.path.join(rootPath, *args) 15 return filePath 16 17 def getCsvListData(*file,header=True): 18 ''' 19 第1种:获取csv文件内容,返回嵌套list结果 20 :param file: 参数化文件路径 21 :param header: 参数化文件第一行是否有头部 22 :return: list嵌套list [[],[],[]] 23 ''' 24 idsCsvList = [] 25 with open(getFileDir(*file), encoding="utf-8") as f: 26 readContent = csv.reader(f) 27 if header: 28 #如果有头部,跳过头部 29 next(readContent) 30 for item in readContent: 31 idsCsvList.append(item) 32 return idsCsvList 33 34 def getCsvDictData(*file): 35 ''' 36 第2种:获取csv文件内容,返回list嵌套dict结果 37 :param file: 参数化文件路径 38 :return: list嵌套dict, [{},{},{}] 39 ''' 40 idsCsvDictList = [] 41 with open(getFileDir(*file), encoding="utf-8") as f: 42 readContent = csv.DictReader(f) 43 for item in readContent: 44 idsCsvDictList.append(item) 45 return idsCsvDictList
上面两个方法一个是列表嵌套列表,一个是列表嵌套字典的封装,需要注意:
getCsvListData即列表嵌套列表的方式,需要判断csv表格第一行是否是头部,如果是需要跳过,这样读出来的内容才都是数据,如果不是则不需要跳过;
而getCsvDictData即列表嵌套字典的方式,则要求csv表达第一行必须是头部,且不需要跳过,它会把第一行的头部当作字典的key来处理。
封装getCsvListData,getCsvDictData即可调用,代码如下:
1 import pytest 2 import requests 3 4 from utils import getCsvListData, getCsvDictData 5 6 host = "http://66.66.66.66:9000" 7 8 @pytest.mark.flaky(reruns=3,reruns_delay=2) 9 @pytest.mark.parametrize("id,message",getCsvListData("data","id.csv")) 10 def testGetCsvMsg(id,message): 11 ''' 12 普通的GET类型接口,csv获取list嵌套list参数化数据 13 :return: 14 ''' 15 getUrl = host + "/pinter/com/getSku" 16 paramContent = {"id":id} 17 response = requests.get(getUrl,params=paramContent) 18 print(response.json()) 19 print(response.text) 20 # assert response.json().get("code") == '0' 21 assert response.json().get("message") == message 22 23 #参数化,csv获取list嵌套dict参数化数据 24 #失败重试,健壮性,最大3次,每次延迟2秒 25 @pytest.mark.flaky(reruns=3,reruns_delay=2) 26 @pytest.mark.parametrize("param",getCsvDictData("data","id.csv")) 27 def testGetCsvMsg(param): 28 ''' 29 普通的GET类型接口,csv获取list嵌套dict参数化数据 30 :return: 31 ''' 32 getUrl = host + "/pinter/com/getSku" 33 paramContent = {"id":param.get("id")} 34 response = requests.get(getUrl,params=paramContent) 35 print(response.json()) 36 print(response.text) 37 assert response.json().get("message") == param.get("message")
标签:return,list,response,嵌套,pytest,参数,csv,id From: https://www.cnblogs.com/miaomiaokaixin/p/17861759.html