赞
踩
测试类必须继承unittest.TestCase,测试方法名必须以test开头才算测试方法)
测试方法如果是以test开头后面跟数字,测试执行顺序就按照数字顺序来执行,否则按照方法的前后声明来执行
一个测试方法叫一个 TestCase
一个测试类叫 TestSuite
测试加载器 TestLoader
用于加载多个TestCase
文本测试运行器 TextTestRunner
将测试结果以文本的形式输出到控制台
HTML测试运行器 HTMLTestRunner
将测试结果写到.html文件中
序号 | 断言方法 | 断言描述 |
---|---|---|
1 | assertEqual(arg1, arg2, msg=None) | 验证arg1=arg2,不等则fail |
2 | assertNotEqual(arg1, arg2, msg=None) | 验证arg1 != arg2, 相等则fail |
3 | assertTrue(expr, msg=None) | 验证expr是true,如果为false,则fail |
4 | assertFalse(expr,msg=None) | 验证expr是false,如果为true,则fail |
5 | assertIs(arg1, arg2, msg=None) | 验证arg1、arg2是同一个对象,不是则fail |
6 | assertIsNot(arg1, arg2, msg=None) | 验证arg1、arg2不是同一个对象,是则fail |
7 | assertIsNone(expr, msg=None) | 验证expr是None,不是则fail |
8 | assertIsNotNone(expr, msg=None) | 验证expr不是None,是则fail |
9 | assertIn(arg1, arg2, msg=None) | 验证arg1是arg2的子串,不是则fail |
10 | assertNotIn(arg1, arg2, msg=None) | 验证arg1不是arg2的子串,是则fail |
11 | assertIsInstance(obj, cls, msg=None) | 验证obj是cls的实例,不是则fail |
12 | assertNotIsInstance(obj, cls, msg=None) | 验证obj不是cls的实例,是则fail |
testcase1.py
from unittest import TestCase
class TestCase1(TestCase):
def test01(self):
print('TestCase2:test01')
testcase2.py
import os import unittest from unittest import TestCase from testcase1 import TestCase1 class User: pass # 必须继承TestCase # 测试方法名可以'test'开头,以数字作为编号 class TestCase2(TestCase): @classmethod def setUpClass(cls) -> None: print('1. setUpClass init 多个案例最先执行一次,优先级高于setUp') @classmethod def tearDownClass(cls) -> None: print('4. tearDownClass destroy 多个测试方法最后只会执行一次') def setUp(self) -> None: print('2. setUp init 每个测试方法都会执行一次') def tearDown(self) -> None: print('3. tearDown destroy 每个测试方法都会执行销毁') def test00(self): print('test00') def test01(self): print('test01') first = 'a' second = 'a' msg = 'assert error' self.assertEqual(first, second, msg) self.assertNotEqual(first, second, msg) self.assertTrue(first, msg) self.assertFalse(first, msg) self.assertIsNone(first, msg) self.assertIsNotNone(first, msg) user1 = User() user2 = user1 # user1 is user2 self.assertIs(user1, user2) self.assertIsNot(user1, user2) self.assertIn(1, [1, 2, 3]) self.assertNotIn(1, [2, 3, 4]) self.assertIsInstance(1, int) self.assertNotIsInstance([1, 2, 3], dict) self.assertGreater(2, 1, '2 > 1') self.assertGreaterEqual(1, 1, '1 >= 1') self.assertLess(1, 2, '1 < 2') self.assertLessEqual(1, 2, '1 <= 2') @unittest.skipIf(2 > 1, 'skipIf:condition为true跳过') def test03(self): print('test03') @unittest.skip('跳过该测试案例skip') def test02(self): print('test02') @unittest.skipUnless(2 > 1, 'skipUnless: condition为true执行,为false不执行') def test04(self): print('test04') if __name__ == '__main__': # 运行方式一:运行当前文件中以test开头的函数 unittest.main() # 运行方式二:运行多个测试类下的测试方法 loader = unittest.TestLoader() testsuite1 = loader.loadTestsFromTestCase(TestCase1) testsuite2 = loader.loadTestsFromTestCase(TestCase2) suite = unittest.TestSuite([testsuite1, testsuite2]) runner = unittest.TextTestRunner() runner.run(suite) # 方式三:运行指定目录下的所有以test开头的py文件 tests = unittest.defaultTestLoader.discover(os.path.dirname(__file__), pattern='test*.py') suite = unittest.TestSuite() suite.addTest(tests) runner = unittest.TextTestRunner() runner.run(suite)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。