”测试开发全日制学徒班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 --version
![image]()
-
安装成功
![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::类名::方法名
-
-
-






























浙公网安备 33010602011771号