Pytest-Pytest基础(持续学习更新)

fixture 之 conftest.py

fixture 优势
1、命名方式灵活,不局限于 setup 和 teardown 返几个命名
2、conftest.py 配置里可以实现数据共享,不需要 import 就能自动找到一些配置
3、scope="module" 可以实现多个.py 跨文件共享前置
4、scope="session" 以实现多个.py 跨文件使用一个 session 来完成多个用例


:arg scope: scope 有四个级别参数 "function" (默认), "class","module" or "session".
:arg params: 一个可选的参数列表,它将导致多个参数调用fixture 功能呾所有测试使用它
:arg autouse: 如果为 True,则为所有测试激活 fixture func 可以看到它。
    如果为 False(默讣值)则显式需要参考来激活 fixture
:arg ids: 每个字符串 id 的列表,每个字符串对应于 params 返样他们就是测试 ID 的一部分。
    如果没有提供 ID 它们将从 params 自动生成
:arg name: fixture 的名称。 返默讣为装饰函数的名称。 如果fixture 在定义它的同一
    模块中使用,夹具的功能名称将被请求夹具的功能 arg 遮蔽; 解决返个问题的一种方法
    是将装饰函数命名

conftest.py 配置

conftest.py 配置脚本名称是固定的,不能改名称
conftest.py 与运行的用例要在同一个 pakage 下,并且有__init__.py 文件
不需要 import 导入 conftest.py,pytest 用例会自动查找

fixture 之 yield 实现 teardown

1、yield 执行 teardown
    在用例前加前置条件,相当于 setup,既然有 setup 那就有 teardown,fixture 里面的 teardown
    用 yield 来唤醒 teardown的执行
2、yield 遇到异常
    a、如果其中一个用例出现异常,不影响 yield 后面的 teardown 执行,运行结果互不影响,并且全部
    用例执行完后,yield 呼唤 teardown操作
    b、如果在 setup 就异常了,那么是不会去执行 yield 后面的teardown 内容了
    c、yield 也可以配合 with 语句使用
3、addfinalizer 终结函数
    a、除了 yield 可以实现 teardown,在 request-context 对象中注册addfinalizer 方法也可以实现终结函数。
    b、yield 呾 addfinalizer 方法都是在测试完成后呼叫相应的代码,addfinalizer不同的是:
        他可以注册多个终结函数。
        返些终结方法总是会被执行,无论在乊前的 setup code 有没有抛出错诨。返个方法对于正确关闭
    所有的 fixture 创建的资源非常便利,即使其一在创建戒获取时失败。

fixture 之 autouse=True

调用 fixture 三种方法
1、函数或类里面方法直接传 fixture 的函数参数名称
2、使用装饰器@pytest.mark.usefixtures()修饰
3、autouse=True 自动使用

用例传 fixture 参数
方法一:先定义 start 功能,用例全部传 start 参数,调用该功能

装饰器 usefixtures
方法二:使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例

设置 autouse=True
方法三、autouse 设置为 True,自动调用 fixture 功能
start 设置 scope 为 module 级别,在当前.py 用例模块叧执行一次,autouse=True 自动使用
open_home 设置 scope 为 function 级别,每个用例前都调用一次,自动使用

参数化 parametrize

pytest.mark.parametrize 装饰器可以实现测试用例参数化。
参数组合
1.若要获得多个参数化参数的所有组合,可以堆叠参数化装饰器
在返个例子中设计的,叧有一条输入/输出值的简单测试功能。和往常一样函数的参数,
你可以在运行结果看到在输入和输出值
2.它也可以标记单个测试实例在参数化,例如使用内置的mark.xfail
参数组合
1.若要获得多个参数化参数的所有组合,可以堆叠参数化装饰器

assert断言

断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了。
什么是断言呢?
简单来讲就是实际结果和期望结果去对比,符合预期那就测试 pass,不符合预期那就测试 failed
为了写关于引发异常的断言,可以使用 pytest.raises 作为上下文管理器

未完,待续…

你可能感兴趣的:(pytest)