Pytest框架 —— Pytest断言

Pytest自动化测试用例中的断言详解 测试的主要工作目标就是验证实际结果与预期结果是否一致;在接口自动化测试中,通过断言来实现这一目标。Pytest断言是通过assert语句实现的(pytestPython原生的assert语句进行了优化),确定实际情况是否与预期一致。pytest断言assert的用法在自动化测试用例中,最常用的断言是相等断言,就是断言预期结果和实际结果是一致的。pytest通过 “assert 实际结果 == 预期结果” 实现。通常我们断言的预期结果和实际结果的数据类型包括字符串、元组、字典、列表和对象。 阅读详情

(1)什么是断言

对于测试来讲,不管是功能测试,自动化测试,还是单元测试,一般都会预设一个正确的预期结果,而在测试执行的过程中会得到一个实际的结果。

测试的成功与否就是拿实际的结果与预期的结果进行比较,这个比的过程就是断言(assert)

(2)Pytest断言

  • 与Unittest不同,Pytest使用的是Python自带的assert关键字来进行断言。
  • assert关键字后面可以接一个表达式,只要表达式的最终结果为True,那么断言通过,用例执行则为成功,否则用例执行失败。

(3)Pytest的断言方式及应用场景

1)使用assert语句

Pytest里面的断言实际上就是Python里面的assert断言方法。

比较大小与是否相等:

  • assert a == b:判断a等于b
  • assert a !=b:判断a不等于b

判断包含或不包含:

  • assert a in b:判断b包含a
  • assert a not in b:判断b不包含a

提示:b可以是字符串,可以是列表,元组等都可以。

对类型的判断:

  • assert isinstance(a,int):判断a是否是int类型数据。

判断方法或者函数的返回值是否为真:

  • assert xx:判断xx结果为真。
  • assert not xx:判断xx结果不为真。

例如:

#用于判断素数
def is_prime(n):
    if n <= 1:
        return False
    for i in range(2, n):
        if n % i == 0:
            return False
        return True


# 判断是否为素数
def test_true():
    assert is_prime(13)
    # 或者不为素数
    assert not is_prime(13)

基本上常用的就这么几种。

2)断言预期的异常

将异常信息存储到一个变量中,变量的类型则为异常类,包含异常的typevaluetraceback等信息

import pytest


def test_exception_value():
    with pytest.raises(ZeroDivisionError) as zero:
        1 / 0  # 此处可以是方法,也可以是表达式

    # print(zero) <ExceptionInfo ZeroDivisionError('division by zero') tblen=1>
    # print(zero.tb)# <traceback object at 0x0000021B6068BD48>
    # print(zero.typename)  # 字符串"ZeroDivisionError"
    # print(zero.type)  # 异常类型<class 'ZeroDivisionError'>
    print(zero.traceback)
    assert "division by zero" in str(zero.value)
    assert zero.type == ZeroDivisionError
    assert zero.typename == "ZeroDivisionError"


if __name__ == '__main__':
    pytest.main()

注意:在上下文管理器的作用域中,raises代码必须是最后一行,否则其后面的代码将不会执行。

拓展:

如果我们不知道预期异常的是什么,我们可以使用 matchraise 进行自定义异常。

pytest.raises()函数传递一个关键字参数match,通过match设置的字符串正则表达式匹配异常信息。

Unittest中的TestCase.assertRaisesRegexp方法类似。

示例:

import pytest


# myfunc函数会抛出一个异常,
def myfunc():
    raise ValueError("Exception 123 raised")


def test_match():
    # pytest.raises()函数,
    # 可以用元组的形式传递参数,只需要触发其中任意一个即可。
    # 通过match可以设置通过正则表达式匹配异常。
    with pytest.raises((ValueError, RuntimeError), match=r'.* 123 .*') as ve:
        myfunc()  
        # 说明:myfunc()抛出的异常被match设置的字符串匹配到
        # 也就是捕获到了该异常。
        # 然后下面是断言,123是否包含在捕获异常的说明中。

    assert "123" in str(ve.value)


if __name__ == '__main__':
    pytest.main()

(4)优化断言

我们可以在异常的时候,输出一些提示信息,这样报错后,可以方便我们来查看原因。

示例如下:

import pytest

def func():
    return 100

def test_case_666():
    a = func()
    assert a % 3 == 0, "判断a是否能被3整除,当前a的值为:%s" %a


if __name__ == '__main__':
    pytest.main()

"""
运行结果:

========没加注释的测试结果==========
Expected :0
Actual   :1
<Click to see difference>

def test_case_666():
        a = 100
>       assert a % 3 == 0
E       assert 1 == 0

test_01.py:55: AssertionError

Assertion failed


========添加注释的测试结果==========
Expected :0
Actual   :1
<Click to see difference>

def test_case_666():
        a = 100
>       assert a % 3 == 0, "判断a是否能被3整除,当前a的值为:%s" %a
E       AssertionError: 判断a是否能被3整除,当前a的值为:100
E       assert 1 == 0

test_01.py:53: AssertionError

Assertion failed
"""

(5)使用标记检查异常

@pytest.mark.xfail(raises=ZeroDivisionError)

示例:

import pytest

@pytest.mark.xfail(raises=ZeroDivisionError)
def test_exception_value():
    1 / 0

if __name__ == '__main__':
    pytest.main()
    
