unittest总结

unittest

Python内置的单元测试框架,跟pytest类似

setup/teardown

在用例执行之前执行setup 接着执行用例本身 最后,执行teardown

setupclass/teardownclass

在类中,所有用例执行之前执行setupclass 执行用例本身 当所有的用例执行完毕,再执行teardownclass

verbosity

0,静默模式,简单的输出结果 1,默认模式,添加每个用例执行的结果,通过是.,失败是F,报错是E 2,详细模式,详细的输出每个用例的执行结果

断言

assertEqual(a, b, msg) a == b 如果a不等于b,断言失败 assertNotEqual(a, b, msg) a != b 如果a等于b,断言失败 assertTrue(x, msg) bool(x) is True 如果表达式x不为True,断言失败 assertFalse(x, msg) bool(x) is False 如果表达式x不为False,断言失败 assertIs(a, b, msg) a is b 如果a is not 2,断言失败 3.1 assertIsNot(a, b, msg) a is not b 如果a is b,断言失败 3.1 assertIsNone(x, msg) x is not None 如果x不是None,断言失败 3.1 assertIn(a, b, msg) a in b 如果a not in b,断言失败 3.1 assertNotIn(a, b, msg) a not in b 如果a in b,断言失败 3.1 assertIsInstance(a, b, msg) isinstance(a, b) 如果a不是b类型,断言失败 3.2 assertNotIsInstance(a, b, msg) not isinstance(a, b) 如果a是b类型,断言失败 3.2

 import unittest
 import requests
 
 url = 'https://cnodejs.org/api/v1/topics'
 
 class TestCase2(unittest.TestCase):
 
     def setUp(self):
         response = requests.get(url)
         self.res = response.json()['success']
 
     def test_case_01(self):
 
         print(111111, self.res)
         # self.assertEqual(False, res, msg='预期值{} 与期望值{} 不相符'.format(False, res))
         self.assertTrue(self.res)
 
 
     def test_case_02(self):
         self.assertFalse(self.res)
 
 if __name__ == '__main__':
     unittest.main()

TestSuite

测试用例套件

  1. 自己实例化用力对象

  2. 使用TestTSuite创建容器

  3. 自己将用例对象添加到容器中

  4. 使用TextTestRunner执行器执行容器中的用例

makeSuite

  1. 在创建容器时,该套件自动帮我们去指定的TestCaseClass类中获取以prefix开头的用例,返回一个容器对象

  2. 使用执行器执行该容器中的用例 #

 import unittest
 discover = unittest.TestLoader().discover(
     start_dir=base_dir,   # 该参必传
     pattern='test*.py',   # 保持默认即可。
     top_level_dir=None
    )
 unittest.TextTestRunner(verbosity=2).run(discover)

该discover方法接收三个参数:

  • start_dir:要测试的模块名或者测试用例的目录。

  • pattern="test*.py":表示用例文件名的匹配原则,默认匹配以test开头的文件名,星号表示后续的多个字符。

  • top_level_dir=None:测试模块的顶层目录,如果没有顶层目录,默认为None。

注意!!!意!! discover对给定的目录是有要求的,它只识别Python的包,也就是目录内有init.py文件的才算是Python的包,只要是要读取的目录,都必须是包。 关于start_dir和top_level_dir的几种情况:

  • start_dir目录可以单独指定,这个时候,让top_level_dir保持默认(None)即可。

  • start_dir == top_level_dir, start_dir目录与top_level_dir目录一致,discover寻找start_dir指定目录内的符合规则的模块。

  • start_dir < top_level_dir,start_dir目录是top_level_dir目录的子目录。discover寻找start_dir指定目录内的符合规则的模块。

  • start_dir > top_level_dir,start_dir目录如果大于top_level_dir目录,等待你的是报错AssertionError: Path must be within the project。说你指定的路径(start_dir)必须位于项目内(top_level_dir)。

猜你喜欢

转载自www.cnblogs.com/zhang-da/p/12240939.html