Python内置的单元测试框架,跟pytest类似
在用例执行之前执行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
测试用例套件
-
自己实例化用力对象
-
使用TestTSuite创建容器
-
自己将用例对象添加到容器中
-
使用TextTestRunner执行器执行容器中的用例
makeSuite
-
在创建容器时,该套件自动帮我们去指定的TestCaseClass类中获取以prefix开头的用例,返回一个容器对象
-
使用执行器执行该容器中的用例 #
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)。