• python单元测试框架unittest的用法
  • 发布于 2个月前
  • 289 热度
    0 评论
一.unittest核心要素
unittest是python中自带一种单元测试框架,它提供了丰富的测试工具和测试用例管理机制,还可以输出测试测试报告,因此非常适合自动化测试。
1.TestCase:测试用例类
2.TestSuite:测试套件,管理多个测试用例
3.TestLoader:把testcase加载到testsuite中
4.TextTestRunner:执行测试用例和测试套件,返回执行结果
5.TestFixure:测试夹具,setUp执行用例前初始化用,tearDown用例执行结束后用。

二.TestCase
测试用例编写规范:
定义的测试用例类,必须继承unittest当中的TestCase的类和方法;
定义的测试用例类下每一条以test开头的方法,就是一条测试用例;

方法如下:
1.导入unittest包,定义测试类,定义方法(即用例),准备测试数据和预期结果
2.调用要测试的功能函数(自动化测试中即调用接口)
3.结果断言
import unittest
# 定义一个加法功能函数
def add(a,b):
    return a+b
# TestCase
class TestAdd(unittest.TestCase):
    def test_add(self):
            # 准备测试数据和预期结果
            a = 1
            b = 2
            expected = 3
            # 调用要测试的功能函数(自动化测试中即调用接口)
            c = add(a,b)
            # 断言结果
            if expected==c:
                print("测试通过!")
            else:
                print("测试不通过!")
运行结果:通过

三.unittest自带的断言方式
提供了多种断言方式,用的比较多的是assertEqual:断言数据是否相等,assertIn:验证某个值是否在指定的序列或字符串中出现,成员断言。
import unittest
# 定义一个加法功能函数
def add(a,b):
    return a+b

class TestAssert(unittest.TestCase):
    def test_assert01(self):
        # assertEqual,断言200=200
        self.assertEqual(200,200)
        # assertIn,断言200在不在列表里
        list1 = [100,200,300]
        self.assertIn(100,list1)
运行结果:通过

四.TestSuite和TestLoader
TestSuite:一个功能往往会多条测试用例,想把多个测试用例在一起执行就有了TestSuite测试套件这个概念。说直白点,每个用例是一个鸡蛋,TestSuite就相当于装鸡蛋的篮子。
TestLoader:加载TestCase到TestSuite中,即加载满足条件的测试用例,并把测试用例封装成测试套件。

方法如下:
1.创建TestSuite实例
2.创建TestLoader实例
3.加载测试用例到测试套件中
import unittest
# 实例化TestSuite
suite = unittest.TestSuite()
# 实例化TestLoader
loadr = unittest.TestLoader()
# 把指定路径下所有以test开头的用例文件,加载测试用例到套件
suite.addTest(loadr.discover(r'D:\project\untitked\testcase',pattern='test_*.py'))
# 上面三行代码写成一行(实际工作中用到的写法)
suite = unittest.defaultTestLoader.discover(r'D:\project\untitked\testcase',pattern='test_*.py')
五.TextTestRunner
TextTestRunner:用来执行测试用例和测试套件,并返回测试用例的执行结果,通过TextTestRunner类提供的run()方法来执行testsuite、test case。它还可以用图形或者文本接口,把返回的测试结果更形象的展现出来,如:HTMLTestRunner、BeautifulReport等。
方法如下:
 1.创建TextTestRunner实例
 2.调用run方法
# 堆代码 duidaima.com
# 创建测试套件 
suite = unittest.defaultTestLoader.discover(r'D:\project\untitked\testcase',pattern='test_*.py')
# 实例化TextTestResult
runner = unittest.TextTestRunner()
# 调用run方法,运行测试所有测试用例
runner.run(suite)
六.TestFixure
TestFixure:测试套件,测试用例环境的初始化和销毁操作,即执行测试用例前(前置-SetUp),以及测试后(后置-TearDown)。
1.用例级别:
setUp:用例级别的前置:每条测试用例执行之前都会执行;
tearDown:用例级别的后置:每条测试用例执行之后都会执行

2.测试类级别:
setUpClass:测试类级别的前置:测试类中的用例执行前执行;
tearDownClass测试类级别的后置:测试类中的所有用例执行完毕之后执行
class TestFixure(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print("======测试类级别setUpClass======")
    @classmethod
    def tearDownClass(cls):
        print("======测试类级别tearDownClass======")
    def setUp(self):
        print("======用例级别setUp======")
    def tearDown(self):
        print("======用例级别tearDown======")
    def test_01(self):
        print("==测试用例01==")
    def test_02(self):
        print("==测试用例02=="
运行结果:

七.总结
编写用例步骤:
1.准备数据和预期结果
2.调用被测功能函数(接口)
3.断言

运行用例步骤:
1.创建加载测试套件
2.创建TextTestRunner(或其他report)实例
3.调用run方法
用户评论