单元测试unittest及报告生成(两种报告模板)

本文详细介绍Python中的unittest单元测试框架,包括基本概念、测试用例编写、测试报告生成等内容,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作。

在说unittest之前,先说几个概念:

TestCase 也就是测试用例

TestSuite 多个测试用例集合在一起,就是TestSuite

TestLoader是用来加载TestCase到TestSuite中的

TestRunner是来执行测试用例的,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息

1.单元测试:

  开发自己测自己写的代码;

2.导入模块unittest:

  import unittest  #导入unittest模块

  import HTMLTestRunner #导入HTMLTestRunner 报告模板模块

  from BeautifulReport import BeautifulReport  #导入BeautifulReport 报告模板模块

3.运行一个简单的unittest:

import unittest   #单元测试模块

class TestCalc(unittest.TestCase):
    def test1(self):    #函数名要以test开头,否则不会被执行
        self.assertEqual(1,1)

    def test2(self):
        self.assertEqual(1,2)

unittest.main() #会运行当前python文件里面的所有测试用例

4.unittest单元测试的基本流程:

  用例集/测试套件:存放测试用例的

  ①.先把所有的测试用例都放到用例集

  ②.运行这些测试用例

  ③.产生报告

代码:

一.生成报告模板HTMLTestRunner模块(比较丑且相对不好用)  

注:1.安装并导入HTMLTestRunner 模块,该模块是可以生成报告的模块。

  2.运行代码时,要以Run xx.py方式运行,不能以unittest方式运行,否则不会生成报告。

import unittest   #单元测试模块
import HTMLTestRunner  #用来生成报告的模块

class TestCalc(unittest.TestCase):
    def testcc(self):    #函数名要以test开头,否则不会被执行
        '''这是第一个测试用例'''       #用例描述,在函数下,用三个单引号里面写用例描述
        self.assertEqual(1,1)
        print('第一个用例')

    def testaa(self):
        '''这个是第二个测试用例'''
        self.assertEqual(1,2)
        print('第二个用例')

    def testdd(self):
        '''用例描述3'''
        print('第三个用例')

    def testbb(self):
        '''用例描述4'''
        print('第四个用例')

suite = unittest.TestSuite()  #定义一个测试集合
suite.addTest(unittest.makeSuite(TestCalc))  #把写的用例加进来(将TestCalc类)加进来
f = open('test.html','wb')  #以二进制模式打开一个文件
runner = HTMLTestRunner.HTMLTestRunner(f,title='unittest用例标题',description='这是用例描述')
runner.run(suite)  #运行用例(用例集合)

在浏览器打开生成的test.html文件,HTMLTestRunner报告如图:

5.setup()/teardown()与setUpClass/tearDownClass。如图:

import unittest   #单元测试模块
import HTMLTestRunner  #用来生成报告的模块

class TestCalc(unittest.TestCase):
    def setUp(self):  #每个用例运行之前运行的
        print('setup是啥时候运行的')

    def tearDown(self): #每个用例运行之后运行的
        print('teardown是啥时候运行的')

    @classmethod
    def setUpClass(cls):  #在所有用例执行之前运行的
        print('我是setUpclass,我位于所有用例的开始')

    @classmethod
    def tearDownClass(cls): #在所有用例都执行完之后运行的
        print('我是tearDownClass,我位于多有用例运行的结束')

    def testcc(self):    #函数名要以test开头,否则不会被执行
        '''这是第一个测试用例'''       #用例描述,在函数下,用三个单引号里面写用例描述
        self.assertEqual(1,1)
        print('第一个用例')

    def testaa(self):
        '''这个是第二个测试用例'''
        self.assertEqual(1,1)
        print('第二个用例')

    def testdd(self):
        '''用例描述3'''
        print('第三个用例')

    def testbb(self):
        '''用例描述4'''
        print('第四个用例')

unittest.main() #会运行当前python文件里面的所有测试用例

运行结果:

二.报告模板BeautifulReport(模板相对好用)

代码:

import unittest   #单元测试模块
from BeautifulReport import BeautifulReport as bf  #导入BeautifulReport模块,这个模块也是生成报告的模块,但是比HTMLTestRunner模板好看

class TestCalc(unittest.TestCase):
    def setUp(self):  #每个用例运行之前运行的
        print('setup是啥时候运行的')

    def tearDown(self): #每个用例运行之后运行的
        print('teardown是啥时候运行的')

    @classmethod
    def setUpClass(cls):  #在所有用例执行之前运行的
        print('我是setUpclass,我位于所有用例的开始')

    @classmethod
    def tearDownClass(cls): #在所有用例都执行完之后运行的
        print('我是tearDownClass,我位于多有用例运行的结束')

    def testcc(self):    #函数名要以test开头,否则不会被执行
        '''这是第一个测试用例'''       #用例描述,在函数下,用三个单引号里面写用例描述
        self.assertEqual(1,1)
        print('第一个用例')

    def testaa(self):
        '''这个是第二个测试用例'''
        self.assertEqual(1,1)
        print('第二个用例')

    def testdd(self):
        '''用例描述3'''
        print('第三个用例')

    def testbb(self):
        '''用例描述4'''
        print('第四个用例')

suite = unittest.TestSuite()  #定义一个测试集合
suite.addTest(unittest.makeSuite(TestCalc))  #把写的用例加进来(将TestCalc类)加进来
run = bf(suite) #实例化BeautifulReport模块
run.report(filename='test',description='这个描述参数是必填的')

浏览器查看生成的报告页面:

 

转载于:https://www.cnblogs.com/fancyl/p/9134482.html

单元测试报告 版本:V1.3 文 档 编 号 保 密 等 级 作 者 最后修改日期 审 核 人 最后审批日期 批 准 人 最后批准日期 修订记录 日期 版本 修订说明 修订人 目 录 1 简介 2 1.1 目的 2 1.2 背景 2 1.3 范围 2 2 测试用例清单 2 3 功能测试分析 2 4 边界测试分析 2 5 覆盖率分析 2 6 内存使用分析 2 7 典型缺陷记录 3 7.1 缺陷1 3 7.1.1 表现 3 7.1.2 原因 3 7.1.3 方案 3 8 测试数据分析 3 8.1 测试有效性分析 3 8.2 测试效率分析 3 9 产品质量分析 4 10 测试结论 4 简介 目的 【描述该单元测试报告的目的。】 背景 【描述单元测试报告的背景,单元测试活动目的。如无特殊背景信息,可裁剪。】 范围 【说明该单元测试报告在整个项目周期的适用范围】 测试用例清单 模块 目标类 级别 用例类 用例描述 执行结果 备注 【被测的代码类】 【代码级别】 【Junit测试类1】 【意图描述】 【P/F】 【Junit测试类2】 功能测试分析 边界测试分析 覆盖率分析 目标类 级别 方法覆盖率 行覆盖率 备注 【被测的代码类】 【代码级别】 内存使用分析 典型缺陷记录 记录单元测试中所发现的典型缺陷或常见缺陷。供再次发现同类问题时,作为参考使用。 缺陷1 表现 【缺陷表现描述】 原因 【缺陷产生原因分析描述】 方案 【解决方案描述】 测试有效性分析 【统计实际发现的缺陷数据,分析与计划值产生偏差的原因,结合《项目量化管理计划》定义的阈值,确定是否采取相关措施】 计划发现缺陷数 致命 严重 一般 实际发现缺陷数 偏差分析 对策或调整措施 产品质量分析 【结合上述数据和信息,对本次测试的项目、产品的本身质量进行分析、评价和总结】 测试结论  【描述测试是否达到测试计划的目的,是否满足单元测试的结束条件。】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值