pytest 和 unittest 是 Python 中常用的两个测试框架。以下是对 pytest 和 unittest 的详细对比和说明:
  
目录
1. 简洁性和易用性
2. 灵活性和特性
3. 断言机制
4. 插件和扩展
5. 参数化测试
1. 简洁性和易用性
unittest
-  风格: unittest是基于 xUnit 风格的测试框架,类似于 Java 的 JUnit 和其他一些编程语言中的测试框架。
-  类和方法: unittest强制要求你使用类和方法来定义测试,这可能在编写简单测试时显得繁琐。
-  测试结构:典型的 unittest测试用例如下:import unittestclass TestMath(unittest.TestCase):def test_addition(self):self.assertEqual(1 + 1, 2)def test_subtraction(self):self.assertEqual(2 - 1, 1)if __name__ == '__main__':unittest.main()
pytest
-  简洁性: pytest允许你编写更加简洁和直观的测试用例,无需继承任何类。
-  函数级别测试:你可以直接用函数来编写测试用例,不需要使用类。 
-  测试结构:典型的 pytest测试用例如下:def test_addition():assert 1 + 1 == 2def test_subtraction():assert 2 - 1 == 1if __name__ == '__main__':pytest.main()
2. 灵活性和特性
unittest
-  标准库: unittest是 Python 标准库的一部分,无需额外安装,可以直接使用。
-  继承机制:可通过继承 unittest.TestCase进行测试复用。
-  测试发现:支持通过命令行进行测试发现和运行( python -m unitttes discover
 )。
pytest
-  丰富的插件系统: pytest有丰富的插件生态系统,可以通过插件扩展功能。
-  参数化测试:非常容易进行参数化测试,这在数据驱动测试中尤其有用。 
-  更好的断言信息: pytest提供更详细和友好的断言失败信息。
-  强大的 fixture: pytest提供了一种强大的 fixture 机制,可以用于设置和清理测试环境。
3. 断言机制
unittest
-  特定断言方法:使用特定的断言方法,需要记住不同的断言方法名称。 self.assertEqual(a, b) self.assertTrue(x) self.assertIsNone(y)
pytest
-  Python 内置断言:直接使用 Python 内置的断言语句即可,失败时会提供详细的断言信息。 assert a == b assert x assert y is None
4. 插件和扩展
unittest
-  通过额外的库和手动设置添加功能,但整体插件和扩展支持相对较弱。 
pytest
-  插件生态系统丰富:拥有广泛的插件支持,可以添加代码覆盖率报告、并行测试、测试数据生成等。示例如下: pip install pytest-cov pytest --cov=myproject tests/
5. 参数化测试
unittest
-  需要使用子类化测试用例或者使用 unittest提供的扩展库来进行参数化测试。import unittest from parameterized import parameterizedclass TestMath(unittest.TestCase):@parameterized.expand([(1, 1, 2),(2, 2, 4),(2, 1, 3),])def test_addition(self, a, b, expected):self.assertEqual(a + b, expected)
pytest
-  通过 pytest.mark.parametrize轻松实现参数化测试。import pytest@pytest.mark.parametrize("a, b, expected", [(1, 1, 2),(2, 2, 4),(2, 1, 3), ]) def test_addition(a, b, expected):assert a + b == expected
总结
-  unittest:适合更严谨的 xUnit 风格测试,内置于标准库,适合更传统的单元测试用例,具有一定的约束性和规则性。
-  pytest:现代化的测试框架,简洁,灵活,强大的插件和参数化机制,适用于快速编写和扩展测试,尤其是在现代 Python 开发环境中。
总的来说 ,根据项目需求和团队的习惯,选择最适合的测试框架即可 一直用unittes的同学 如果进入新公司或者新项目要求用pytest框架写脚本 也不用担心 简单好上手 🙂