一眼看出的区别(最直观的)主要是:写法风格和运行方式不一样。
1)测试用例写法/组织方式
-
unittest:通常是“面向类 + 固定结构”。你会看到类似:
class xxx(unittest.TestCase):- 用
self.assertXXX(...)断言 - 方法名常见
def test_xxx(self):
-
pytest:更“函数化/简洁”。你常见到:
- 直接写
def test_xxx(): - 断言用裸
assert:assert x == y - 通常不强制继承
TestCase
- 直接写
所以看到“继承
unittest.TestCase+self.assert”基本就是 unittest;看到“裸assert+ 函数test_”大概率是 pytest。
2)断言风格
-
unittest:
self.assertEqual(a, b)、self.assertTrue(cond) -
pytest:直接
assert a == b(失败时信息也更友好)
3)运行测试方式
-
unittest:常用
python -m unittest ...或python -m unittest discover ... -
pytest:一般直接
pytest,或pytest 文件名.py::test_xxx
4)命令行效果(也算一眼)
- pytest:输出更“报告式”,通常显示用例收集数量、通过/失败/跳过等更直观。
- unittest:更偏标准库风格,整体信息密度没 pytest 那么“展示型”。
如果你愿意,把你看到的一段测试代码贴出来,我可以直接帮你判断它属于哪一个,并指出对应点。