第一章
pytest介绍:
pytest是一个成熟的全功能python测试工具,可以做到开箱即用,自动发现测试用例。统一使用assert,简化断言语句,丰富的插件架构,超过800多个外部插件具有灵活的扩展性和方便的参数化方法。
命名规则&执行顺序:
1)模块:test_*.py或者 *_test.py
2)函数:test_*
3)类:Test_*,测试类不能有__init__函数
4)断言:assert,支持所有python的布尔表达式。
用例执行顺序:
1)在包含用例的项目路径下(root-dir)执行:pytest -v
2)目录和py文件:按照ASCII码排序方式,进行文件递归顺序收集和运行
3)py文件中:按照代码从上到下
4)验证执行顺序:pytest --collect-only
pytest中编写 python代码时 当多行语句为一个语句时,可以使用 \ 符合进行连接。
自定义异常的写法
assert actual == 1, \
f"实际结果值:{actual}"与预期结果只{1}不相等"
pytest中用例异常处理
获取测试用例模块、名称、函数名称等信息
import inspect # 从实时 Python 对象中获取有用的信息
import pytest
# python-inspect 捕获详细异常信息
def test_inspect_info():
# 期望为 模块名::用例名::错误信息
expected = 'test_06_get_error::test_inspect_info::division by zero'
with pytest.raises(Exception) as exc_info:
c = 2 / 0
# 获取错误文本:exc_info.value.args[0]
# 如获取错误类型:exc_info.type
error_info = exc_info.value.args[0] # 获取用例具体错误信息
module_name = inspect.getmodulename(__file__) # 获取用例所在模块
method_name = inspect.stack[0][3] # [0][3] 获取用例名字
actual = f"{module_name}::{method_name}::{error_info}"
assert actual == expected
# Pytest 内置功能捕获异常信息
def test_get_raises(request):
# 期望为 模块名::用例名::错误信息
expected = 'test_06_get_error::test_inspect_info::division by zero'
with pytest.raises(Exception) as exc_info:
c = 2 / 0
error_info = exc_info.value.args[0] # 获取用例具体错误信息
module_name = request.module.__name__.split('.')[-1] # 获取用例所在模块
method_name = request.function.__name__ # 获取用例名字
actual = f"{module_name}::{method_name}::{error_info}"
assert actual == expected