# 说明代码:
# 预期抛出ZeroDivisionError异常,
# 实际测试用例执行也抛出了ZeroDivisionError异常。
# 测试结果:该用例是xfailed

END绵薄之力

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

加入我的软件测试交流群:110685036免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

获取方式 :

 

『德不孤』Pytest框架 — 7、Pytest断言 文章目录(1)什么是断言(2)Pytest断言(3)Pytest断言方式及应用场景(4)优化断言(5)使用标记检查异常 (1)什么是断言 对于测试来讲,不管是功能测试自动化测试,还是单元测试,一般都会预设一个正确的预期结果,而在测试执行的过程中会得到一个实际的结果。 测试的成功与否就是拿实际的结果与预期的结果进行比较,这个比的过程就是断言(assert)。 (2)Pytest断言 与Unittest不同,Pytest使用的是Python自带的assert关键字来进行断言。 assert关键字后面可以接 阅读详情

相关推荐

pytest系列——assert断言

迅捷小莫 本公众号日常更新自动化技术,编程知识,迅捷掌握一切测试工程师需要的技术! 12篇原创内容 ...

江楷丶的博客 3577

11:pytest 框架 assert 验证测试

pytest断言这件事变得前所未有的简单:用原生的 assert 语句,就能搞定从基础数据类型到复杂数据结构、从普通函数到 GUI 界面的所有验证场景,再加上详细的错误信息和灵活的自定义方式,完全能满足自动化测试中的所有断言需求。掌握断言的正确用法,不仅能让你的测试用例更简洁易读,还能大幅提升调试效率,快速定位问题所在。后续我们可以结合 pytest-html 报告,把断言失败时的截图、日志嵌入报告,让测试结果更直观。

m0_73919066的博客 430

七、Pytest自动化测试框架Pytest断言

###文章内容有配套的学习视频和笔记都放在了文章末尾### 1、什么是断言 对于测试来讲,不管是功能测试自动化测试,还是单元测试,一般都会预设一个正确的预期结果,而在测试执行的过程中会得到一个实际的结果。 测试的成功与否就是拿实际的结果与预期的结果进行比较,这个比的过程就是断言(assert)。 2、Pytest断言 与Unittest不同,Pytest使用的是Python自带的assert关键字来进行断言。 assert关键字后面可以接一个表达式,只要表达式的最终结果为True,那么断言通过,

测试-八戒 738

三、pytest断言

pytest断言

rui_rui96的博客 2670

pytest框架-assert断言

目录 1、assertEquals(expected,actual) 、assertNotEquals(expected,actual) 2、assertTrue(message,condition) 、assertFalse(message,condition) 3、assertNull(message,object) 、assertNotNull(message,object) 4、assertSame(expected,actual) 、assertNotSame(expected,a...

Dokikilililiya 960

Pythonpytest框架(2)--断言机制

pytest框架断言方法详细讲解

qq_52758588的博客 1992

pytest 框架常用的断言方法

pytest框架中,断言测试的核心部分。与传统的unittest不同,pytest直接使用Python的语句,并结合智能的错误信息提示,简化了断言的使用。以下是常用的断言方法及其示例:直接用语句进行条件判断: 当断言失败时,pytest会输出具体的值差异(如)。使用捕获并验证代码是否抛出预期异常: 3. 浮点数近似比较 使用处理浮点数精度问题: 4. 集合与容器断言 验证列表、字典等容器的内容: 5. 类型与身份断言 验证对象类型或身份: 6. 警告断言 使用检查代码是否触发警告: 7. 文件

weixin_43676350的博客 396

pytest框架中实现软断言和硬断言

断言

大森玩测试 577

从0开始python学习-48.pytest框架断言

【代码】从0开始python学习-48.pytest框架断言。响应进行断言。数据库数据断言

Meseiter的博客 1368

python测试框架pytest (三)断言

一、pytest断言 Pytest断言是通过 assert 语句实现的,确定预期值和实际值是否一致。 1.1、pytest等值类型断言 import allure class TestAssert: @allure.story("pytest-assert方式") def test_equals(self): the_biscuit = "Ginger" my_biscuit = "Gingers" assert the_biscuit

6604

pytest框架笔记(六) : assert断言

断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了,什么是断言呢? 简单来讲就是实际结果和期望结果去对比,符合预期那就测试pass,不符合预期那就测试failed 一、assert pytest允许您使用标准python断言来验证python测试中的期望和值。 #!encoding=utf-8 def f(): return 3 def test...

BearStarX的博客 1218

pytest自动化测试框架断言

pytest 还能对执行过程中产生的 Exception 及 Warnning 进行断言,但这些情况在我们的测试中很少会用到,所以不做过多阐述。总结:!!作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。视频文档获取方式:这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

2201_76100073的博客 284

测试框架篇】单元测试框架pytest(4):assert断言详解

就是对预期结果的断言。何为断言?简单来说就是实际结果和期望结果去对比,符合预期就测试pass,不符合预期那就测试 failed。断言内容就是你要的预期结果。断言包含对接口响应内容做断言、也包含对落DB的数据做断言pytest可以让。

代码搬运工的博客 1089
上一篇: Pytest框架 —— Pytest预期失败
下一篇: Pytest框架 —— Pytest测试报告
测试界的吴彦祖
博客等级 码龄5年 7002粉丝 1521原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值