unittest简介
unittest重要概念
- Testcase 一个TestCase的实例就是一个测试用例,包括测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown).单元测试(unittest)的本质也就在这里,一个测试用例是一个完整的测试单元,通过运行这个测试单元,可以对某一个问题进行验证
- TestSuite 多个测试用例集合在一起,就是TestSuite,而且TestSuite也可以嵌套TestSuite
- TestRunner 是用来执行测试用例的,其中的run(test)会执行TestSuite/TestCase中的run(result)方法
- TestLoader 是用来加载TestCase到TestSuite中的,其中有几个loadTestsFrom_()方法,就是从各个地方寻找TestCase,创建它们的实例,然后add到TestSuite中,再返回一个TestSuite实例
- TestFixture 对一个测试用例环节的搭建和销毁,是一个fixture,通过覆盖TestCase的setUp()和tearDown()方法来实现
setup和teardown
方法分类
- 类方法,类方法在执行过程中只执行一次,setUpClass和tearDownClass
- 实例方法,实例方法每运行一个用例都执行一次,setUp,tearDown
执行顺序
- setUpClass >> setUp >> testA >> tearDown >> setUp >> testB >> tearDown >> tearDownClass
- 用例之间按用例名称ASCII码的顺序加载,数字与字母顺序为0-9,A-Z,a-z
控制用例执行顺序
方式1(Pycharm不适用),通过TestSuite类的addTest方法,按顺序加载测试用例:
suite = unittest.TestSuite() suite.addTest(TestLegion("test_create_legion")) suite.addTest(TestLegion("test_bless")) suite.addTest(TestLegion("test_receive_bless_box")) suite.addTest(TestLegion("test_quit_legion")) unittest.TextTestRunner(verbosity=3).run(suite)
方式2,通过修改函数名的方式:
class TestLegion(unittest.TestCase): def test_1_create_legion(self): pass def test_2_bless(self): pass def test_3_receive_bless_box(self): pass def test_4_quit_legion(self): pass
执一个测试类
#方法一: if __name__ == '__main__': suite=unittest.TestSuite(unittest.makeSuite(Baidu)) unittest.TextTestRunner(verbosity=2).run(suite) #方法二 if __name__ = '__main': suite=unittest.TestLoader().loadTestsFromTestCase(Baidu) unittest.TextTestRunner(verbosity=2).run(suite)
执行一个文件所有测试类
if __name__ = '__main': suite=unittest.TestLoader().loadTestsFromModule(Baidu.py) unittest.TextTestRunner(verbosity=2).run(suite)
执行一个目录下所有测试用例
suite=unittest.TestLoader().discover( start_dir=os.path.dirname(__file__), pattern='test*.py', top_level_dir=None )