Python+Pytest+Yaml+Allure数据参数化(DDT)数据驱动(一)

我们在做数据之前要知道几个问题

1、在代码层面怎么来数据驱动

2、yaml文件是什么

3、怎么用yaml文件实现对应的数据驱动

我们用的是pytest框架所以相对来说是简单的,我们通过pytest框架来实现,而框架中要数据驱动用到我们装饰器就好啦@pytest.mark.parametrize(参数名,参数数据)

那参数化就是DDT :把对应的数据提取出来 进行统一维护

参数1:参数的名字

参数2: 参数的数据列表

那我们的参数数据要什么数据格式?我们知道有字典 元祖 字符串....

我们要对应的数据话肯定是多组数据

数据1,数据2,数据3\] 列表 (数据1,数据2,数据3)元祖 \[{k:v},{k:v},{k:v}\]列表套字典------推荐,用的比较多 \[\[1\],\[2\],\[3\]\]列表套列表 \[(1),(2),(3)\]列表套元祖 好 那我们现在简单写一个小demo ```python import pytest # data 是我们的数据 data = ['小王','小张','小李'] # 通过用这个装饰器(data传入的参数列表需要有一个参数名来接收name) @pytest.mark.parametrize('name',data) # 给到name以后 需要给到test_01参数 去接受这个值 def test_01(name): print('当前运行的用户名是:',name) if __name__ == "__main__": pytest.main(['-vs']) ``` 运行结果 ![](https://i-blog.csdnimg.cn/direct/29a4bfbea131496892c109c742117555.png)我们中间的数据项有多少个,他就会执行多少次 我们的data中有三个 就执行三次 那如果列表套列表我们要怎么写呢--通过下标获取 ```python import pytest # data 是我们的数据 data = [['小王',22],['小张',23],['小李',24]] # 通过用这个装饰器(data传入的参数列表需要有一个参数名来接收name) @pytest.mark.parametrize('name',data) # 给到name以后 需要给到test_01参数 去接受这个值 def test_01(name): print('当前运行的用户名是:',name[0]) print('当前运行的用户年龄是:', name[1]) if __name__ == "__main__": pytest.main(['-vs']) ``` 运行结果 ![](https://i-blog.csdnimg.cn/direct/cfffc92c894245849597afa1a032d5b6.png) 好 我们学会可以后在项目中怎么应用呢? 我们对应的登陆中是不是有对应的账户名密码等等一些参数 那我们可以在登陆写一下测试用例 登陆成功 密码错误 用户名错误 等等。。。 那我们来写一下 先导包 ```python @pytest.mark.parametrize() ``` 首先我们的格式是列表套字典 ```python data = [ {'username': 'aaa', 'password': '1245346', 'res': '登录成功'}, {'username': 'aaa', 'password': '1234ddd56', 'res': '密码错误'}, {'username': 'djjdjd', 'password': '15634432', 'res': '用户名不存在'} ] ``` 然后把data和我们的参数传入装饰器中 ```python @pytest.mark.parametrize('case_info',data) ``` 再把我的case_info传入方法中 ```python def test_01_login(case_info): ``` 接下来我们data中和断言中也需要相应改动---引用上面的数据 ```python data = { 'accounts': case_info['username'], 'pwd': case_info['password'], 'type': 'username' } ``` ```python assert mag_ret == case_info['res'], f'错误,我们当前返回的值是:{mag_ret}' ``` 写好啦 我们接下来运行看看 第一个用例通过 这是正向测试 期望和实际一样 ![](https://i-blog.csdnimg.cn/direct/d7e362de321c4e15a8d1f0c436a5a772.png) 第二个也是 我们改了密码 期望是密码错误 实际返回的也是密码错误 ![](https://i-blog.csdnimg.cn/direct/9f468559ddec468ba39e557220e9ac3d.png) 第三个 账号密码都不对 期望返回的是用户名不存在但是实际返回的是登陆账号不存在 ![](https://i-blog.csdnimg.cn/direct/10e1d371766e461485a44b211e19f7c2.png) 我们看懂了DDT了以后只需要维护我们的测试用例,如需要测试 直接引用就好啦 是不是很方便 但是目前我们只是把测试数据提取出来 那不同的接口可不可以把接口全部提取出来呢?---可以 因为我们发送请求无非是四要素不一样 你需要提取什么就提取什么 那我们这些都提取出来,我们可以通过yaml文件来进行操作,或者说我们需要有一个存放数据的地方excel 、yaml 也可以数据库这些都是可以的。 以上我们知道了 我们的数据驱动是通过装饰器来实现 那我们接下来说yaml是什么

相关推荐
B站_计算机毕业设计之家10 分钟前
猫眼电影数据可视化与智能分析平台 | Python Flask框架 Echarts 推荐算法 爬虫 大数据 毕业设计源码
python·机器学习·信息可视化·flask·毕业设计·echarts·推荐算法
PPPPPaPeR.14 分钟前
光学算法实战:深度解析镜片厚度对前后表面折射/反射的影响(纯Python实现)
开发语言·python·数码相机·算法
JaydenAI18 分钟前
[拆解LangChain执行引擎] ManagedValue——一种特殊的只读虚拟通道
python·langchain
骇城迷影22 分钟前
Makemore 核心面试题大汇总
人工智能·pytorch·python·深度学习·线性回归
Wpa.wk24 分钟前
接口自动化 - 接口鉴权处理常用方法
java·运维·测试工具·自动化·接口自动化
长安牧笛25 分钟前
反传统学习APP,摒弃固定课程顺序,根据用户做题正确性,学习速度,动态调整课程难度,比如某知识点学不会,自动推荐基础讲解和练习题,学习后再进阶,不搞一刀切。
python·编程语言
码界筑梦坊37 分钟前
330-基于Python的社交媒体舆情监控系统
python·mysql·信息可视化·数据分析·django·毕业设计·echarts
森焱森42 分钟前
详解 Spring Boot、Flask、Nginx、Redis、MySQL 的关系与协作
spring boot·redis·python·nginx·flask
he___H1 小时前
双色球红球
python