【pytest】(十二)参数化测试用例中的setup和teardown要怎么写?
还是一篇关于pytest的fixture在实际使用场景的分享。
fixture我用来最多的就是写setup跟teardown了,那么现在有一个用例是测试一个列表接口,参数化了不同的状态值传参,来进行测试。
那么对于这个用例的setup跟teardown,我就要在setup里插入不同状态的测试数据,并且在测试完成后,在teardown里清除掉插入的数据。
一、setup
不过在插入数据的时候,我不想要一次性的把所有状态的数据都插入进去。比如1,2,3,4,5 有5个状态的参数,我想执行1的时候,插入状态
1的数据,测试完成后,删除刚才插入的这条数据,后面以此类推。
那么,这里还是要用到参数传递的一个效果了,这个在之前的文章里也讲过,有兴趣可以去看下,这里不再赘述。
@pytest.fixture(params=[1, 2, 3, 4, 5])
def init_allot_task_status(request):
status = request.param
db = DB()
insert_allot_task_sql = """
INSERT INTO purchase_allot (`id`, `allot_sn`... )
""".format(10000086, status)
db.exec_sql(insert_allot_task_sql)
yield status #这里把参数给出去,供测试用例使用
delete_sql = "DELETE from sm_purchase_allot WHERE id = {}".format(10000086)
print("执行delete-sql:", delete_sql)
db.exec_sql(delete_sql)
db.close()
在yield之前,其实做的就是插入数据,并且通过yield把request.param拿到的参数给出去,给测试用例使用。
二、teardown
在yield之后,则就是删除之前插入的数据了,这里我为了方便,插入的测试数据id取了一个单独的,所以删除的时候直接删除这个id的数据即可。
再来看一下测试用例
def test_allot_list_query_by_status(init_allot_task_status):
"""
测试不同状态的列表查询
在fixture中做了参数化
1-待处理、2-处理中、3-已发货、4-已完成、5已取消
"""
payload = {"status": init_allot_task_status} # 因为fixture中的yield做了参数的返回,这里可以直接使用
r = requests.post(QA_URL + API_URL, json=payload, headers=HEADER)
result = r.json()
assert result["result"] == "ok"
assert result["errmsg"] == "success"
assert result["row"]["taskListOfPage"]["resultData"][0]["status"] == init_allot_task_status # 因为fixture中的yield做了参数的返回,这里可以直接使用
将fixture init_allot_task_status传入测试case中,这样的话 在case执行的时候会先执行fixture方法,而fixture在执行的时候,则会进行参数化,并且把每次使用的参数
返回给测试case,供测试用例发起请求,断言等使用。
三、执行测试
执行测试用例,可以看到最终的运行过程:

