码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Unittest套件与运行器


    目录

    • 1.Skip装饰器的使用
    • 2.Suite测试套件,
      • 1.创建测试套件
      • 2.在套件中添加测试用例
      • 3.批量添加用例
      • 4.通过添加一个完整的class进入套件
      • 5.基于文件名称来进行添加
      • 6.批量添加测试用例
      • 7.通过运行器来运行套件
    • 3.HTMLTestRunner生成测试报告
      • 1.配置测试报告的相关内容
      • 2.保存报告的路径是否存在,不存在则创建一个
      • 3.生成测试报告,其实就是写入一个文件内容


    1.Skip装饰器的使用

    '''
        Skip装饰器的使用
            skip表示无条件直接跳过
            skipIf表示表达式成立,则跳过,不成立则继续执行
            skipUnless与skipIf相反
            expectedFailure 默认用例执行会失败,并将其忽略
            Unittest下的杂技套装
    '''
    import unittest
    
    class Demo(unittest.TestCase):
    
        @unittest.skip('无条件跳过该条用例执行')
        def test_01(self):
            print(1)
    
        @unittest.skipIf(1 == 2,'这是If的理由')
        def test_02(self):
            print(2)
    
        # @unittest.skipUnless( 1== 2,'这是Unless的理由')
        def test_03(self):
            print(3 / 0)
    
        # @unittest.expectedFailure
        def test_04(self):
            print(4)
            self.assertEqual(1,2,msg = '断言失败')
    
    # if __name__ == '__main__':
    #     unittest.main()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    2.Suite测试套件,

    '''
        Suite测试套件,专门用于管理所有的测试用例类。可以理解为是用例的List,物理形态下就是一个文件夹的概念
        套件的使用,一定是重新建立一个py文件进行调用,如果在UnitTest类下通过main函数调用则不会生效。
        unittest.TestSuite类来进行使用
        suite的运行一定是基于运行器运行的
        套件中运行的测试用例,是基于添加的顺序来进行执行的,与UnitTest的用例排序没有关系
        HTMLTestRunner测试报告:本质意义而言,其实就是一个运行器。
            环境部署:直接下载py文件,放到python安装路径下的lib文件夹中就可以了。不要通过pip安装
            网上下载的默认是只支持2.7版本及以下的。如果要支持到3以上版本,需要修改源码。
            修改py文件的源码:
                第94行,将import StringIO修改成import io
                第539行,将self.outputBuffer = StringIO.StringIO()修改成 self.outputBuffer = io.StringIO()
                第642行,将if not rmap.has_key(cls):修改成if not cls in rmap:
                第766行,将uo = o.decode('latin-1')修改成uo = e
                第772行,将ue = e.decode('latin-1')修改成ue = e
                第631行,将print >> sys.stderr, '\nTime Elapsed: %s' %  (self.stopTime-self.startTime)修改成print(sys.stderr, '\nTime  Elapsed: %s' % (self.stopTime-self.startTime))
                UnitTest下所有的测试用例用test开头。所有的测试用例文件,也需要以test开头。
    '''
    import os
    import unittest
    # from HTMLTestRunner import HTMLTestRunner
    from HTMLTestReportCN import HTMLTestRunner
    # from class27.test_demo import UnitDemo, UnitDemo02
    # from class28.test_demo import Demo
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    1.创建测试套件

    suite = unittest.TestSuite()
    
    • 1

    2.在套件中添加测试用例

    # 基于用例的名称来添加单个测试用例
    # suite.addTest(UnitDemo('test_02'))
    # suite.addTest(Demo('test_03'))
    
    • 1
    • 2
    • 3

    3.批量添加用例

    # 基于用例名称进行添加,以list形式
    # cases = [Demo('test_01'),UnitDemo('test_03')]
    # suite.addTests(cases)
    
    • 1
    • 2
    • 3

    4.通过添加一个完整的class进入套件

    # suite.addTests(unittest.TestLoader().loadTestsFromTestCase(Demo))
    
    • 1

    5.基于文件名称来进行添加

    # 添加的是当前路径下的py文件,否则会报错
    # cases = [unittest.TestLoader().loadTestsFromNames('unit_demo.UnitDemo')]
    # suite.addTests(cases)
    # names = ['unit_demo.UnitDemo','unit_demo.UnitDemo02'] # py文件的名称+class的名称
    # suite.addTests(unittest.TestLoader().loadTestsFromNames(names))
    
    • 1
    • 2
    • 3
    • 4
    • 5

    6.批量添加测试用例

    # 在持续集成中比较好用,批量化管理测试用例也很好用
    # 定义用例的获取路径
    path = '../class28'
    discover = unittest.defaultTestLoader.discover(start_dir=path,pattern='test*.py')
    
    • 1
    • 2
    • 3
    • 4

    7.通过运行器来运行套件

    # run = unittest.TextTestRunner(verbosity=2) #verbosity 参数表示显示的控制台信息详细度,分为0、1、2三级。
    # run.run(suite)
    # run.run(discover)
    
    • 1
    • 2
    • 3

    3.HTMLTestRunner生成测试报告

    1.配置测试报告的相关内容

    report_dir = './report/' #保存路径
    report_title = '虚竹的测试报告' # 报告名称
    report_description = '这是测试报告中的描述部分' # 测试报告描述
    report_file = report_dir + 'report.html' # 测试报告的文件:建议测试报告的名称以时间戳的形式进行命名
    
    # 测试执行者
    report_tester = '司小幽'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.保存报告的路径是否存在,不存在则创建一个

    if not os.path.exists(report_dir):
        os.mkdir(report_dir)
    
    • 1
    • 2

    3.生成测试报告,其实就是写入一个文件内容

    with open(report_file,'wb') as file:
        runner = HTMLTestRunner(stream = file,title = report_title,description=report_description,verbosity=2,tester = report_tester)
        runner.run(discover)
    
    • 1
    • 2
    • 3
  • 相关阅读:
    多个pdf怎么合并在一起?跟着我的步骤一起合并
    浪潮信息KeyarchOS迁移体验
    GitHub下载量过百万,阿里P8秘密分享的「亿级并发系统设计」真香
    AM5-DB低压备自投装置在河北冠益荣信科技公司洞庭变电站工程中的应用
    Java架构师分析和设计技术架构
    docker及docker-compose的离线安装与镜像及容器的导入、导出操作总结
    山东省国高教育研究有限公司与菏泽学院共同举办“AI赋能核心期刊论文选题与高质量写作”学术讲座。
    蓝桥杯1040
    Java学习笔记(五)——数组、排序和查找
    招投标系统简介 企业电子招投标采购系统源码之电子招投标系统 —降低企业采购成本
  • 原文地址:https://blog.csdn.net/BlackEnn/article/details/126005300
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号