unittest断言方式是用过框架自己实现的,即self.assertEqual()等,当我们使用pytest框架后,这种断言方式是不可用的,因为测试类不会再继承unittest.TestCase类,因此pytest使用的断言是使用python内置的断言assert,相对于unittest各种各样的断言方法,内置的断言会更简洁,它只有一种,详情如下。

常用断言

​ 关键代码:assert 表达式, 错误提示信息

def test_login():
# 使用python内置的断言
assert 1 == 2, '1是不等于2的' # 错误信息也可以不写 test_login()

​ 运行结果:

C:\software\python\python.exe D:/learn/test.py
Traceback (most recent call last):
File "D:/learn/test.py", line 13, in <module>
test_login()
File "D:/learn/test.py", line 11, in test_login
assert 1 == 2, '1是不等于2的'
AssertionError: 1是不等于2的 Process finished with exit code 1

常用的断言表达有以下几种

  • assert xx:判断xx为真
  • assert not xx:判断xx不为真
  • assert a in b :判断b包含a
  • assert a not in b :判断b不包含a
  • assert a == b:判断a等于b
  • assert a != b:判断a不等于b

异常断言

​ 可以使用pytest.raises作为上下文管理器,当抛出异常时可以获取到对应的异常实例,然后断言它抛出的异常是不是预期的。

# 断言异常
def test_zero_division():
with pytest.raises(ZeroDivisionError):
1 / 0

​ 如任意一个自然数除以0时,由于0不能作为被除数,执行时就会抛出ZeroDivisionError异常,提示division by zero

# 详细断言异常
def test_zero_division_long():
with pytest.raises(ZeroDivisionError) as excinfo:
1 / 0 # 断言异常类型 type
assert excinfo.type == ZeroDivisionError
# 断言异常 value 值
assert "division by zero" in str(excinfo.value)

注意:断言type的时候,异常类型是不需要加引号的,断言value值的时候需转str类型。

扩展

正则断言

​ 可以将match关键字参数传递给上下文管理器,以测试正则表达式与异常的字符串表示形式是否匹配

注意:这种方法只能断言value,不能断言type

# 自定义消息
def test_zero_division_long():
with pytest.raises(ZeroDivisionError, match=".*zero.*") as excinfo:
1 / 0

​ 该match方法的regexp参数 re.search函数匹配,因此在上面的示例中match='zero'也可以使用

# 自定义消息
def test_zero_division_long():
with pytest.raises(ZeroDivisionError, match="zero") as excinfo:
1 / 0

​ 运行结果:

检查断言装饰器

​ 当代码抛出异常时,如果和raises指定的异常类相匹配,就不会断言失败。

​ 它相当于一个检查异常装饰器,目的是检查是否有异常(不确定是否有异常),不同使用场景:

  • with pytest.raise(ZeroDivisionError)对于故意测试异常代码的情况,使用可能会更好
  • @pytest.mark.xfail(raises=ZeroDivisionError) 对于检查未修复的错误(即可能会发生异常),使用检查断言可能会更好
# 断言装饰器
@pytest.mark.xfail(raises=ZeroDivisionError)
def test_f():
1 / 0

​ 执行结果:

【pytest系列】- assert断言的使用的更多相关文章

  1. pytest 7 assert断言

    前言:断言是自动化最终的目的,一个用例没有断言,就失去了自动化测试的意义了. 断言用到的是 assert关键字.之前的介绍,有的测试方法中其实用到了assert断言.简单的来说,就是预期的结果去和实际 ...

  2. pytest之assert断言

    assert pytest允许您使用标准Python断言来验证Python测试中的期望和值.例如,你可以写下 # content of test_assert1.py def f(): return ...

  3. Pytest系列(2) - assert断言详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 与unittest不同,py ...

  4. pytest自动化7:assert断言

    前言:assert断言就是将实际结果和期望结果做对比,符合预期结果就测试pass,不符合预期就测试failed. 实例1:简单断言 实例1优化版--增加异常信息文字描述 异常断言 excinfo 是一 ...

  5. pytest七:assert断言

    断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了.什么是断言呢?简单来讲就是实际结果和期望结果去对比,符合预期那就测试 pass,不符合预期那就测试 failed py ...

  6. iOS自动化探索(五)自动化测试框架pytest - Assert断言的使用

    使用assert语句进行断言 pytest允许使用标准的python assert语法,用来校验expectation and value是否一致 代码演示: def func(): def test ...

  7. Pytest(10)assert断言

    前言 断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了.什么是断言呢? 简单来讲就是实际结果和期望结果去对比,符合预期那就测试pass,不符合预期那就测试 failed ...

  8. 【pytest系列】- pytest测试框架介绍与运行

    如果想从头学起pytest,可以去看看这个系列的文章! https://www.cnblogs.com/miki-peng/category/1960108.html 前言​ ​ 目前有两种纯测试的测 ...

  9. Pytest系列(15)- 多重校验插件之pytest-assume的详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 pytest中可以用pyth ...

随机推荐

  1. nginx proxy

    listen 80; server_name localhost; # 访问"localhost"的全部请求会被转发到"localhost:81" # loca ...

  2. 教你玩转CSS 伪元素

    一.CSS 伪元素 CSS伪元素是用来添加一些选择器的特殊效果. 语法 伪元素的语法: selector:pseudo-element {property:value;} CSS类也可以使用伪元素: ...

  3. 两个"�"="锟斤拷"?

    关于作者:程序猿石头(ID: tangleithu),现任阿里巴巴技术专家,清华学渣,前大疆后端 Leader.欢迎关注,交流和指导! 本文首发于微信公众号,原文链接,转载请全文保留. 以一首七言绝句 ...

  4. Nginx(八): 观进程锁的实现

    前面的nginx系列讲解了nginx很多通用概念,流程,以及核心的http模块的一些实现.应该说大体上对nginx已经不再陌生和神秘. 今天我们不看全局,只看一个非常非常小的细节:nginx是多进程并 ...

  5. 【图像处理】使用OpenCV进行图像处理教程(一)

    OpenCV是进行图像处理的工具,也是计算机视觉领域近十几年不断发展和完善的产物.面对这个已基本成熟的开源库知识体系,我们新生代有必要不断地总结.回顾,以新的视角快速融入计算机视觉的奥秘世界. 从这篇 ...

  6. DS线段树优化最短路&&01bfs浅谈

    1简介 为什么需要?原因很简单,当需要有大量的边去连时,用线段树优化可以直接用点连向区间,或从区间连向点,或从区间连向区间,如果普通连边,复杂度是不可比拟的.下面简单讲解一下线段树(ST)优化建图. ...

  7. 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

    剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Offer 21 这题的解法其实是考察快慢指针和头尾指针. package com.walegarrett.offer; /** * @Aut ...

  8. 摄像机+LookAt矩阵+视角移动+欧拉角

    一: 摄像机 OpenGL本身没有摄像机(Camera)的概念,但我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机,产生一种我们在移动的感觉,而不是场景在移动. 以摄像机的视角作为场景 ...

  9. Java 基础加强 02

    基础加强·反射 和 枚举 类的加载概述和加载时机 * A:类的加载概述 * 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载.连接.初始化来实现对这个类的初始化 * 加载 * 就是指 ...

  10. C#的常见集合接口提供的功能

    C#的常见集合接口提供的功能 这里的功能都是泛型版本的常见功能,列出来,也许后面用得上吧,没有放非泛型版本,因为觉得用得不多,也就没有整理 IEnumerable<T> ICollecti ...