Pytest基本操作
- 1. 详解
-
- 1.1 命名规则:
- 1.2 自定义查找规则:
- 1.3 3种运行方式
- 1.4 执行顺序
- 2. 断言
-
- 2.1 定义
- 2.2 断言的规则
- 3. mark
-
- 3.1 mark的作用
- 3.2 mark的标记方式
- 3.3 注册标签名
- 3.4 skip跳过标记
- 4. pytest的参数化
- 5. pytest的夹具(fixture测试夹具)
-
- 5.1. 作用
- 5.2. 夹具应用场景
- 5.3. 夹具的定义及使用:
- 5.4. fixture的范围
1. 详解
一文5000字详解Pytest单元测试,看完不会来打我【保姆级教程】
1.1 命名规则:
🔸 模块名: test_*.py或者是 *_test.py(即以test_开头或_test结尾的py文件)
🔸类名:Test开头,且类里没有__init__函数(否则容易报错)
🔸方法名:test_开头
1.2 自定义查找规则:
我们还可以自定义查找的规则,但自定义的规则配置文件要放在你要运行的项目的根目录下(见上图),且配置文件要严格以pytest.ini命名,pytest.ini文件内容举例如下:
[pytest] # 只能修改=右边的值
python_files = demo_*.py # 模块名以demo_开头
python_functions = demo_* # 方法名以demo_开头
python_classes = Demo* # 类名名以Demo开头
1.3 3种运行方式
【pytest】一、pytest的3种运行方式,运行指定测试用例,跳过测试用例
1.4 执行顺序
pytest有自己内置的执行顺序规则,一般是从上往下,即同一个py文件中,从上往下执行测试用例。
2. 断言
参考文章:
pytest篇3-断言详解
2.1 定义
断言就是在测试代码中添加的一些判断逻辑,用于判断被测程序的实际输出是否符合预期结果。如果实际输出结果与预期不符,则断言抛出异常,测试失败;否则测试通过。(添加断言在对应的方法里面,做判断测试用例结果是否满足预期)
2.2 断言的规则
pytest断言的规则如下:
- 如果表达式为False,则断言失败,抛出AssertionError异常;
- 如果表达式为True,则断言成功,测试通过;
- 如果使用assert not表达式,则当表达式为True时,断言失败,测试失败;
- 如果使用assert == 表达式,则当两个表达式的值相等时,断言成功,否则断言失败。
3. mark
【pytest】使用 mark 标记及运行测试用例,注册、管理 mark 标记
3.1 mark的作用
在实际工作中,我们要写的自动化用例会比较多,也不会都放在一个py文件中,如果有几十个py文件,上百个方法,而我们只想运行当中部分的用例时怎么办?
pytest提供了一个非常好用的mark功能,可以给测试用例打上各种各样的标签,运行用例时可以指定运行某个标签。mark功能作用就是灵活的管理和运行测试用例。
pytest的mark功能允许我们通过自定义标记来对测试用例进行分组、选择和过滤。
3.2 mark的标记方式
标签既可以打到方法上,也可以打到类上,标记的两种方式:
🍊 直接标记类或方法或函数:@pytest.mark.标签名
🍊 类属性:pytestmark = [pytest.mark.标签名, pytest.mark.标签名],需要注意的是属性名称是固定的
使用mark标记测试用例非常简单,只需要在测试函数或类上方添加注解即可。例如,我们可以使用@pytest.mark.feature
来标记一个测试函数属于某个特定的功能模块:
3.3 注册标签名
我们要想运行已经打好标记的函数,还需要对标签名进行注册,告诉pytest有哪些标签,如果不进行注册运行时(pytest的高级版本)可能会报警告让你进行注册。
我们只需要在项目根目录下创建一个pytest.ini文件,注意文件名是不可修改的,否则pytest会找不到。内容格式如下
- 首先在项目根目录创建一个文件 pytest.ini ,这个是 pytest 的配置文件; 然后在 pytest.ini 文件的
- markers 中写入你的 mark 标记, 冒号 “:” 前面是标记名称,后面是 mark 标记的说明,可以是空字符串;
- 注意:pytest.ini 文件中只能使用纯英文字符,绝对不能使用中文的字符(尤其是冒号和空格)!
# pytest.ini
# 只能修改=右边的值
[pytest]
python_files = demo_*.py # 模块名以demo_开头
python_functions = demo_* # 方法名以demo_开头
python_classes = Demo* # 类名名以Demo开头
# 注册标签
markers =
login : 'marks tests as login'
logout : 'marks tests as logout'
success : 'marks tests as success'
failed : 'marks tests as failed'
规范使用 mark 标记:
注册完 mark 标记之后 pytest 便不会再告警,但是有时手残容易写错 mark 名,导致 pytest 找不到用例,一时想不开很难debug,尤其是团队协作时很容易出现类似问题,所以我们需要 “addopts = --strict” 参数来严格规范 mark 标记的使用!
- 在 pytest.ini 文件中添加参数 “addopts = --strict”;
- 注意要另起一行,不要在 markers 中添加;
- 添加该参数后,当使用未注册的 mark 标记时,pytest会直接报错:“ ‘xxx’ not found in
markers
configuration option ”,不执行测试任务; 注意:pytest.ini - 配置文件不支持注释,不支持注释,不支持注释…
# pytest.ini
[pytest]
markers