参数分别执行,并且在对应测试用例的开始跟结尾做好测试数据的插入和删除工作。
【pytest】(十二)参数化测试用例中的setup和teardown要怎么写?的更多相关文章
- perl5 第十二章 Perl5中的引用/指针
第十二章 Perl5中的引用/指针 by flamephoenix 一.引用简介二.使用引用三.使用反斜线(\)操作符四.引用和数组五.多维数组六.子程序的引用 子程序模板七.数组与子程序八.文件句 ...
- 利用WPF建立自己的3d gis软件(非axhost方式)(十二)SDK中的导航系统
原文:利用WPF建立自己的3d gis软件(非axhost方式)(十二)SDK中的导航系统 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew ...
- vue第十二单元(vue中过渡效果的实现)
第十二单元(vue中过渡效果的实现) #课程目标 熟练掌握transition组件的用法 熟练使用transition组件做过渡特效 熟练使用transition组件做动画特效 了解使用transit ...
- python单元测试框架pytest——fixture函数(类似unitest的setup和teardown)
pytest的setup和teardown函数(曾被一家云计算面试官问到过). pytest提供了fixture函数用以在测试执行前和执行后进行必要的准备和清理工作.与python自带的unitest ...
- python:pytest中的setup和teardown
原文:https://www.cnblogs.com/peiminer/p/9376352.html 之前我写的unittest的setup和teardown,还有setupClass和teardow ...
- Junit测试中的setup和teardown 和 @before 和 @After 方法
这几天做Junit测试接触到了setup和teardown两个方法,简单的可以这样理解它们,setup主要实现测试前的初始化工作,而teardown则主要实现测试完成后的垃圾回收等工作. 需要注意的是 ...
- 学习ASP.NET Core Razor 编程系列十二——在页面中增加校验
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- javaweb学习总结二十二(servlet开发中常见的问题汇总)
一:web应用的映射问题 通常我们从别人那里拷贝来的代码,自己会修改应用的名称,但是web映射的访问路径并没有修改,还是原来的映射. 解决方法: 工程右键--properties--myeclipse ...
- salesforce零基础学习(七十二)项目中的零碎知识点小总结(一)
项目终于告一段落,虽然比较苦逼,不过也学到了好多知识,总结一下,以后当作参考. 一.visualforce标签中使用html相关的属性使用 曾经看文档没有看得仔细,导致开发的时候走了一些弯路.还好得到 ...
随机推荐
- DRF比Django的认证和权限高在哪里
Django可以用LoginRequiredMixin和PermissionRequiredMixin给类视图添加认证和权限,DRF做了高级封装,提供了更简洁的实现方式.我们通过继续学习官网教程来进行 ...
- 【命令】htop命令
一.Htop的使用简介 大家可能对top监控软件比较熟悉,今天我为大家介绍另外一个监控软件Htop,姑且称之为top的增强版,相比top其有着很多自身的优势.如下: 两者相比起来,top比较繁琐 默认 ...
- setTimeout 是到了xx ms 就执行吗,了解浏览器的 Event-Loop 机制
要想 JavaScript 玩得溜,还得了解波 JavaScript 执行机制/(ㄒoㄒ)/~~. 个人博客:https://shansan.top 前言 最近看了波 JavaScript 相关的文章 ...
- Mac 下 IDEA 启动慢的问题
转自: http://blog.csdn.net/KingBoyWorld/article/details/73440717 从控制台来看,每次都会连接本地地址(127.0.0.1),问题可能就出在这 ...
- 从最长公共子序列问题理解动态规划算法(DP)
一.动态规划(Dynamic Programming) 动态规划方法通常用于求解最优化问题.我们希望找到一个解使其取得最优值,而不是所有最优解,可能有多个解都达到最优值. 二.什么问题适合DP解法 如 ...
- 166个最常用的Linux命令,哪些你还不知道?
linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心. 线上查 ...
- [leetcode]692. Top K Frequent Words频率最高的前K个单词
这个题的排序是用的PriorityQueue实现自动排列,优先队列用的是堆排序,堆排序请看:http://www.cnblogs.com/stAr-1/p/7569706.html 自定义了优先队列的 ...
- day121:MoFang:植物的状态改动(幼苗→成长期)&植物的浇水功能
目录 1.当果树种植以后在celery的异步任务中调整浇水的状态 2.客户端通过倒计时判断时间,显示浇水道具 3.客户端判断当前种植物状态控制图标的显示和隐藏 4.当用户单击浇水图标, 则根据当前果树 ...
- go mod 拉取私有仓库
前言 如果代码中依赖了本地的包, 这个包是托管在内网 Gitlab 中, 而且不是 HTTPS 服务,那么应该怎样使用 go mod 拉取代码呢? 本文会给你我的答案 正文 首先我们要知道, 如果本地 ...
- 【SpringBoot1.x】SpringBoot1.x 安全
SpringBoot1.x 安全 文章源码 环境搭建 SpringSecurity 是针对 Spring 项目的安全框架,也是 SpringBoot 底层安全模块默认的技术选型.他可以实现强大的 we ...