Pytest

01-pytest 框架介绍

2025-06-01  本文已影响0人  Surpassme

1. pytest 框架介绍

1.1 pytest框架引入

    什么是框架?简单来说就是一套抽象出来的工具集合,可以提供大量组件、工具和功能等。一般把重复工作通过代码封装好,实现多次重复调用。对于测试框架而言,通常包含用例发现用例管理用例执行配置管理日志管理数据管理测试报告等功能。

1.1.1 测试框架能解决什么问题

    在整个测试过程中,常见的流程为编写测试计划用例设计与编写用例执行Bug生命周期管理与跟踪编写测试报告,在此期间也会包含团队或跨团队间的开会沟通等。

    在用例执行期间和Bug生命周期管理与跟踪阶段是会一直重复出现。那么我们可以把整个执行过程封装成为一个框架,每次只要我们把测试用例提交,让框架帮忙执行用例和管理。在Bug生命周期管理期间,提交Bug也是重复的,而在提交Bug时,是需要运行结果做为支撑,这个时候,我们也可以通过框架生成一份完整漂亮的测试报告。

    基于以上原因,所有重复工作,我们都可以使用框架的方式实现,所以需要自行设计和编写代码,而用例执行和生成测试报告则可以由pytest和其插件辅助完成。

1.1.2 测试框架分类

1.1.3 pytest是什么

    pytest是一款基于Python语言的测试框架,可用于编写和执行测试代码,通常应用于自动化测试领域,可进行单元测试、接口测试、Web/App自动化测试。

1.pytest 特点

    随着DevOps的不断落地,pytest也越来越流行。其主要特点如下所示:

与Selenium/PlayWright/Appium等工具实现UI自动化测试,也可以与Requests实现API自动化测试

2.官网

1.2 技术前提

1.2.1 技术前提

1.2.2 适合人群

1.3 环境准备

    pytest 依赖于 Python ,需要先安装Python,然后再安装 pytest,安装pytest命令:

pip -U install pytest # Windows
pip3 -U install pytest # Linux/MacOS 

安装指定版本的pytest: pip install pytest==8.3.5
查看已经安装的pytest: pip show pytest

    查看pytest 支持的命令和参数

pytest  --help # 第一种方式
pytest -h  # 第二种方式

1.4 pytest 快速上手

    创建文件 test_run_pytest.py,输入以下内容:

def test_01():
    assert 1==1

    pytest 有三种启动方式:

pytest test_run_pytest.py # 方式一
pytest                    # 方式二
import  pytest

def test_01():
    assert 1==1


if __name__ == '__main__':
    pytest.main([" -s"],"test_run_pytest.py")

    以PyCharm为例,在对应的测试用例前面点击Run 'Python tests for tes...'

1.5 pytest 框架结构

    在执行测试过程中,我们通常会做一些准备工作,再进行测试,测试完成后也会尽量恢复原状。因此我们也希望测试框架也提供类似的功能,即测试前和测试完成后的一些方法。

    大多数的测试框架都会提供setupteadown,在setup中做测试前准备,在teardown中提供测试完成后的测试清理,恢复原状等。pytest提供了相对自由和层次丰富的setup和teardown框架结构,支持5个层级的setup和teardown,分别为session会话级module模块级function函数级class类级method方法级

    以上级别用在初始化setup和销毁teardown中,也可以配合pytest中的fixture,使得功能变得更强大。

# @IDE:      PyCharm
# @Project:  PyCharmProjects
# @File:     test_setup_teardown.py
# @Time      2025-03-10 22:28
# @Author:   Surpass Lee
# @E-mail:   surpassmebyme@gmail.com

import  pytest

def setup_module():
    print("调用 module 中的 setup")

def teardown_module():
    print("调用 module 中的 teardown")


def setup_function():
    print("调用 function 中的 setup")


def teardown_function():
    print("调用 function 中的 teardown")

def test_setup_teardown():
    print("调用 测试方法...")

if __name__ == '__main__':
    pytest.main(" -s ","test_setup_teardown.py")

    运行结果如下所示:

调用 module 中的 setup
调用 function 中的 setup
调用 测试方法...
调用 function 中的 teardown
调用 module 中的 teardown
# @IDE:      PyCharm
# @Project:  PyCharmProjects
# @File:     test_setup_teardown_class.py
# @Time      2025-03-10 22:37
# @Author:   Surpass Lee
# @E-mail:   surpassmebyme@gmail.com
import pytest

class TestClass():

    def setup_class(self):
        print("调用 class 中 setup")

    def teardown_class(self):
        print("调调用 class 中  teardown")

    def setup_method(self):
        print("调用 method 中  setup")

    def teardown_method(self):
        print("调用 method 中  teardown")

    def testcase_01(self):
        print("调用testcase_01")

    def testcase_02(self):
        print("调用testcase_02")

if __name__ == '__main__':
    pytest.main(" -s ","test_setup_teardown_class.py")

    运行结果如下所示:

test_setup_teardown_class.py::TestClass::testcase_01 
调用 class 中 setup
调用 method 中  setup
PASSED              [ 50%]调用testcase_01
调用 method 中  teardown

test_setup_teardown_class.py::TestClass::testcase_02 
调用 method 中  setup
PASSED              [100%]调用testcase_02
调用 method 中  teardown
调用 class 中  teardown

1.6 pytest 查找原则和命名方法

    pytest 根据一定的规则搜索并运行测试,标准和测试搜索规则如下所示:

  1. 从一个或多个目录开始查找,可以在命令行指定文件名或目录名,如果未指定,则使用当前目录
  2. 在该目录和所有子目录递归查找测试模块

测试模块是指文件名以test开头或结尾的文件,例如test_*.py*_test.py 的文件

  1. 在测试模块中查找以test开头或结束的函数
  2. 在测试模块中查找以Test开头或结束的类,再查找以test开头或结束的方法

    通常测试模块、测试类、测试函数/方法的命名都是以test开头或结束。如果不遵守这个命令规则,则无法搜索到测试模块、测试类、测试函数/方法,导致无法运行测试用例。

上一篇 下一篇

猜你喜欢

热点阅读