python的单元测试主要采用两种测试框架,unittest是python内置的标准类库,pytest是第三方库,它兼容unittest。本章主要讲解Pytest框架的基础用法。
unittest
unittest提供了test cases、test suites、test fixtures、test runner相关的组件
编写规范
测试模块代码必须先import unittest
测试类必须继承unittest.TestCase
测试方法必须以'test_'开头
模块名称和类名没有特殊要求
注:在python中一个.py文件就是一个模块
框架结构
import unittestclass FrameworkUnittest(unittest.TestCase): @classmethod def setUpClass(cls) -> None: print("setUpClass") def setUp(self) -> None: print("setUp") def test_method_1(self): print("test_method_1") def test_method_2(self): print("test_method_2") def tearDown(self) -> None: print("tearDown") @classmethod def tearDownClass(cls) -> None: print("tearDownClass")
输出结果:
setUpClasssetUptest_method_1tearDownsetUptest_method_2tearDowntearDownClass
setupClass\teardownClass在类开始\结束运行一次
setUp\teardown在每个方法的开始\结束运行一次
测试套件
多个测试用例的集合就是测试套件,unittest通过测试套件管理多个测试用例 unittest.TestSuite(...)
加载测试用例的方法:
addTest 方法
TestLoader().loadTestsFromTestCase(类名) 按类加载测试用例
defaultTestLoader.discover(路径,匹配规则) 按路径和匹配规则加载测试用例,可以一次调用多个脚本
测试用例的执行
在__main__方法中调用 unittest.main()
加入测试套件中使用
suite=unittest.TestSuite()suite.addTest(TestMethod("test_01"))suite.addTest(TestMethod("test_02"))unittest.TextTestRunner().run(suite)
pytest
测试用例的识别和运行
测试文件:test_*.py *_test.py 注意:test.py文件无法被识别
测试用例识别:
Test*类包含的所有test_*的方法(测试类不能带有__init__方法)
不在类中的test_*的方法
兼容unittest的测试用例
终端执行
pytest [options] [file_or_dir..