Python中Pytest测试框架的fixture使用详解
fixture的目的是提供一个测试的基线,在此基线基础上,可以更可靠的进行重复测试。
1、fixture的含义
fixture的目的是提供一个测试的基线,在此基线基础上,可以更可靠的进行重复测试。
2、fixture的优势
Pytest的fixture相对于传统的xUnit的setup/teardown函数做了显著的改进:
(1)测试fixture有明确的名称,通过在函数/模块/类或者整个项目中激活来使用
(2)测试fixture是模块化的实现,使用fixture名即可触发特定的fixture,fixture可以在其他fixture中进行使用测试fixture不仅可以进行简单的单元测试,也可以进行复杂的功能测试。可以根据配置和组件的选项进行参数化定制测试,或者跨函数/类/模块或者整个测试过程进行测试。
(3)pytest依然支持经典的xUnit的样式,你可以根据自己的喜好混合两种样式。
3、fixture参数
- scope
- params
- autouse
- ids
- name
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
|
4、实战一:fixture作为参数使用
测试函数可以通过接受一个已经命名的fixture对象来使用它们。对于每个参数名,如果fixture已经声明定义,会自动创建一个实例并传入该测试函数。
fixture函数通过装饰器标志@pytest.fixture来注册。
下面是一个简单的独立的测试模块,包含一个fixture及使用它的测试函数。
使用场景:
- 用例1需要登录
- 用例2不需要登录
- 用例3需要登录
用法
在方法前面加@pytest.fixtrue()
实战
- 单个fixture
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
- 多个fixture
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
5、实战二:fixture的作用范围
测试函数可以通过接受一个已经命名的fixture对象来使用他们。
对于每个参数名,如果fixture已声明定义,会自动创建一个实例并传入该测试函数。fixture函数通过装饰器标志@pytest.fixture来注册。
下面是一个简单的独立的测试模块,包含一个fixture及使用它的测试函数
名称 | 范围 | 说明 |
function | 函数级 | 每一个函数或方法都会调用 |
class | 类级别 | 每个测试类只运行一次 |
module | 模块级 | 每一个.py文件调用一次 |
package | 包级 | 每一个python包只调用一次(暂不支持) |
session | 会话级 | 每次会话只需要运行一次,会话内所有方法及类,模块都共享这个方法 |
作用范围顺序:session》module》class》function
使用场景
整个模块有多条测试用例,需要在全部用例执行之前打开浏览器,全部执行之后去关闭浏览器,打开和关闭操作只执行一次。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
return 与 yield的区别:
- return:在程序函数中返回某个值,返回之后函数不在继续执行,彻底结束。
- yield: 带有yield的函数是一个迭代器,函数返回某个值时,会停留在某个位置,返回函数值后,会在前面停留的位置继续执行直到程序结束
6、实战三:fixture与conftest.py结合使用
在使用之前我们先来了解什么是conftest.py?
实现测试用例的过程中,当你发现需要使用来自多个文件的fixture函数的时候,可以将这些fixture函数放到conftest.py中。
你不需要导入这些fixture函数,它会由pytest自动检索。
fixture函数的检索顺序是从测试类开始,然后测试的模块,然后就是conftest.py文件,最后是内置的插件和第三方插件。
使用场景
你与其他测试工程师合作一起开发时,公共的模块要在不同文件中,要在大家都访问到的地方(建议可以放在项目的根目录,因为找到conftest.py文件,先在同级目录找,如果同级目录找不到时,会向上级目录继续找,指导找到为止)
ps:conftest.py名称是固定,不能修改
实战
conftest.py的内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
test_conftestDemo.py的内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
7、实战四:fixture参数化
测试过程中需要大量的测试数据,如果每一个测试用例都编写一条测试用例,用例将是非常庞大的。
一般会使用将测试用例用到的数据一参数的形式传入待测试用例中,并为每条测试数据生成一个测试结果数据。
使用场景
测试离不开数据,为了数据灵活,一般数据都是通过参数传的
使用方法
在fixture方法上加装饰器@pytest.fixture(params=[1,2,3]),就会传入三个数据1,2,3,分别将这三个数据传入到用例当中。传入的数据需要使用一个固定的参数名request来接收。
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 |
|
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】
更多推荐
所有评论(0)