1.unittest简介
unittest库包括:TestCase、TestSuite、TestLoder、TextRunner、TextTestResult、TestFixture
TestCase是测试的最小单元模块。它检查对特定输入集合的特定响应。unittest提供给一个基类Testcase,可以使用这个类创建一个新测试testTestCase 。
TestSuite是测试集,测试集是测试用例、测试集或者二者的一个集合。它被用于把测试整合在一起,批量运行测试。
TestLoder是用来加载 TestCase到TestSuite中,其中有几个loadTestsFrom_()方法,就是从各个地方寻找TestCase,创建他们的实例,然后add到TestSuite中,再返回一个TestSuite实例
TextRunner是运行测试器, 测试运行器是协调测试执行并向用户提供结果的组件。运行器可以使用图形界面、文本界面、或返回特定值来指示执行测试的结果。
TextTestResult测试结果会保存到TextTestResult实例中,包括运行了多少用例,成功与失败多少等信息
TestFixture表示执行一个或者多个测试前的准备工作,确保每个测试之间的独立性。这可能涉及到创建临时或者代理数据库、目录、服务器情动进程等相关准备工作
2.unittest的使用
# 步骤1、引入单元测试库 import unittest # 步骤2:定义测试类,继承TestCase类。 class MyTestClass(unittest.TestCase): # 在测试类当中,所有用例运行之前,执行的前置工作。不管有几个用例,且只运行一次。 # 有3个用例,在第一个用例运行之前,运行一次。 @classmethod def setUpClass(cls): print("====我是测试类级别的前置工作===整个测试类,只运行1次!在用例执行之前!====") # 在测试类当中,所有用例运行之后,执行的后置工作。不管有几个用例,且只运行一次。 @classmethod def tearDownClass(cls): print("====我是测试类级别的后置工作===整个测试类,只运行1次!在所有用例执行完成之后!====") # 每一条用例运行之前,前置工作 def setUp(self): print("=====开始运行 一条用例======") # 每一条用例运行之后,后置工作 def tearDown(self): print("=====一条用例 运行结束======") # 其中函数名称以test_开头的,是一个测试用例。 def test_upper(self): print("***************************") # 1、测试数据 my_str = "iDo" # 2、步骤 res = my_str.upper() # 3、断言 == 期望结果与实际结果比对。 self.assertEqual(res, "IDO", " 不是大写") # 如果期望与实际不符,那么AssertionError def test_upper_is_true(self): print("***************************") # 1、测试数据 my_str = "iDo" # 2、步骤 res = my_str.isupper() # 期望:True 实际的:res self.assertTrue(res) def test_who_bigger(self): print("***************************") # 1、测试数据 a, b = 100, 244 # 期望:小于 self.assertLess(a, b)
3.断言种类
方法 | 检查 | 版本 | 注释 |
assertEqual(a, b) | a ==b |
断言第一个参数和第二个参数是否相等(==相等)、(!=不相等) |
|
assertNotEqual(a, b) | a !=b | ||
assertTrue(x) | bool(x) is True | 测试表达式是true(或false) |
|
assertFalse(x) | Bool(x) is False | ||
assertIs(a, b) | a is b | 3.1 | 断言第一个参数和第二个参数是否为同一个对象 |
assertIsNot(a, b) | a is not b | 3.1 | |
assertIsNone(x) | x is None | 3.1 | 断言表达式是否为None对象 |
assertIsNotNone(x) | x is not None | 3.1 | |
assertIn(a, b) | a in b | 3.1 | 判断第一个参数是否在第二个参数中,反过来讲,第二个参数是否包含第一个参数 |
assertNotIn(a, b) | a not in b | 3.1 | |
assertIsInstance(a, b) | isinstance(a,b) | 3.1 | 判断a与b的数据类型是否相等 |
assertNotIsInstance(a, b) | not isinstance(a,b) | 3.1 | |
assertAlmostEqual(a,b, places=None) | 判断a是否约等于b。 palces: 指定精确到小数点后多少位,默认为7 | ||
assertNotAlmostEqual(self, first, second, places=None) | |||
assertDictEqual(a,b) |
dict==dict |
判断字典a和字典b是否相等 | |
assertCountEqual(a,b) | list==list | 判断a,b两个列表元素相同 | |
assertMultiLineEqual(a,b) | text==text | 判断a,b的文本一致 | |
assertLess(a,b) | a<b | 判断a<b | |
assertLessEqual(a,b) | a<=b | 判断a<=b | |
assertGreater(a,b) | a>b | 判断a>b | |
assertGreaterEqual(a,b) | a>=b | 判断a>=b |
4.测试套件的使用
import unittest from common.HTMLTestRunnerNew import HTMLTestRunner #生成html测试报告 HtmlTestRunner() from common import dir_config # 测试用例集的目录 # TestSuite实例化 s = unittest.TestSuite() # 套件实例化 t = unittest.TestLoader() # 收集器实例化 # 将收集到的用例,放到测试套件当中。 s.addTests(t.discover(dir_config.test_cases_file)) # 打开一个html文件 fs = open(dir_config.html_file, "wb") # 实例化html结果的用例运行器 runner = HTMLTestRunner(fs,title="前程贷测试报告",description="前程贷接口测试!!",tester="administrator") # 运行测试套件 runner.run(s)