Pytest 参数化用例
测试登录场景
- 测试登录成功,登录失败(账号错误,密码错误)*
- 创建多种账号: 中⽂文账号,英⽂文账号*
普通测试用例方法 - Copy 多份代码 or 读⼊入参数?*
- 一次性执⾏多个输⼊入参数*
def test_param_login_ok():
# 登录成功
username = "right"
password = "right"
login(username,password)
def test_param_login_fail():
# 登录失败
username = "wrong"
password = "wrong"
login(username,password)
参数化实现方案
- pytest 参数化实现方法
- 装饰器:
@pytest.mark.parametrize
@pytest.mark.parametrize("username,password",[["right","right"], ["wrong","wrong"]])
def test_param(username,password):
login(username,password)
Pytest 设置跳过、预期失败
Mark:跳过(Skip)及预期失败(xFail)
-
skip - 始终跳过该测试用例
-
解决 1:添加装饰器
@pytest.mark.skip
@pytest.mark.skipif
-
解决 2:代码中添加跳过代码
pytest.skip(reason)
-
skipif - 遇到特定情况跳过该测试用例
-
xfail - 遇到特定情况,产生一个“期望失败”输出
添加装饰器@pytest.mark.xfail
pytest命令行常用参数
—help
-x 用例一旦失败(fail/error),就立刻停止执行
–maxfail=num 用例达到
-m 标记用例
-k 执行包含某个关键字的测试用例
-v 打印详细日志
-s 打印输出日志(一般-vs一块儿使用)
—collect-only(测试平台,pytest 自动导入功能 )*
Python 代码执行 pytest
- 使用 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
- 使用 python -m pytest 调用 pytest(jenkins 持续集成用到)
pytest异常处理
- 常用的异常处理方法*
- try…except、
try:
a = int(input("输入被除数:"))
b = int(input("输入除数:"))
c = a / b
print("您输入的两个数相除的结果是:", c)
except (ValueError, ArithmeticError):
print("程序发生了数字格式异常、算数异常之一")
except:
print("异常未知")
print("程序继续运行")
- 异常处理方法 pytest.raise()
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("value must be 42")
assert exc_info.type is ValueError
assert exc_info.value.args[0] == "value must be 42"
最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】