assert断言
1.在判断异常后输出提示信息,方便检查原因
def f(): return 4 a = f() def test_01(): assert a % 2 == 0, "判断 a 为偶数,当前 a 的值为:%s" % a
注:一个函数中assert断言某一个执行失败后便不会执行该函数中后续断言,对于使用多个断言为assert只能在多个函数中分别执行
2、预期异常
def task(): return (1/0) # 断言出现的异常是否为预期的,断言异常通常为断言异常的type和value值 def test_zero_division_long(): with pytest.raises(ZeroDivisionError) as excinfo: 1/0 # 为判断异常的内容,可为某个函数task() # 断言异常类型 type assert excinfo.type == ZeroDivisionError # 断言异常 value 值 assert "division by zero" in str(excinfo.value)
二、测试函数标记marker
marker: 自定义标记,可用于筛选冒烟测试等(发布必跑)
一个函数可以有多个marker, 一个marker也可以标记多个函数
带有相同标记的测试函数即使在不同文件中,也会被一起执行(执行目录下的不同文件)
pytest -m "get and smoke" pytest -m "get and not smoke"
三、跳过测试
pytest除了使用自定义标记外,自身也内置了一些标记:skip,skipif,xfail
对于标记为xfail,实际运行结果是xpass的测试,可在pytest配置(pytest.ini)中强制指定结果为fail
【pytest】
xfail_strict = true
跳过: @pytest.mark.skip(reason='***') 达到某个条件时跳过例:某个版本跳过 @pytest.mark.skipif(***,reason='***') #reason可写可不写 pyest -v -rs(-v可看到哪些被执行,哪些被跳过, -rs可看到跳过的原因) 预期失败 @pytest.mark.xfail() 执行后结果: xfaild:,预期会失败,实际也是失败了 xpassed:预期失败,实际运行通过了
四、运行测试子集
1、运行单个目录tests下所有测试 C:Usersviruser.v-desktopPycharmProjects asks_proj>pytest ./tests 2、单个测试文件、模块 C:Usersviruser.v-desktopPycharmProjects asks_proj>pytest ./tests/func C:Usersviruser.v-desktopPycharmProjects asks_proj>pytest ./tests/func/test_add.py 3、单个测试函数/类 ::符号+类名/函数名
类下的某个函数: ::class::func 符号+类名+符号+函数名 C:Usersviruser.v-desktopPycharmProjects asks_proj>pytest ./tests/func/test_add.py::test_asdict
4、用测试名划分集合
-k,允许使用一个表达式(and、or、not)指定要运行的测试,该表达式可以匹配测试名或其子串
例:运行函数名包含raise的: pytest -k raise -v
例:运行函数名包含raise但不包含delete的: pytest -k "raise and not delete" -v