学习笔记四:unittest单元测试框架

1、对于单元测试框架来说,主要完成三件事:

  • 提供用例组织与执行(如何定义一条用例):

当你的测试用例只有几条时,可以不必考虑用例的组织,但是,当测试用例达到成百上千条时,大量的 测试用例堆砌在一起,就产生了扩展性与维护性等问题,此时需要考虑用例的规范与组织问题了。单元测试 框架就是用来解决这个问题的。

  • 提供丰富的比较方法(如何写断言):

不论是功能测试,还是单元测试,在用例执行完成之后都需要将实际结果与预期结果进行比较(断言), 从而断定用例是否执行通过。单元测试框架一般会提供丰富的断言方法。例如,判断相等/不等、包含/不包含、 True/False 的断言方法等。

  • 提供丰富的日志(如何运行,以及统计结果):

当测试用例执行失败时能抛出清晰的失败原因,当所有用例执行完成后能提供丰富的执行结果。例如, 总执行时间、失败用例数、成功用例数等。

2、unittest规范

  • 必须创建测试类,继承unittest.TestCase
  • 创建测试方法,必须以test开头(默认规则)
  • 断言要使用父类里面的self 修改规则:
loader = unittest.TestLoader()
loader.testMethodPrefix="规则"
test_class=loader.loadTestsFromTestCase(用例名称)#加载测试类
suit=unittest.TestCase()
suit.addTests(test_class))

3、unittest提供的四种重要的概念

Test Case

一个 TestCase 的实例就是一个测试用例。一个测试用例就是一个完整的测试单元,通过运行这个测试单元,可以对某一个功能进行验证。包括测试前准 备环境的搭建(setUp)、实现测试过程的代码(run),以及测试后环境的还原(tearDown)。默认以test开头

Test Suite

Test Suite 用来组装单个测试用例。可以通过 addTest 加载 TestCase 到 TestSuite 中,从而返 回一个 TestSuite 实例。

Test Runner

测试执行策略和执行结果。在 unittest 单元测试框架中,通过 TextTestRunner 类提供的 run()方法来执行 testsuite/testcase。testrunner 可以使用图形界面、文本界面,或返回一个特殊的值等方式来表示测试执行的结果。

Test Fixture

对一个测试用例环境的搭建和销毁,就是一个 fixture,通过覆盖 TestCase 的 setUp()和 tearDown()方法来实现。setUp一般用来初始化环境,tearDown 用来还原环境。

  • 注意:tearDown 的过程很重要,要为下一个 test case 留下一个干净的环境。

用法:

from calculator import Count import unittest

class TestCount(unittest.TestCase):
def setUp(self):
print("test start")
def test_add(self):
j = Count(2, 3)
self.assertEqual(j.add(), 5)
def test_add2(self):
j = Count(41, 76)
self.assertEqual(j.add(), 117)
def tearDown(self):
print("test end")
if __name__ == '__main__':
# 构造测试集
suite = unittest.TestSuite()
suite.addTest(TestCount("test_add2"))
# 执行测试
runner = unittest.TextTestRunner()
runner.run(suite)
from calculator import Count import unittest

class TestCount(unittest.TestCase):
def setUp(self):
print("test start")
def test_add(self):
j = Count(2, 3)
self.assertEqual(j.add(), 5)
def test_add2(self):
j = Count(41, 76)
self.assertEqual(j.add(), 117)
def tearDown(self):
print("test end")
if __name__ == '__main__':
# 构造测试集
suite = unittest.TestSuite()
suite.addTest(TestCount("test_add2"))
# 执行测试
runner = unittest.TextTestRunner()
runner.run(suite)

4、断言方法

 

 

 

5、执行多个文件的测试用例

import unittest 
# 定义测试用例的目录为当前目录
test_dir = './'
discover = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')
if __name__ == '__main__':
runner = unittest.TextTestRunner()
runner.run(discover)

注:unittest 框架默认根据 ASCII 码的顺序加载测试用例,数字与字母的顺序为: 0~9,A~Z,a~z。

单元测试用例标记:
@unittest.skip(reason)#无条件地跳过,reason说明跳过测试的原因。
@unittest.skipIf(condition,reason)#如果条件为真时,跳过。
@unittest.skipUnless(condition,reason)#当条件为True时执行测试。
@unittest.expectedFailure()#不管执行结果是否失败,统一标记为失败

Fixture标记:
setUpModule/tearDownModule : 在整个模块的开始与结束时被执行。
setUpClass(cls)/tearDownClass(cls): 在测试类的开始与结束时被执行。
setUp(self)/tearDown(self) : 在测试用例的开始与结束时被执行。
注:编写自动化时候的原则

* 尽量不要在setUp/tearDown 写元素定位操作,如果需要用例,封装调用。
* 断言一定要写在每个用例里面,单独封装一个断言。不要把断言和步骤放到一起。
posted @ 2021-04-28 16:05  YanaMay  阅读(97)  评论(0)    收藏  举报