写点什么

pytest 学习和使用 5-Pytest 和 Unittest 中的断言如何使用?

作者:虫无涯
  • 2023-03-30
    陕西
  • 本文字数:1189 字

    阅读完需:约 4 分钟

1 说明

  • pytest 中使用 assert 进行断言,和 unittest 是有区别的,后边详细列举;

  • pytest 中的 assert 后可以为表达式,为 True 表示用例通过。

2 Uinttest 中的断言

2.1 部分断言

  • 我们写一个 class,代码中就可以看到所有的断言:


  • 常用断言:



2.2 部分举例

# -*- coding:utf-8 -*-# 作者:NoamaNelson# 日期:2021/11/26 # 文件名称:test_unint.py# 作用:unittest断言# 联系:VX(NoamaNelson)# 博客:https://blog.csdn.net/NoamaNelson
import unittest
class TestU(unittest.TestCase): def setUp(self) -> None: self.a = 3 self.b = 4 self.c = 3 self.d = 0
def tearDown(self) -> None: pass
def test_o(self): self.assertTrue(self.c, msg="结果为False")
def test_t(self): self.assertEqual(self.a, self.c, msg="a和c不相等")

if __name__ == "__main__": unittest.main()
复制代码

3 Pytest 断言

3.1 常用断言

3.2 表示方法

# -*- coding:utf-8 -*-# 作者:NoamaNelson# 日期:2021/11/26 # 文件名称:test_assert.py# 作用:assert断言# 联系:VX(NoamaNelson)# 博客:https://blog.csdn.net/NoamaNelson
import pytest

class TestU():
def test_f(self): a = 3 b = 4 s = a + b return s
def test_func(self): assert self.test_f() == 7, "计算结果不是7"

if __name__ == "__main__": pytest.main()
复制代码


  • 输出为:


(venv) F:\pytest_study\test_case\test_d>pytest test_assert.py============================================ test session starts =============================================platform win32 -- Python 3.7.0, pytest-6.2.4, py-1.10.0, pluggy-0.13.1rootdir: F:\pytest_study\test_case\test_dplugins: allure-pytest-2.8.12, cov-2.8.1, forked-1.1.3, html-2.0.1, metadata-1.8.0, ordering-0.6, xdist-1.31.0collected 2 items
test_assert.py .. [100%]
============================================= 2 passed in 0.31s ==============================================
复制代码

3.3 异常断言

  • 可以使用 pytest.raises 作为上下文管理器,当抛出异常时可以获取到对应的异常实例;

  • 目的是断言抛出的异常是不是预期想要的;

  • 比如如下,断言1 / 0的异常是不是ZeroDivisionError,其中ZeroDivisionError是异常类型,用type从异常信息中获取;division by zero是异常的值,使用value从异常信息中获取。


    def test_a(self):        with pytest.raises(ZeroDivisionError) as e:            1 / 0
assert e.type == ZeroDivisionError assert "division by zero" in str(e.value)
复制代码


发布于: 刚刚阅读数: 3
用户头像

虫无涯

关注

专注测试领域各种技术研究、分享和交流~ 2019-12-11 加入

CSDN测试领域优质创作者 | CSDN博客专家 | 阿里云专家博主 | 华为云享专家 | 51CTO专家博主

评论

发布
暂无评论
pytest学习和使用5-Pytest和Unittest中的断言如何使用?_Python_虫无涯_InfoQ写作社区