编写pytest测试函数

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

原文地址:https://www.cnblogs.com/byy521/p/15141207.html