python测试框架之pytest (四)fixture

一 引言
在测试过程中,通常会包括三个步骤,前置、执行测试、后置,pytest框架中,提供了类似的函数。

模块级别:setup_module (前置) / teardown_module(后置) ->不在类中,全局的

函数级别:setup_function(前置)/ teardown_function(后置) ->不在类中

类级别: setup_class (前置) / teardown_class (后置) ->只在类中前后运行一次

方法级别:setup_method(前置)/ teardown_method (后置)->类中方法前后

用例级别:setup (前置)/ teardown (后置)->运行测试用例的前后

但是,这种前置、后置处理方式存在一定的缺陷。假如,一个测试类中,存在多个测试方法,每一个测试方法需要不同的前置、后置,该怎么处理会比较好呢?

pytest提供了一种高级的功能,fixture。可以通过实现文件共享机制,供模块、函数、类或者整个项目会话使用。

在conftest.py中实现文件共享机制,而且不需要import导入,pytest会自动去加载匹配对应的fixture。

二 fixture参数详解

@pytest.fixture(scope = "function", params=None, autouse=False, ids=None, name=None)

1、scope:控制fixture作用域,默认是function级别

 session:每次会话只需要运行一次,会话内所有模块、类、方法,都共享这个fixture

 module:每一个.py文件调用一次

 class:每一个类中调用一次

 function:每一个function或者类方法中都会调用

2、params:可选的参数列表

 ①Fixture可选的参数列表,支持列表传入

 ②默认为None,每个param的值。

 ③可通过request.param接受设置的返回值,params中有多少个元素,在测试时,引用次fixture的函数就会调用几次。

 ④可与参数ids一起使用,作为每个参数的标识。

3、autouse:是否自动执行设置的fixture,默认是False

 当autouse为True时,自动执行定义的fixture。

 当autouse为False时,测试函数需要调用定义的fixture,定义的fixture函数才能执行。

4、ids:指定每个字符串id

 当有多个params时,针对每一个param,可以指定id,这个id将变成测试用例名字的一部分。如果没有提供id,id将自动生成。

5、name:fixture的重命名

 默认是fixture函数的名称,可以通过name参数更改这个fixture的名称。更改后,如果这个fixture被调用,则使用更改后的名称。

三 fixture应用
3.1、函数名调用fixture

import pytest


@pytest.fixture
def fix_a():
    print("调用fix_a")


def test_a(fix_a

你可能感兴趣的:(python自动化测试,python)