unittest介绍和使用
【 官方文档:https://docs.python.org/3/library/unittest.html 】
1) 简介
- unittest是python自带的一个单元测试框架 ;
- unittest中包含了一些对常规的测试用例体系的支持,包括:test fixture test case test suite test runner;
- fixture中包含两种 ,分别为setup() teardown() setUpClass() testDownClass() ,是一个脚手架;
- 如果
setUp()成功运行,无论测试方法是否成功,都会运行tearDown(),若setup发生异常,框架认为测试发生异常,case不会被运行;
【例子】
import unittest
def sum(a, b):
return a + b
class MyTestCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("setupclass")
# 每个case开始前运行
def setUp(self):
print("setup")
def test_int(self):
self.assertEqual(sum(1, 2), 3)
def test_number(self):
self.assertEqual(sum(100, 200), 300)
# 每个case结束后运行
def tearDown(self):
print("teardown")
@classmethod
def tearDownClass(cls):
print("teatdownclass")
if __name__ == ‘__main__‘:
unittest.main()
# unittest.main() 提供了一个测试脚本的命令行接口。当在命令行运行该测试脚本,脚本按照特定格式输出
# 输出
setupclass
setup
teardown
setup
teardown
teatdownclass2) pytest
2)测试套件 [将测试用例集合在一起]
import unittest
def sum(a, b):
return a + b
class MyTestCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("setupclass")
# 每个case开始前运行
def setUp(self):
print("setup")
def test_int(self):
print("test_int")
self.assertEqual(sum(1, 2), 3)
def test_number(self):
print("test_number")
self.assertEqual(sum(100, 200), 300)
# 每个case结束后运行
def tearDown(self):
print("teardown")
@classmethod
def tearDownClass(cls):
print("teatdownclass")
if __name__ == ‘__main__‘:
# unittest.main()
suit = unittest.TestSuite()
suit.addTest(MyTestCase("test_int"))
suit.addTest(MyTestCase("test_number"))
# 执行测试
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suit)
3)不将测试函数转化为testcase的子类,打包测试函数运行:
import unittest
def test_Something(self):
self.assertEqual(sum(1,2),3)
unittest.FunctionTestCase(test_Something)
4)跳过测试(Unittest支持跳过单个测试方法甚至整个测试类)
@unittest.skip("reason")
def test_int(self):
print("test_int")
self.assertEqual(sum(1, 2), 3)
# 当condition为真时,跳过;
@unittest.skipIf(condition=‘a‘,reason=‘b‘)
# 跳过,除非条件为真;
@unittest.skipUnless(condition=‘a‘,reason=‘b‘)
5)假设预计失败
# 把测试标记为预计失败。如果测试不通过,会被认为测试成功;如果测试通过了,则被认为是测试失败。
@unittest.expectedFailure def test_number(self): print("test_number") self.assertEqual(sum(100, 200), 300)
* 被跳过的测试的 setUp() 和 tearDown() 不会被运行。
* 被跳过的类的 setUpClass() 和 tearDownClass() 不会被运行。
* 被跳过的模组的 setUpModule() 和 tearDownModule() 不会被运行。
6)断言常用方法



7)按顺序执行case
unittest框架默认根据ASCII码的顺序加载测试用例的,数字与字母的顺序为:“0-9”,“A-Z”,“a-z”。而想要用例按顺序执行,需要通过TestSuite类的addTest()方法按照一定的顺序来加载
8) 运行:python -m unittest test_demo.py 或是 python -m unittest -v test_demo.py (加上-v可以打印更详细的信息)
