1、unittest是Python自带的单元测试框架,受到Java的Junit启发,可以用来自动化测试框架的用例组织执行框架,也可以对python代码进行单元测试。
2、优点:提供用例组织与执行方法;提供比较方法;提供丰富的日志、清晰的报告。
1、在使用unitest作为单元测试框架时,最常用的为unit.testcase、TestFixture;测试用例类继承unit.testcase,mock测试方法外部依赖,assert断言结果的正确性,coverage查看单元测试覆盖度;
2、在使用unitest作为自动化测试框架时,最常用的为TestFixture、TestCase、TestSuite、TestRunner,此次着重介绍作为自动化测试框架时的使用方法。
用途:主要用于测试用例的环境,包括执行用例前的环境准备(setUp)、执行完成后的环境恢复(tearDown);
使用方法介绍:
setUp():准备环境,执行每个测试用例的前置条件; tearDown():环境还原,执行每个测试用例的后置条件; setUpClass():必须使用@classmethod装饰器,所有case执行的前置条件,只运行一次; tearDownClass():必须使用@classmethod装饰器,所有case运行完后只运行一次;2、Testcase
用途:
(1)主要用于编写测试用例,在使用时测试用例类需要继承unittest.Testcase类,assert断言测试用例执行结果,unittest.main()用来执行测试用例;
(2)测试用例类名必须以Test开头,并且测试用例也需要使用test开头,执行时只会执行以test开头的方法;
使用方法介绍:
import unittest from unittest import mock import mock_demo_1 class TestMathClass(unittest.TestCase): """测试两个数相加用例""" def test_add(self): # 初始化被测函数类实例 math = mock_demo_1.MathClass() # mock add方法 返回10 math.add = mock.Mock(return_value=15) # 调用被测函数 result = math.add(5, 10) # 断言实际结果和预期结果 self.assertEqual(15, result) if __name__ == '__main__': unittest.main()3、TestSuite
用途:
(1)默认情况下,执行用例时会按照test的 A-Z、a-z的顺序执行,如果想要修改默认的执行顺序,让执行顺序按照我们的意愿来,就需要使用TestSuite,TestSuite主要是用来把多个测试用例集合起来,按照集合的顺序执行;
(2)使用addTest()或addTests()向suite中添加用例,用例的执行顺序按照添加的顺序执行;
使用方法:
(1)直接添加testcase
# 构建suite对象 suite = unittest.TestSuite() # 定义测试用例集 alltestnames = [TestFunc("test_add"),TestFunc("test_minus"),TestFunc("test_multi"),TestFunc("test_divide")] for test in alltestnames: try: #最关键的就是这一句,循环执行数据组里的用例。 suite.addTest(unittest.defaultTestLoader.loadTestsFromName(test)) print 'SUCCESS: run test "%s".' % test runner = unittest.TextTestRunner(verbosity=2) # 执行suite测试集 runner.run(suite)
(2)TestSuite可以再包含testsuite
suite1 = module.TheTestSuite() suite2=module.TheTestSuite() alltests=unittest.TestSuite([suite1],[suite2])
(3)跳过执行case
使用Skip装饰器可以跳过执行某些case
(1)skip():无条件跳过 @unittest.skip("i don't want to run this case. ") (2)skipIf(condition,reason):如果condition为true,则 skip @unittest.skipIf(condition,reason) (3)skipUnless(condition,reason):如果condition为False,则skip @unittest.skipUnless(condition,reason)4、TestRunner
TestRunner主要为TestLoader类和TestHTMLRunner
用途:
(1)TestLoader主要用于加载测试用例,loadTestsFrom*()方法从各个地方寻找testcase;
(2)TextTestRunner():执行测试用例;
使用方法:
unittest.TestLoader().loadTestsFromTestCase(testCaseClass) unittest.TestLoader().loadTestsFromModule(module) unittest.TestLoader().loadTestsFromName(name,module=None) unittest.TestLoader().loadTestsFromNames(names,module=None) unittest.TestLoader().getTestCaseNames(testCaseclass) unittest.TestLoader().discover()
import unittest import os # 用例的路径 case_path = os.path.join(os.getcwd(),"case") # 报告存放的路径 report_path = os.path.join(os.getcwd(),"report") def all_cases(): discover= unittest.defaultTestLoader.discover(case_path,pattern="test*.py",top_level_dir=None) print(discover) return discover if __name__ == "__main__": # 执行测试用例 runner = unittest.TextTestRunner(verbosity=2) runner.run(all_cases())5、HTMLTestRunner
用途:HTMLTestRunner主要用于生成测试报告
使用方法:
HTMLTestRunner()方法有三个参数: --stream:测试报告写入文件的存储区域 --title:测试报告的主题 --description:测试报告的描述
runner = HTMLTestRunner.HTMLTestRunner( stream = fp, title = u'【测试】测试执行报告' , description = u'【测试】测试HTMLTestRunner' runner.run(suite)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)