fixture
fixture修饰器来标记固定的工厂函数,在其他函数,模块,类或整个工程调用它时会被激活并优先执行,通常会被用于完成预置处理和重复操作。
方法:
fixture(scope="function", params=None, autouse=False, ids=None, name=None)
常用参数:
scope:被标记方法的作用域
function(default):作用于每个测试方法,每个test都运行一次
class:作用于整个类,每个class的所有test只运行一次
module:作用于整个模块,每个module的所有test只运行一次
session:作用于整个session(慎用),每个session只运行一次
params(ids一般于该参数一起使用):(list类型)提供参数数据,供调用标记方法的函数使用
autouse:是否自动运行,默认为False不运行,设置为True自动运行
代码示例:
- fixture不加参数,案例调用初始化和清理方法需要显示调用初始化方法名,默认初始化和清理方法的作用范围是方法,每次运行一个test方法调用一次
2.fixture参数---scope
2.1. scope作用范围是class,即每运行一个类调用一次初始化和清理的方法
2.2. scope作用范围是module,即每运行一个模块(一个PY文件)调用一次初始化和清理的方法(每个模块都需要写初始化方法和清理方法,这样才会运行每个模块都会执行一遍初始化方法和清理方法)
2.3. scope作用范围是session/package,即每运行包调用一次初始化和清理的方法,一般写conftest.py文件,放到工程根目录下,就可以全局调用了,如果放到某个package下,那么就只能在这个package下使用(后续介绍conftest.py)
3.fixture参数---autouse(自动让范围内的测试方法执行初始化方法和清理方法)
4.fixture参数---name参数是给fixtrue设置名称
5.fixture参数---params参数(params参数接受列表类型的数据 实现参数化功能)- 相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为进行了完全的分离,这样的测试脚本设计模式叫做数据驱动;
- 参数化就是数据驱动实现的一种表现;
- 比如登录功能模块,使用3组不同的用户名和密码进行登录来验证登录功能模块的正确性,可以把这组不同的用户名和密码理解为参数化的数据;
- 为什么要使用不同的数据来对相同模块功能进行验证,因为这样测试会更充分一些,也可以检查程序是否处理了各种异常情况(如错误的用户名、错误的密码等)。
扩展:params传的列表中包含字典
6.fixture参数---ids参数(ids参数一般与params配合使用,ids主要是给每个参数化的方法中加个ids名字,效果见图)
一般会把fixtrue配置单独存放到一个文件conftest.py ,conftest.py文件使用见这篇文章 https://www.cnblogs.com/ritaliu/p/13523842.html