一、Pytest运行用例
1.1 运行多条用例
-
运行某个/多个用例包
-
运行某个/多个用例模块
-
运行某个/多个用例类
-
运行某个/多个用例方法
1.2 运行多条用例方式
-
执行包下所有的用例:
pytest/py.test [包名]
-
执行单独一个pytest模块:
pytest 文件名.py
-
运行某个模块里面某个类:
pytest 文件名.py::类名
-
运行某个模块某个类里的方法:
pytest 文件名.py::类名::方法名
1.3 运行步骤
-
- 文件右键->open in terminal
-
- 输入命令行,如
pytest test_mark.py
- 输入命令行,如
-
- 查看运行结果
1.4 运行结果分析
-
常用结果:
fail/error/pass
-
特殊结果:
warning/deselect
二、Pytest测试用例调度与运行
2.1 命令行参数-使用缓存状态
-
--lf(--last--failed)
:只重新运行故障;
-
--ff(--failed-first)
:先运行故障,再运行其余的测试。
三、命令行参数-常用命令行参数
– help
-x:用例一旦失败(fail/error),就立刻停止执行
–maxfail=num:用例达到
-m:标记用例
-k:执行包含某个关键字的测试用例
-v:打印详细日志
-s:打印输出日志(一般-vs结合使用)
–collect-only:测试平台,pytest自动导入功能
实例:
-
- -x参数
-
- –maxfail=num参数
-
- -m参数
-
- -k参数
-
- –collect-only参数
四、Python执行pytest
4.1 使用main函数
if __name__ == '__main__':
# 1、运行当前目录下所有符合规则的用例,包括子目录(test_*.py 和 *_test.py)
pytest.main()
# 2、运行test_mark1.py::test_dkej模块中的某一条用例
pytest.main(['test_mark1.py::test_dkej','-vs'])
# 3、运行某个 标签
pytest.main(['test_mark1.py','-vs','-m','dkej'])
运行方式:
python test_*.py
实例:
-
- 第一种方式:
-
- 第二种方式:
-
- 第三种方式:
4.2 使用python -m pytest
- 使用python -m pytest调用pytest(jenkins持续集成使用的)
五、异常处理
5.1 方法一:try…except
try:
可能产生异常的代码块
except [(Error1, Error2, ...) [as e]]:
处理异常的代码块1
except [(Error3, Error4, ...) [as e]]:
处理异常的代码块2
except [Exception]:
处理其他异常
源码:
try:
a = int(input("请输入被除数:"))
b = int(input("请输入除数:"))
c = a/b
print("您输入的两个数相除后的结果为:", c)
except (ValueError, ArithmeticError):
print("程序发生数字格式异常或算数异常!")
except :
print("未知异常!")
print("程序继续运行")
5.2 方法二:pytest.raises()
1. 特点
- 可以捕获特定的异常;
- 获取捕获异常的细节(异常类型、异常信息);
- 发生异常,后面的代码将不会被执行。
2.用法
def test_raise():
with pytest.raises(ValueError, match='must be 0 or None'):
raise ValueError("value must be 0 or None")
def test_raise1():
with pytest.raises(ValueError) as exc_info:
raise ValueError("value must be 42")
assert exc_info.type is ValueError
assert exc_info.value.args[0] == "value must be 42"
源码:
import pytest
def test_raise():
with pytest.raises((ZeroDivisionError, ValueError)):
raise ZeroDivisionError("除数为0")
def test_raise1():
with pytest.raises(ValueError) as exc_info:
raise ValueError("必须输入40")
assert exc_info.type is ValueError
assert exc_info.value.args[0] == "必须输入40"