首页 > 其他分享 >pytest参数化数据来源于csv文件时,如果读取参数化数据?

pytest参数化数据来源于csv文件时,如果读取参数化数据?

时间:2023-11-28 13:34:09浏览次数:41  
标签:return list response 嵌套 pytest 参数 csv id

一、问题

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

相关文章

  • KBP210-ASEMI整流桥KBP210参数、封装、尺寸
    编辑:llKBP210-ASEMI整流桥KBP210参数、封装、尺寸型号:KBP210品牌:ASEMI封装:KBP-4正向电流:2A反向电压:1000V引线数量:4芯片个数:4芯片尺寸:95MIL漏电流:<5ua恢复时间:>500ns浪涌电流:60A芯片材质:正向电压:1.10V封装尺寸:如图特性:插件、薄体扁桥工作结温:-55℃~150℃包装方式......
  • pytest + yaml 框架 -39.多账号操作解决方案
    前言最近有小伙伴提到,有写场景需要用到2个账号来回切换操作该如何解决。(备注:从v1.2.4以后新版本不再公开,新功能内部VIP学员可以使用,公开版本仅解决bug,不提供新功能了。)先获取账号token前面教程有讲到全局登录一次,后面所有的请求都会拿着全局登录的账号token去访问请求。现在......
  • AMD锐龙8040系列挤牙膏了!参数已出炉
    按照以往的节奏,AMD将会在明年1月初的CES展会上发布全新的锐龙8000系列移动处理器.随着时间的临近,关于锐龙8000系列的曝光也逐渐增多。日前有媒体放出了8040系列新品的产品命名和部分参数,AMD属实是挤了波牙膏。根据曝光,最顶级为锐龙98940H,和锐龙97940H一样,依然是8核心16线程,最......
  • 【pytest】基于钩子函数与conftest实现多套环境切换
    项目路径config.pyfromutils.connect_mysqlimportDbConnectclassBaseConfig:VERSION="v1.0"EMAIL="[email protected]"APPID="10086"classTestConfig(BaseConfig):BASE_URL="http://xxxx:8201"......
  • js逆向-Mytoken请求参数逆向
    声明本文仅供学习参考,如有侵权可私信本人删除,请勿用于其他途径,违者后果自负!如果觉得文章对你有所帮助,可以给博主点击关注和收藏哦!前言目标网站:aHR0cHM6Ly93d3cubXl0b2tlbmNhcC5jb20v接口:aHR0cHM6Ly9hcGkubXl0b2tlbmFwaS5jb20vdGlja2VyL2N1cnJlbmN5bGlzdGZvcmFs目标参数:code......
  • 数组作为函数参数(冒泡排序)
    往往我们在导代码的时候,会将数组作为参数传个函数,比如我们要实现一个冒泡排序:函数讲一个整形数组进行排序(主要讲算法思想)#include<stdio.h>voidbubble_sort(intarr[],intsz){inti=0;//确认冒泡函数的趟数//intsz=sizeof(arr)/sizeof(arr[0]);//注:这里不能在void函......
  • 金蝶云星空表单插件传递参数到服务插件
    一、业务需求操作售后单行反关闭时将当前选中行的序号传递到服务端,然后在服务端接收序列号,根据序列号处理相关逻辑。二、开发实现2.1、传递参数售后单表单插件的BeforeDoOperation事件publicoverridevoidBeforeDoOperation(BeforeDoOperationEventArgse){base.Befo......
  • 字段和字段参数介绍 单表增加
    classBook(models.Model):#如果不写id,会默认一个id,并且自增#primary_key=True表示该字段是主键,一个表中只能由一个主键#id=models.AutoField(primary_key=True)#varchar类型,长度,#字段是否可以为空:null=True,可以为空#默认值:default='未知书名......
  • Spring MVC学习随笔-控制器(Controller)开发详解:接受客户端(Client)请求参数
    学习视频:孙哥说SpringMVC:结合Thymeleaf,重塑你的MVC世界!|前所未有的Web开发探索之旅第三章、SpringMVC控制器开发详解3.1核心要点......
  • 可变参数
    从jdk1.5开始,Java支持传递同类型的可变参数给一个方法在方法声明中,在指定参数类型后加一个省略号…一个方法中只能指定一个可变参数,它必须是方法的最后一个参数,任何普通的参数必须在它之前声明packageJavaSE.可变参数;publicclassDemo01{publicstaticvoidmain(String[......