【pytest系列】- assert断言的使用

 🔥 交流讨论:欢迎加入我们一起学习!

🔥 资源分享耗时200+小时精选的「软件测试」资料包

🔥 教程推荐:火遍全网的《软件测试》教程  

📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

常用断言

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

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

python
<span style="background-color:#282c34"><span style="color:#abb2bf"><span style="color:#61aeee"><span style="color:#f92672">def</span> <span style="color:#61aeee">test_login</span>():</span>
    <span style="color:#b18eb1"><em># 使用python内置的断言</em></span>
    <span style="color:#f92672">assert</span> <span style="color:#d19a66">1</span> == <span style="color:#d19a66">2</span>, <span style="color:#98c379">'1是不等于2的'</span>	<span style="color:#b18eb1"><em># 错误信息也可以不写</em></span>
    
test_login()</span></span>

​ 运行结果:

shell
<span style="background-color:#282c34"><span style="color:#abb2bf">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</span></span>

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

  • 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作为上下文管理器,当抛出异常时可以获取到对应的异常实例,然后断言它抛出的异常是不是预期的。

python
<span style="background-color:#282c34"><span style="color:#abb2bf"><span style="color:#b18eb1"><em># 断言异常</em></span>
<span style="color:#61aeee"><span style="color:#f92672">def</span> <span style="color:#61aeee">test_zero_division</span>():</span>
    <span style="color:#f92672">with</span> pytest.raises(ZeroDivisionError):
        <span style="color:#d19a66">1</span> / <span style="color:#d19a66">0</span></span></span>

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

python
<span style="background-color:#282c34"><span style="color:#abb2bf"><span style="color:#b18eb1"><em># 详细断言异常</em></span>
<span style="color:#61aeee"><span style="color:#f92672">def</span> <span style="color:#61aeee">test_zero_division_long</span>():</span>
    <span style="color:#f92672">with</span> pytest.raises(ZeroDivisionError) <span style="color:#f92672">as</span> excinfo:
        <span style="color:#d19a66">1</span> / <span style="color:#d19a66">0</span>

    <span style="color:#b18eb1"><em># 断言异常类型 type</em></span>
    <span style="color:#f92672">assert</span> excinfo.<span style="color:#e6c07b">type</span> == ZeroDivisionError
    <span style="color:#b18eb1"><em># 断言异常 value 值</em></span>
    <span style="color:#f92672">assert</span> <span style="color:#98c379">"division by zero"</span> <span style="color:#f92672">in</span> <span style="color:#e6c07b">str</span>(excinfo.value)</span></span>

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

扩展

正则断言

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

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

python
<span style="background-color:#282c34"><span style="color:#abb2bf"><span style="color:#b18eb1"><em># 自定义消息</em></span>
<span style="color:#61aeee"><span style="color:#f92672">def</span> <span style="color:#61aeee">test_zero_division_long</span>():</span>
    <span style="color:#f92672">with</span> pytest.raises(ZeroDivisionError, match=<span style="color:#98c379">".*zero.*"</span>) <span style="color:#f92672">as</span> excinfo:
        <span style="color:#d19a66">1</span> / <span style="color:#d19a66">0</span></span></span>

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

python
<span style="background-color:#282c34"><span style="color:#abb2bf"><span style="color:#b18eb1"><em># 自定义消息</em></span>
<span style="color:#61aeee"><span style="color:#f92672">def</span> <span style="color:#61aeee">test_zero_division_long</span>():</span>
    <span style="color:#f92672">with</span> pytest.raises(ZeroDivisionError, match=<span style="color:#98c379">"zero"</span>) <span style="color:#f92672">as</span> excinfo:
        <span style="color:#d19a66">1</span> / <span style="color:#d19a66">0</span></span></span>

​ 运行结果:

检查断言装饰器

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

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

  • with pytest.raise(ZeroDivisionError)对于故意测试异常代码的情况,使用可能会更好
  • @pytest.mark.xfail(raises=ZeroDivisionError)对于检查未修复的错误(即可能会发生异常),使用检查断言可能会更好
python
<span style="background-color:#282c34"><span style="color:#abb2bf"><span style="color:#b18eb1"><em># 断言装饰器</em></span>
<span style="color:#61aeee">@pytest.mark.xfail(raises=ZeroDivisionError)</span>
<span style="color:#61aeee"><span style="color:#f92672">def</span> <span style="color:#61aeee">test_f</span>():</span>
    <span style="color:#d19a66">1</span> / <span style="color:#d19a66">0</span></span></span>

​ 执行结果:



  •  

最后我邀请你进入我们的【软件测试学习交流群:785128166】, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:程序员二黑】自提!

相关推荐

  1. 断言assert

    2024-01-31 00:26:02       31 阅读
  2. pytest断言

    2024-01-31 00:26:02       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-31 00:26:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-31 00:26:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-31 00:26:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-31 00:26:02       20 阅读

热门阅读

  1. Spring WebSocket实现实时通信

    2024-01-31 00:26:02       37 阅读
  2. springboot请求406、500问题

    2024-01-31 00:26:02       38 阅读
  3. DC-证书颁发机构(23国赛真题)

    2024-01-31 00:26:02       36 阅读
  4. 多语言游戏网站

    2024-01-31 00:26:02       42 阅读
  5. Bean

    2024-01-31 00:26:02       34 阅读
  6. 20240129 大模型快讯

    2024-01-31 00:26:02       45 阅读
  7. Vue2 悬浮球

    2024-01-31 00:26:02       37 阅读
  8. Springboot整合mqtt采用注解进行监听(第二篇)

    2024-01-31 00:26:02       39 阅读
  9. 2.1写一个梅林dynv6插件(上)

    2024-01-31 00:26:02       49 阅读
  10. 为什么Vue3双向绑定使用Proxy

    2024-01-31 00:26:02       47 阅读
  11. 飞往前端的第二天

    2024-01-31 00:26:02       34 阅读
  12. SpringMVC初始化源码学习

    2024-01-31 00:26:02       35 阅读
  13. Chinese and English names of 45 common character symbols

    2024-01-31 00:26:02       28 阅读