测试老宅男扶摇

导航

Selenium4Web自动化8-Pytest入门到实战

一、unittest和pytest框架对比

1.unittest框架介绍

Unittest是Python标准库中自带的单元测试框架,Unittest有时候也被称为PyUnit,就像JUnit是Java语言的标准单元测试框架一样,Unittest则是Python语言的标准单元测试框架。
Unittest支持自动化测试,测试用例的初始化、关闭和测试用例的聚合等功能,它有一个很重要的特性:它是通过类(class)的方式,将测试用例组织在一起。

2.pytest框架介绍

Pytest是Python的另一个第三方单元测试库。它的目的是让单元测试变得更容易,并且也能扩展到支持应用层面复杂的功能测试。
pytest的特性有:
支持用简单的assert语句实现丰富的断言,无需复杂的self.assert*函数
自动识别测试模块和测试函数
模块化夹具用以管理各类测试资源
对 unittest 完全兼容,对 nose基本兼容
支持Python3和PyPy3
丰富的插件生态,已有1000多个各式各样的插件,社区繁荣
插件链接:https://docs.pytest.org/en/latest/reference/plugin_list.html

3.unittest和pytest框架对比

4.pytest 安装

a)安装
pip install pytest
b)验证安装
pytest --version
c) 运行模式的配置

d) pytest文档
官方文档:https://docs.pytest.org/en/latest/contents.html

3.pytest的用例运行规则
1)pytest将在当前目录及其子目录中运行所有格式为test_.py或者_test.py文件
2)测试方法/测试函数 默认必须是test开头
3) 测试类必须是Test开头
4) 测试类不能有构造方法 init

二、Pytest的常用应用

1.断言pytest

借助Python的运算符号 和 assert关键字 来实现的。

2.pytest常用运行参数

"-s" 参数 用于关闭捕捉,从而输出打印信息到控制台
"-v" 参数 用于显示具体的用例执行信息‘
通过Pytest --help 查看帮助

1)运行名称中包含某字符串的测试用例
-k

  1. 简化输出信息
    -q

  2. 如果出现一条测试用例失败,则退出测试
    -x

  3. 指定目录以及特定类或方法执行

pytest.main(['-s','./doc/test_112233.py::TestDemo::test_case_03'])

3.生成测试报告

生成junit xml文件测试报告

4.用例失败控制

在第N个很用例失败之后,结束测试执行

pytest.main(['--maxfail=2'])

5.通过标记表达式执行

pytest.main(['-m','smoke'])

这条命令会执行被

装饰器 @pytest.mark.smoke 装饰的所有测试用例

先在pytest.ini 文件中注册自定义标记

6.多进程运行用例

安装pytest-xdist:
pip install pytest-xdist

# 将测试执行发送到多个cpu
# pytest.main(['-n','2','test_many.py'])
# 使用与计算机具有cpu内核一样多的进程
pytest.main(['-n', 'auto', 'test_many.py'])

PS:最新版本的pytest和插件发现跑不起来
已验证可运行版本:
pytest:6.1.2 pytest-xdist 1.31.0

7.重新运行失败用例

pytest-rerunfailures是一个可以使pytest重新运行测试的插件,以消除间歇性故障。
安装要求:
您需要具备以下先决条件才能使用pytest-rerunfailures:
安装
pip install pytest-rerunfailures

Python 3.5,最高3.8或PyPy3
pytest 5.0或更高版本
目前已针对最近的5个次要pytest版本测试了该软件包。如果您使用的是较早版本的pytest,则应考虑更新或使用此软件包的较早版本之一。

重新运行所有测试失败用例

pytest.main(['--reruns', '3', 'test_rerun.py'])

在每次重跑之间,增加一次延迟时间

pytest.main(['--reruns', '3','--reruns-delay','2','test_rerun.py'])

8.pytest的setup和teardown函数

用例前置和后置
setup和teardown 可以在类的外面和里面使用

9.pytest配置文件

pytest.ini文件中如果有中文,可能会出编码问题,需要把文件设置为gbk
1.选择pytest.ini文件
2.点击 file选项
3.选择 File Encoding后
4.选择 GBK
5.选择convert

10.pytest常用插件

插件列表网址:https://docs.pytest.org/en/latest/reference/plugin_list.html
pytest-html插件
安装:
pip install pytest-html
使用方法: 命令行格式:pytest --html=用户路径/report.html

三、Pytest高阶用法之函数数据参数化

单参数、多参数、函数数据参数化

方法:
parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)
常用参数:
argnames:参数名
argvalues:参数对应值,类型必须为list
当参数为一个时格式:[value]
当参数个数大于一个时,格式为:[(param_value1,param_value2.....),(param_value1,param_value2.....)]
使用方法:
@pytest.mark.parametrize(argnames,argvalues)
️ 参数值为N个,测试方法就会运行N次

四、Pytest之Fixture介绍

官方原话:
https://docs.pytest.org/en/latest/explanation/fixtures.html#about-fixtures
pytest fixtures被设计为明确的、模块化的以及可扩展的
什么是fixtures
在测试中,fixture为测试提供了已定义的,可靠的和一致的上下文。这可能包括环境(例如,通过已知的参数配置数据库)或内容(例如,数据集)。
Fixtures定义了构成测试准备阶段的步骤和数据。在pytest中,它们是为这些目的而定义的函数。它们也可以用来定义测试执行阶段;这是一个设计复杂用例的强大技术。
测试功能通过参数访问由fixtures设置的服务,状态或其他操作环境。对于测试功能使用的每个fixture,通常在测试功能的定义中都有一个参数(在 fixture后命名)。
**我们可以通过用修饰器@pytest.fixture来告诉pytest某个特定函数是一个fixture **。

五、Conftest.py

conftest.py是pytest特有的本地测试配置文件,既可以用来设置项目级的Fixture,也可以用来导入外部插件,还可以用来指定Hook函数(钩子函数)
conftest.py文件名称是固定,pytest会自动识别该文件,只作用于它所在的目录及子目录

六、Conftest.py+fixture+yield 实现用例前置后置

通过Conftest.py+fixture+yield,可轻松实现用例前置后置,包括项目级的

#coding=gbk
import pytest

@pytest.fixture()
def fix1():
    print("\n开始执行fix1")
    yield
    print("\n结束执行fix1")

posted on 2022-10-24 15:38  测试老宅男扶摇  阅读(196)  评论(0编辑  收藏  举报