Pytest03:pytest对测试函数常见处理方法

1.使用assert 声明

  pytest 已经简化了断言方法,直接用assert 就可以了, 说明pytest 已经重写了assert 方法,
  从而提供了更为详细的失败信息,而且assert表达式变得简洁。 
  • 运行的代码如下:

    在这里插入图片描述

    运行结果为如图:
    在这里插入图片描述

上图中有个 “>” 指出运行错误的地方,“E” 是对错误的地方补充,
下边指出哪个文件夹,并列出在第几行且是什么类型的错误。

我们继续用 -v 输出更详细的错误信息 ,看下图:
在这里插入图片描述

2.预期异常

我们用with 语句进行抓取异常,并与表达式异常进行匹配,如果通过说明和我们预期一样,验证为pass

例子如下:

在这里插入图片描述

1.(with pytest.raises(TypeError):) 这个表达式是pytest 抛出一个TypeError的异常
2.tasks.add(task=“string”) 这个表达式也会抛出一个异常, pytest 会拿两个异常assert 。

3.测试函数的标记

1.一个标记 可以应用在多个函数
2.一个函数可以有多个标记
3. 被标记的在不同文件夹也可以被执行
应用场景: 我们的目的只是做个冒烟,没有必要对全量的case 进行执行,我们就可以把
需要smoke 的case 标记为 smoke 就可以了,到时候我们用 pytest -m “smok” 就ok。
具体如何标记呢 ?
语法为: @pytest.mark.marker_value , 如果标记smoke 可以用 @pytest.mark.smoke
举例为:
test_assert.py :

import  tasks,pytest
@pytest.mark.single
@pytest.mark.smoke
def test_smoke1():
    with pytest.raises(TypeError):
        tasks.add(task="string")
@pytest.mark.smoke
def test_smoke2():
    with pytest.raises(TypeError):
        tasks.add(task="string")

def test_except():
    with pytest.raises(TypeError):
        tasks.add(task="string")
@pytest.mark.smoke
def test_smoke03():
    with pytest.raises(TypeError):
        tasks.add(task="string")
@pytest.mark.smoke
def test_smoke04():
    with pytest.raises(TypeError):
        tasks.add(task="string")

test_task.py:

import  tasks


import  pytest

@pytest.mark.smoke
def test_add_exception():
    with pytest.raises(ValueError):
         tasks.start_tasks_db('/','mysql')

def test_smoke05():
    with pytest.raises(TypeError):
        tasks.add(task="string")

执行结果:
在这里插入图片描述

也可以标记之间使用 and,or,not 关键字。

1.使用 and 在这里插入图片描述

and 是 要有 smoke 和 single 标签 才能被运行,
or 是 运行 smoke 和 single 标签的全部case
not smoke是 运行 没有含smoke 的标签。

例子如下:
在这里插入图片描述

4.跳过测试 (skip,skipif,xfail)

先理解他们之间的区别,我们再举例说明是否能实现.
1.skip 只要标记skip不管是什么都要skip,
2.skipif 是有条件的skip
3.xfail 前两个标记之后,不会执行 ,xfail 标记会执行,只是提前告诉pytest预期失败
1.运行之后不失败 会显示 Xpass,2.运行后失败了会显示 xfail

from collections import namedtuple
import  pytest
Task=namedtuple('Task',['summary','owner','done','id'])
Task.__new__.__defaults__=(None,None,False,None)
@pytest.mark.skip(reason=" please skip,unsupport this case now")
#养成良好的习惯,当跳过的时候一定要加 reason ,同事看了就很明白了
def test_01():
    t1=Task()
    t2=Task()
    assert t1 == t2
@pytest.mark.skipif(1>0,reason="不想执行")
#这个是条件执行,当表达式 True 就跳过,fail 就执行 ,同样也要加上reason 
def test_02():
    t1=Task()
    t2=Task()
    assert t1 == t2
@pytest.mark.xfail
#预期是失败的,结果执行通过, 会被标记为 Xpass
def test_03():
    t1=Task()
    t2=Task()
    assert t1 == t2
@pytest.mark.xfail
#预期失败,确实执行失败了,会被标记为 xfail ,
def test_04():
    t1=Task()
    t2=Task()
    assert t1 != t2


运行结果如下:
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值