”测试开发全日制学徒班7期第12天“-Pytest测试框架

  • Pytest测试框架

    • 简介

      • Pytest 是一个非常流行的 Python 测试框架,并且兼容 unittest 框架,用于编写简单的单元测试和复杂的功能测试。 它非常易于使用,并且功能强大,广泛用于自动化测试、回归测试等各种场景。 pytest 提供了灵活的插件机制、优秀的错误报告、简洁的断言语法、以及丰富的配置选项。 Pytest 可以结合 Requests 实现接口测试; 结合 Selenium、Appium 实现自动化功能测试。 使用 Pytest 结合 Allure 集成到 Jenkins 中可以实现持续集成。

    • pytest安装与准备

      • 准备:python环境(版本号大于3.6)

      • pytest安装

        • 通过PyCharm终端命令安装

          • pip install pytest——安装pytest(之前没安装过pytest)image

          • pip install -U pytest——更新pytest(已安装过pytest的可以使用更新,将pytest更新到最新版)image

        • 通过PyCharm安装

          • 第一步image

          • 第二步image

          • 第三步image

          • 第四步:测试pytest安装是否成功,输入pytest --versionimage

            • 安装成功image

      • 将pytest设置成默认测试框架

        • 设置pytest为默认测试框架image

    • 第一个运行脚本

      • 示例:2个数相加image

    • Pytest命名规范

      • 文件:“test_” 开头或“ _test” 结尾

      • 类:“Test” 开头(首字母大写,如Test后面有其他单词,首字母也要大写)

      • 方法/函数:“test_”开头

      • 命名规则image
      • 命名规则的优点

        • 自动发现测试用例:Pytest 的命名规则可以让 Pytest 自动发现测试用例,只需按照规定的命名规则编写测试函数或类,Pytest 能够自动识别并执行这些测试。

        • 避免冲突和命名混乱:通过统一的命名规则,可以避免测试用例的命名冲突和混乱。每个测试函数或类都有明确的命名前缀,使其与其他函数或类区分开来,有助于测试代码的可读性和维护性。

        • 代码结构清晰:命名规则提供了一种规范的测试代码组织方式。测试函数和类的命名约定使得测试用例的层次结构清晰可见,更易于理解和维护。这对于大型项目或有大量测试代码的项目尤为重要。

        • 与其他测试框架兼容:许多其他测试框架也采用类似的命名规则,所以如果之前使用过其他测试框架,转换到 Pytest 会更加容易。可以在保持相同的命名约定的同时,切换到 Pytest 并享受其丰富的功能和优势。

    • pytest用例结构

      • 简介

        • 当编写测试用例时,通常可以将其分为三个主要部分:用例名称、用例步骤和用例断言。这三部分的组合可以清晰的确定测试的目的、执行过程和预期结果。

      • 测试用例组成

        • 用例名称

          • 测试用例中的用例名称指的是函数名,要使用 test_ 开头或者以 _test 结尾。

        • 用例步骤

          • 例步骤是描述测试执行的具体操作、流程或步骤。

        • 用例断言

          • 用例断言是描述在测试执行后应该满足的条件或预期结果。

    • Pytest测试用例断言(assert)

      • 简介

        • 在 pytest 中,断言(assert)用于验证期望的结果与实际的结果是否相符,assert 可以检查某个条件是否为 True,如果条件为 False,则会抛出 AssertionError 异常,并且测试失败。

          image

           

      • 示例代码

        • assert断言示例代码

          image

           

    • Pytest测试框架结构(setup/teardown)

      • 简介

        • Pytest 测试框架的结构是指如何组织和管理你的测试代码、测试数据、配置和其他支持文件,使得测试过程高效、清晰并且易于维护。

      • 测试装置

        • 简介

          • 测试装置又可以称为测试夹具,用于为测试提供固定的测试环境或资源。它允许在测试执行之前准备所需的资源,在测试执行后清理这些资源。在 pytest 中,支持unittest中的“setup”和“teardown”用法。

      • setup与teardown作用

        • setup:setup 用于为测试提供准备环境的代码。该函数在测试用例运行之前执行。通常被用来初始化测试环境,例如创建数据库连接、加载测试数据等。可以定义不同的作用域(函数级别、类级别、模块级别)的 setup。

        • teardown:teardown 函数用于在测试执行后进行清理工作。该函数测试用例运行完成后执行。通常用于释放资源,例如关闭数据库连接、删除临时文件等。可以定义不同的作用域(函数级别、类级别、模块级别)的 teardown。

      • setup与teardown函数的作用域

        • 全局模块级,在整个模块执行时只被执行一次(在最开头和最结尾的时候会被调用)

          • “setup_module”/“teardown_module”

            image

             

        • 类级,在执行测试类的时候会分别在前和后调用一次

          • ”setup_class“/“teardown_class”

            image

             

        • 函数级,在类外面,在每次执行测试用例的前和后时都被执行一次

          • “setup_function”/“teardown_function”

            image

             

        • 方法级,在执行测试方法的时候会分别在每个方法前后条用一次

          • “setup_method”/“teardown_method“

            image

             

    • Pytest参数化用例

      • 简介

        • Pytest 中的参数化是一种非常有用的功能,通过参数的方式传递数据,从而实现数据和脚本分离。允许在同一个测试函数上多次运行相同的测试,使用不同的输入数据进而生成多个测试用例。

      • 使用方法(传入单参数)

        • 格式: @pytest.mark.parametrize("变量名",[变量值]) def test_demo(变量名): result = 变量名 ...

          • 示例

            • 使用“@pytest.mark.parametrize()”装饰器为测试函数提供参数化数据。

              image

               

      • 传入多参数

        • 格式: @pytest.mark.parametrize("变量名1,变量名2",[ ["变量值1","变量值2"], ["变量值1","变量值2"], ["变量值1","变量值2"] ... ]) def test_demo(变量名1,变量名2): result = 变量名1,变量名2

          • 示例

            • 使用@pytest.mark.parametrize("变量名1,变量名2",[ ["变量值1","变量值2"], ["变量值1","变量值2"], ["变量值1","变量值2"] ... ])

              image

               

      • 用例重命名添加”ids参数“

        • 简介

          • 通过 ids 参数,将别名放在列表中。注意,ids 列表参数的个数要与参数值的个数一致。

        • 格式: @pytest.mark.parametrize("变量名1,变量名2",[ ["变量值1","变量值2"], ["变量值1","变量值2"], ["变量值1","变量值2"] ... ],ids = ["名称1","名称2","名称3"]) def test_demo(变量名1,变量名2): result = 变量名1,变量名2

          • 示例

            • @pytest.mark.parametrize("变量名1,变量名2",[ ["变量值1","变量值2"], ["变量值1","变量值2"], ["变量值1","变量值2"] ... ],ids = ["名称1","名称2","名称3"])

              image

               

      • 使用中文给用例重命名

        • 在项目文件下创建一个conftest.py文件

          image

           

          • 将ids设置成中文

            image

             

      • 传入笛卡尔积的参数(多组数据依次选取,接口测试使用较多)

        • 示例

          • 笛卡尔积参数取值

            image

             

    • Pytest标记测试用例

      • 简介

        • 在测试过程中,有时候需要对测试用例进行标记,以便在运行测试时选择性地执行或跳过某些测试。 Pytest 提供了一种灵活的测试标记功能,可以通过自定义的标记标签来对测试用例进行分类和标记。

      • 使用步骤

        • 在测试用例方法上加@pytest.mark.标签名(标签名必须为英文不能是中文)

          image

           

        • 在使用命令执行用例的时候加上-m “标签名”来指定要执行的测试用例

          image

           

    • Pytest设置跳过及预期失败的用例

      • 跳过用例

        • 使用装饰器设置跳过(使用pytest装饰器@pytest.mark.skip)

          • skip:用于标记测试用例,以指示该测试用例应该被跳过而不执行

            • 无条件跳过

              image

               

            • 写明跳过原因

              image

               

          • skipif:遇到特定情况跳过该测试用例。

            • 示例

              image

               

        • 方法中设置跳过用例(在方法下面加上pytest.skip("reason"))

          image

           

      • 预期失败

        • “xfail”于标记测试用例,以指示该测试用例是预期失败的。这意味着测试用例可以运行,但失败时不会被视为实际失败,而是被记录为已预期的失败。

          image

           

    • Pytest运行用例

      • 运行多条用例方法(命令行)

        • 执行包下面所有用例:pytest 包名

        • 执行单独一个pytest模块:pytest 文件名.py

        • 运行某个模块里面某个类:pytest 文件名.py::类名

        • 运行某个模块里面某个类里面的方法:pytest 文件名.py::类名::方法名

posted @ 2026-06-08 15:49  风致﹏  阅读(6)  评论(0)    收藏  举报