Unittest组织用例的姿势

本文我们将会讲解Python Unittest 里组织用例的5种姿势。 环境准备: python 3.0以上 python requests库 小编的环境: python 3.6.4 一、TestLoader 当 import unittest 时 ,会自动导入TestLoader类 TestLoader这个类下,封装了 5 种组织用例的方法 loader.py class TestLoader(object): """ 该类负责根据各种标准加载测试并将它们包装在TestSuite中 """ def loadTestsFromTestCase(self, testCaseClass): """ 返回testCaseClass中包含的所有测试用例的套件 """ def loadTestsFromModule(self, module, *args, pattern=None, **kws): """ 返回给定模块中包含的所有测试用例的套件 """ def loadTestsFromName(self, name, module=None): """ 返回给定用例名的测试用例的套件 """ def loadTestsFromNames(self, names, module=None): """ 返回给定的一组用例名的测试用例的套件 """ def discover(self, start_dir, pattern='test*.py', top_level_dir=None): """ 查找并返回指定的起始目录中的所有测试模块,递归到子目录中以查找它们并返回在其 中找到的所有测试。仅加载与模式匹配的测试文件。 必须可以从项目的顶层导入测试模块。如果起始目录不是顶级目录,则必须单独指定顶级目录。 """ defaultTestLoader = TestLoader() """ 当执行 import unittest 时 会自动导入 defaultTestLoader defaultTestLoader是TestLoader()的实例对象 """ 二、unittest组织用例方法演示 项目目录 how_to_run_test_case test_case __init__.py test_add.py test_sub.py run_from_test_case_class.py run_from_test_case_moudle.py run_from_case_name.py run_from_case_names.py run_from_discover.py test_add.py # encoding:utf8 import unittest class AddCase(unittest.TestCase): def add_fun(self, a, b): return a + b def test_add_1(self): '''加法冒烟测试''' ret = self.add_fun(1, 2) self.assertEqual(3, ret) def test_add_2(self): ret = self.add_fun(1, 2) self.assertEqual(6, ret) test_sub.py # encoding:utf8 import unittest class SubCase(unittest.TestCase): def add_fun(self, a, b): return a - b def test_sub_1(self): '''减法冒烟测试''' ret = self.add_fun(1, 2) self.assertEqual(-1, ret) def test_sub_2(self): ret = self.add_fun(1, 2) self.assertEqual(6, ret) 1、加载测试类中的用例 loadTestsFromTestCase(self, testCaseClass) 使用loadTestsFromTestCase这个方法,需传入unittest测试类的类名 以项目为例子,传入 testCaseClass :AddCase 例子: run_from_test_case_class.py # encoding:utf8 import unittest from test_case.test_add import AddCase cases = unittest.TestLoader().loadTestsFromTestCase(AddCase) runner = unittest.TextTestRunner(verbosity=2) runner.run(cases) 1.1 运行 run_from_test_case_class.py python run_from_test_case_class.py 1.2 运行结果 test_add_1 (test_case.test_add.AddCase) 加法冒烟测试 ... ok test_add_2 (test_case.test_add.AddCase) ... FAIL 2、加载模块中的测试用例 loadTestsFromModule(self, module, *args, pattern=None, **kws) 使用loadTestsFromModule这个方法,需传入被测试模块 以项目为例子,传入参数 module :test_add 例子: run_from_test_case_moudle.py # encoding:utf8 import unittest from test_case import test_add cases = unittest.TestLoader().loadTestsFromModule(test_add) runner = unittest.TextTestRunner(verbosity=2) runner.run(cases) 2.1 运行 run_from_test_case_moudle.py python run_from_test_case_moudle.py 2.2 运行结果 test_add_1 (test_case.test_add.AddCase) 加法冒烟测试 ... ok test_add_2 (test_case.test_add.AddCase) ... FAIL 3、加载指定的单个测试用例 loadTestsFromName(self, name, module=None) 使用loadTestsFromName这个方法,需传入测试用例的方法名 传入测试用例的方法名格式:moudleName.testCaseClassName.testCaseName 以项目为例子,我想测试test_add.py 里面的用例 test_add_1 我需要传入的参数 name:test_add.AddCase.test_add_1 loadTestsFromName这个方法是在 sys.path 里面的路径去寻找测试模块test_add.py,然后再寻找测试类AddCase 最后再寻找测试用例test_add_1 例子: run_from_case_name.py # encoding:utf8 import unittest import os import sys # 获取 "how_to_run_test_case" 的绝对路径 dir_run_test_case = os.path.dirname(os.path.abspath(__file__)) # 获取 "test_case" 的绝对路径 dir_test_case = dir_run_test_case + '/test_case' # 把 "test_case" 的绝对路径 加入 sys.path sys.path.insert(0,dir_test_case) case= unittest.TestLoader().loadTestsFromName('test_add.AddCase.test_add_1') runner = unittest.TextTestRunner(verbosity=2) runner.run(cases) 3.1 运行 run_from_case_name.py python run_from_case_name.py 3.2 运行结果 test_add_1 (test_add.AddCase) 加法冒烟测试 ... ok 4、加载指定的多个测试用例 loadTestsFromNames(self, names, module=None) 使用loadTestsFromNames这个方法,需要传入一个数组 数组里面里面的元素必须是字符串 数组元素可以是模块、类、方法 数组元素 - 传入格式1:moudleName 数组元素 - 传入格式2:moudleName.testCaseClassName 数组元素 - 传入格式3:moudleName.testCaseClassName.testCaseName 以项目为例,我想测试test_add.py 里面的用例 test_add_1 ,以及test_sub.py 里面的用例 test_sub_1 我需要传入的参数 names:['test_sub.SubCase.test_sub_2','test_add.AddCase.test_add_1'] loadTestsFromNames这个方法是在 sys.path 里面的路径去寻找匹配的测试用例 执行用例是根据数组元素的的顺序执行 例子: run_from_case_names.py # encoding:utf8 import unittest import sys import os # 获取 "how_to_run_test_case" 的绝对路径 dir_run_test_case = os.path.dirname(os.path.abspath(__file__)) # 获取 "test_case" 的绝对路径 dir_test_case = dir_run_test_case + '/test_case' # 把 "test_case" 的绝对路径 加入 sys.path sys.path.insert(0,dir_test_case) cases = ['test_sub.SubCase.test_sub_1','test_add.AddCase.test_add_1'] suite = unittest.TestLoader().loadTestsFromNames(cases) runner = unittest.TextTestRunner(verbosity=2) runner.run(suite) 4.1 运行 run_from_case_names.py python run_from_case_names.py 4.2 运行结果 test_sub_1 (test_sub.SubCase) 减法冒烟测试 ... ok test_add_1 (test_add.AddCase) 加法冒烟测试 ... ok 5、加载指定目录下所有的测试用例 discover(self, start_dir, pattern='test*.py', top_level_dir=None) start_dir : 查找用例的起始目录 pattern='test*py' : 查找模块名为test开头的python文件 top_level_dir=None :测试模块顶级目录 例子: run_from_discover.py # encoding:utf8 import unittest import os dir_how_to_run_test_case = os.path.dirname(os.path.abspath(__file__)) dir_test_case = dir_how_to_run_test_case + '/test_case' cases = unittest.defaultTestLoader.discover(dir_test_case) runner = unittest.TextTestRunner(verbosity=2) runner.run(cases) 5.1 运行 run_from_discover.py python run_from_discover.py 5.2 运行结果 test_add_1 (test_add.AddCase) 加法冒烟测试 ... ok test_add_2 (test_add.AddCase) ... FAIL test_sub_1 (test_sub.SubCase) 减法冒烟测试 ... ok test_sub_2 (test_sub.SubCase) ... FAIL 6、 Github 源码地址: https://github.com/SEtester/how_to_run_test_casehttps://www.cnblogs.com/snailrunning/p/10051585.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信