单元测试
单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件或场景下某个特定函数的行为
单元测试需要注意:要清楚对程序块所预期的输入和输入,根据预期和程序逻辑写case。预期结果要针对需求设计的逻辑去写,而不是针对程序的实现去屑。
单元测试覆盖类型
语句覆盖、条件覆盖、判断覆盖、路径覆盖
Unittest 框架
unittest文档
unittest编写与规范
Unittest提供了test case 、test suites、test fixtures 、test runner相关的组件
编写规范
测试模块首先 import unnittest
测试类必须继承 unittest.TestCase
测试方法必须以“test_"开头
类名单词首字母大写
测试框架结构
setUp用来准备环境,tearDown用来清理环境
如果想要在所有case执行之前准备一次环境,并在所有case执行结束之后再清理环境,我们可以用setUpClass()与tearDownClass()
如果想有些方法不在本次执行中使用 @unittest.skip
import unittest
class TestStringMethod(unittest.TestCase):
def upper(self):
self.assertEqual('foo'.upper(), 'FOO')
# setup,teardown,在方法前后调用,setupclass,teardownclass 在类执行前后调用
def setUpclass(cls) -> None:
print('setup')
def tearDownclass(cls) -> None:
print('teardown')
def test_upper(self):
self.assertTrue("FOO".isupper())
self.assertFalse("Foo".isupper())
print('test Upper')
def test_abc(self):
print('abc')
class Search:
def search_fun(self):
print('search')
return True
class TestSearch(unittest.TestCase):
def test_search(self):
print('testsearch1')
search = Search()
assert True == search.search_fun()
if __name__ == '__main__':
unittest.main()
unitest 断言
# unittest 断言
import unittest
class TestUnittestAssert(unittest.TestCase):
def test_equal(self):
print('断言相等')
self.assertEqual(1, 1, '判断 1==1')
def test_equal2(self):
print('判断不相等')
self.assertNotEqual(1, 2, '判断1!=2')
def test_equal3(self):
print('判断是否为TRUE')
self.assertTrue(1==1, '结果为TRUE')
def test_equal4(self):
print('判断是否为FALSE')
self.assertFalse(1==2, '结果为False')
UNITTEST执行测试用力
执行方法1:unittest.main()
执行方法2:从容器中执行
suite = unittest.TestSuite()
suite.addTest(TestMethod('test01')
suite.addTest(TestMethod('test02')
unittest.TextTestRunner().run(suite)
if __name__ == '__main__':
# 执行所有
unittest.main()
# 执行制定测试用例
suite = unittest.TestSuite()
suite.addTest(TestUnittestAssert('test_equal'))
suite.addTest(TestUnittestAssert('test_equal2'))
unittest.TextTestRunner.run(suite)
# 执行某个测试类
suite1 = unittest.defaultTestLoader.loadTestsFromTestCase(TestUnittestAssert)
suite2 = unittest.TestSuite([suite1])
unittest.TextTestRunner(verbosity=2).run(suite2)
# 执行 某个文件下的
test_dir = './'
discover = unittest.defaultTestLoader.discover(test_dir , pattern = "cho721 * .py")
unittest.TextTestRunner(verbosity=2).run(discover)
htmltestruuner测试报告
GITHUB地址 htmltestruuner
if __name__ == '__main__':
report_title = '用例执行报告-标题'
desc = '用于展示修改样式后的HTMLTestRunner'
report_file = './测试报告.html'
test_dir = './'
discover = unittest.defaultTestLoader.discover(test_dir, pattern="cho721_3.py")
with open(report_file, 'wb') as report:
runner = HTMLTestRunner(stream=report, title=report_title, description=desc)
runner.run(discover)