python测试框架-pytest (2)

方法级别:setup_method/teardown_method 开始与方法的始末、每个方法运行强后都运行一遍(与函数级别的区别:方法在类中,函数不在类中)

pytest参数化与数据驱动

参数化一般与数据驱动一起使用,

参数化:将变化的测试数据以参数的形式传入到测试方法,待测试的输入和输出是一组数据,可以把测试数据组织起来,用不同的测试数据调用相同的测试方法

数据驱动:数据的改变从而驱动自动化的执行,最终引起测试结果的改变,测试数据的数据驱动、测试步骤的数据驱动、配置的数据驱动、po的数据驱动

pytest参数化

pytest自带参数化概念

加入参数化装饰器:@pytest.mark.parametrize("a, b, result", [1, 2, 3], [2, 3, 5], [0.3, 1, 1.3])

ids参数:定义每一组测试数据生成的测试用例的别名,多少组数据就对应有多少个ids

import pytest import yaml def add(a, b): return a + b class TestDate: @pytest.mark.parametrize("a, b", [(10, 20), (10, 30), (2, 6)]) def test_param(self, a, b): print(a + b) @pytest.mark.parametrize(["x", "y"], [(10, 20), (10, 30)]) def test_param2(self, x, y): # print(x + y) print(add1(x, y)) @pytest.mark.parametrize("a", "b", yaml.safe_load(open(r'E:\data.yaml'))) def test_param5(self, a, b): print(f'相加等于{add(a, b)}')

运行用例test_parm会得出三条测试用例数据:

image

pytest异常捕获

设计测试用例的时候要尽可能的区分类型,比如除数为0时,预期结果是抛出异常,则此用例pass,所以使用pytest捕获ZeroDivisionError异常,如果捕获到,则不报出异常 则此测试用例通过

with pytest.raises(ZeroDivisionError, TypeError): fixture高级用法 fixture 介绍:

官网 Features--Modular有详细介绍

fixture又名测试桩子,类似setup teardown

fixture 能做到setup teardown 做不到的事情

比如:一个模块里又很多用例,这些方法有的需要的前置条件不一样,如有的需要登录,有的不需要登录

def login(): print('登录') def test_search(): print('搜索') def test_search(): print('购物') def test_search(): print('下单')

如,如果使用setup teardown 只能是用例前后被调用,但是去搜索,首先不需要登录,所以就可以把login定义为fixture函数,然后传入到测试方法里
使用方法:在被重复调用的方法上加上@pytest.fixture()装饰器,如果某个方法需要登录,就传入login

@pytest.fixture() def login(): print('登录') def test_search(): print('搜索') def test_search(login): print('购物') def test_search(login): print('下单')

在命令行中使用执行回溯,可以看到fixture执行的详细过程:pytest test_case.py --setup-show

fixture 作用

Fixture是在测试函数运行前后,由pytest执行的外壳函数,代码可以定制,满足多变的测试需求,功能包括:

定于传入测试中的数据集

配置测试前系统的初始状态

为批量测试提供数据源等

Fixture是pytest用于将测试前后进行预备,清理工作的代码分类核心测试逻辑的一种机制

fixture用法

1- 类似setup teardown功能,但比setup teardown更灵活

2- 直接通过函数名调用或者装饰去@pytest.mark.usefixtures('test1')

3- 允许使用多个Fixture

4- 使用autouse自动应用,如果由返回值,需要穿fixture函数名

5- 作用域 session>module>class>function

使用-- setup-show 回溯fixture的执行过程

pytest test_case.py --setup-show

pytest yield

以上fixture记录的仅仅是setup,即测试用例运行前的操作,如果需要加上teardown的操作,需要在fixture函数中加入 yield

@pytest.fixture() def login(): print('登录') # 用例运行前登录 yield # 相当与 return 可以返回一些数据 如 yield token print('退出') # 用例结束后退出

conftest + fixture

conftest.py文件,它主要是实现数据(fixture)共享的文件,名字是固定的。

1- 第一,conftest.py文件当中,它储存的都是fixture,就是给用例提供做前置准备工作和后置清理工作的一个东西;

2- 第二,conftest.py文件可以将它的fixtures共享到它自己目录下的所有用例,用例当中如果使用fixture的话,是不需用导入conftest.py这个文件的,会直接自动去查找;

3- 第三,conftest.py它是属于层级共享的,也就是说,一个自动化项目当中,可以在不同的包下面去创建conftest.py这个文件。

运行原则:就近原则,如果当前包下没有conftest.py就会往上一层找

fixture 参数化

二、常用插件、数据驱动、编写pytest插件、Allure pytest常用插件 pip install pytest-ordering:控制用例的执行顺序

建议在编写测试用例的时候,能不让用例顺序执行就不顺序执行,这样可能会更好的暴露出问题

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzsdzz.html