Pytest装饰器: fixture
一、 fixture可以成为测试的装置,脚手架
fixture修饰器来标记固定的工厂函数,在其他函数,模块,类或整个工程调用时,它会被激活并优先执行,通常会被用于完成预置处理和重复操作
--对于测试用例准备性工作,挪出测试代码
--对于重复性的代码,使用函数进行重用
--这样的工作就应该给fixture来完成
二、作用
- 在测试执行之前,自动化转呗相关的测试环境
- 在测试执行之后,将相关的内容进行销毁
标记工厂函数: @pytest.fixture()
1.参数引用:写在测试函数的参数内
2.函数引用:@pytest.mark.usefixtures(“工厂函数名”)
1).标记测试类:每个测试方法都会运行一次
2).标记测试函数:只有测试函数会运行
举例:
- 访问baidu.com 标题中应该有“百度”
- 打开浏览器
- 输入 https://baidu.com
- 获取标题
- 断言“百度”出现在标题中
- 访问aliyun.com ,标题中应该有“阿里”
- 打开浏览器
- 输入 https://aliyun.com
- 获取标题
- 断言“阿里”出现在标题中
- 访问qq.com,标题中应该有“腾讯”
- 打开浏览器
- 输入 https://qq.com
- 获取标题
- 断言“腾讯”出现在标题中
问题:
1. 同一文件下,不同测试用例间怎么共享fixtrue ? 通过scope 参数
pytest.fixture(scope="function", params=None, autouse=False,ids=None,name=None)
scope:被标记方法的作用域(从上到下范围逐渐变大):有5个作用范围
function(默认值):作用于每个测试方法,测试类内部每个方法运行前都会调用一次;
作用最小,同一个函数中的测试用例
class: 作用于同一个类,每个class的所有test只运行一次
module: 作用于同一个模块(文件),每个module的所有test只运行一次
package: 作用于同一个包(文件夹),中的测试用例
session: 作用于整个session(慎用),每个session只运行一次, 在整个测试框架内pytest 来控制启动和关闭
2. 不同的文件如何共享fixtrue?
在pytest启动时,会自动加载的文件有两种:
-- pytest.ini文件
-- conftest.py 文件: 可以写python代码,可以写fixtrue(被@pytest.fixture装饰的python代码就叫fixture)
该文件会比测试用例先执行
所以建议,把fixture定义在conftest.py 文件中
这里定义fixtures可以被任何一个文件中的任何用例使用
也可以不把fixture定义在conftest.py 文件中,比如直接定义在abc.py中,然后手动import 导入要使用的文件中
还有那些应该定义在conftest.py 文件中呢?
-- stup
-- 常量
-- 初始化
-- pytest 的插件 /配置信息
3. 测试代码可以共享吗?怎么共享?
可以通过参数化测试;
数据驱动测试= 数据管理+参数化
数据管理:从excel , yaml,数据库等地方拿到数据放到fixture就可以了
一份代码,传递参数,执行多个测试用例;
fixture支持参数化,可以进行参数化测试;