一、unittest一些重要概念
TestCase
  测试用例是测试的最小单位,它检查特定输入集合的特定响应,unittest提供一个基类TestCase,它可以用来创建测试用例。
TestSuite
  测试套件是测试用例的集合,可以是一个或者多个,用来聚集需要一起执行的测试。
TestLoader
  TestLoader是用来加载TestCase到TestSuite中的
TestRunner
  测试用例的执行者,并提供结果给用户或返回值来指示测试执行结果。
setUp: 测试用例执行前初始化工作
tearDown 测试用例执行后清理工作

def suite():
    #方法1
    suite = unittest.TestSuite(unittest.makeSuite(UcenterApi,\'test\'))
    suite = unittest.TestSuite((suite,))        #或者直接return suite

    #方法2
    # suite = unittest.TestSuite()
    # suite.addTest(UcenterApi(\'test_auth\'))
    # suite.addTest(UcenterApi(\'test_query_by_id\'))

    #方法2拓展
    # tests = [\'test_auth\',\'test_query_by_id\']
    # suite = unittest.TestSuite(map(UcenterApi,tests))
    return suite

if __name__ == "__main__":
    now = datetime.datetime.now().strftime("%Y-%m-%d_%H%M%S")
    report_name = "api_result_%s.html" % now
    report_path = "/tmp/Test_Report"

    mysuite = suite()
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(mysuite)


runner参数:
- verbosity:更精细的输出级别
    - stream:运行结果输出到文件
    - failfast:如果失败停止后面的测试


二、命令行界面
运行测试
可以用命令行运行指定的测试模块、类或指定的测试方法
    python -m unittest -v ucenter_api ucenter_api2                #指定多个model
    python -m unittest -v test_module.TestClass                #指定类
    python -m unittest -v ucenter_api.UcenterApi.test_auth        #指定方法
    
    支持的参数:
    -v , --verbose                #详细输出
    -b,--buffer                   #标准输出
    -f,--failfast                #在第一个错误或故障时停止测试运行

测试发现
找到指定目录下所有测试模块,只有匹配到文件名才能被加载。
    python -m unittest discover -s /Users/jinlong/Desktop/daling_test -p "*_api.py"
    
    支持的参数:
    -s , --start-directorydirectory             #执行发现的起始目录(directory),默认是当前目录(.) 
    -p,--pattern pattern                         #匹配测试文件的模式(pattern),默认是test*.py 

三、跳过测试&预期失败
  unittest支持跳过单个测试甚至整个测试类。此外,它支持将测试标记为“预期失败”,这是一个被破坏并将失败的测试,但不应被视为失败 TestResult
跳过测试方法
   @unittest.skip(\'test skipping\')
    @unittest.skipIf(float(requests.__version__[0:4]) == 2.2,\'not supported in this lib version:2.2\')
    @unittest.skipUnless(sys.platform.startswith("Darwin"), "requires osX")
    def test_auth(self):
            pass

跳过测试类
  @unittest.skip(\'class skipping\')
      class UcenterApi(unittest.TestCase):

预期失败
  将测试标记为预期是失败的,如果测试失败则不计为失败。
    @unittest.expectedFailure
      def test_query_by_id(self):
            pass



四、断言
方法 检查一下:
  assertEqual(a, b) a == b
  assertNotEqual(a, a != b
  assertTrue(x) bool(x) is True
  assertFalse(x) bool(x) is False
  assertIs(a, b) a is b
  assertIsNot(a, b) a is not b
  assertIsNone(x) x is None
  assertIsNotNone(x) x is not None
  assertIn(a, b) a in b
  assertNotIn(a, b) a not in b
  assertIsInstance(a, b) isinstance(a, b)
  assertNotIsInstance(a, b) not isinstance(a, b)
代码实例
# -*- coding: utf-8 -*-
__author__ = \'jinlong\'
import unittest

class AssertionTest(unittest.TestCase):

    def setUp(self):
        self.test_is = "assertIs"
        self.test_none = None

    def test_assertion(self):
        self.assertEqual(1,1,u"参数不相等")                    
        self.assertNotEqual(1,2)                            
        self.assertTrue(True) or self.assertTrue(1==1)              
        self.assertFalse(False) or self.assertFalse(1==2)
        self.assertIs(self.test_is,self.test_is)
        self.assertIsNone(self.test_none)                      
        self.assertIn("a","abc")                             
        self.assertNotIn("ad", "abc")
        self.assertIsInstance(\'str\',str)                      

    def tearDown(self):
        pass

if __name__ == "__main__":
    unittest.main()


五、关于测试报告
  HTMLTestRunner:
    HTMLTestRunner是Python标准库的unittest模块的扩展。它生成易于使用的HTML测试报告.
    使用方法:将下载下来的饿HTMLTestRunner.py放到python环境的site-packages目录下,就可以引用使用了。
    with open(filename,"wb") as fp:
        runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title=\'LC_API_Result\',description=\'LC_Report\')
        runner.run(mysuite)

版权声明:本文为wang1001原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/wang1001/p/12170455.html