零基础学Python之Unitest模块

news2024/9/23 5:22:58

1.unittest简介及入门案例

(1)什么是Unitest

Unittest是Python自带的单元测试框架,不仅适用于单元测试,还可用于Web、Appium、接口自动化测试用例的开发与执行。该测试框架可组织执行测试用例,并且提供丰富的断言方法,判断测试用例是否通过,并最终生成测试结果。

官网:https://docs.python.org/zh-cn/3.8/library/unittest.html

Unittest框架最核心的四个概念:

  • test case: 测试用例
  • test suite: 测试套件
  • test runner: 用来执行测试用例和测试套件,并返回测试用例的执行结果
  • TestLoader: 批量执行测试用例

(2)开发第一个Unitest程序

单元测试开发步骤:

  • 用import语句引入unittest模块
  • 测试的类都继承于TestCase类
  • setUp() 测试前的初始化工作
  • tearDown()测试后的清除工作
# -*- coding: UTF-8 -*-
import unittest

class UserTestCase(unittest.TestCase):
    def setUp(self):
        print("setUp 开始")
    def tearDown(self):
        print("tearDown 结束")
    def testCase01(self):
        print("testCase01")
    def testCase02(self):
        print("testCase02")

if __name__ == '__main__':
    unittest.main()

在这里插入图片描述

2.TestCase之断言操作

TestCase类提供了一些断言方法用于检查并报告失败。 下表列出了最常用的方法:

方法检查对象
assertEqual(a, b)a == b
assertNotEqual(a, b)a != b
assertTrue(x)bool(x) is True
assertFalse(x)bool(x) is False
assertIs(a, b)a is b
assertIsNot(a, b)a is not b
assertIsNone(x)x is None
assertIsNotNone(x)x is not None
assertIn(a, b)a in b
assertIsInstance(a, b)isinstance(a, b)
assertNotIsInstance(a, b)not isinstance(a, b)

(1)测试断言

上面代码增加断言配置运行

def testCase01(self):
     print("testCase01")
     self.assertEqual(1,2)

在这里插入图片描述

用例执行结果输出: verbosity 默认是1,为0的话最简洁,不输出每个用例执行结果,2 输出用例的详细执行结果。

(2)跳过某个用例的执行

# 在用例的方法上加上@unittest.skip注解
@unittest.skip("跳过当前用例执行")
def testCase02(self):
     print("testCase02")

在这里插入图片描述

3.用例执行顺序TestSuite

(1)什么是TestSuite

  • TestSuite用来确定测试用例的顺序,哪个先执行哪个后执行
  • 如果一个class中有四个test开头的方法,则加载到suite中时则有四个测试用例,由TestLoder加载TestCase到TestSuite
  • verbosity参数可以控制执行结果的输出,0 是简单报告、1 是一般报告、2 是详细报告 默认1 会在每个成功的用例前面有个“.” 每个失败的用例前面有个 “F”
# -*- coding: UTF-8 -*-

import unittest

class UserTestCase(unittest.TestCase):

    def setUp(self):

        print("setUp 开始")

    def tearDown(self):
        print("tearDown 结束")
    def testCase01(self):
        print("testCase01")

    def testCase02(self):
        print("testCase02")

    def testCase03(self):
        print("testCase03")

if __name__ == '__main__':
    # 构造一个测试套件
    suite = unittest.TestSuite()
    # 单个添加:类名('方法名')的集合 ,addTest() 函数
    suite.addTest(UserTestCase("testCase03"))
    suite.addTest(UserTestCase("testCase02"))
    suite.addTest(UserTestCase("testCase01"))
    
    # 批量添加:addTests() 函数,传入一个数组
    # suite.addTests([UserTestCase("testCase03"),UserTestCase("testCase02"),UserTestCase("testCase01")])

    # 执行测试 TextTestRunner() 文本测试用例运行器,通过该类下面的run()方法来运行suite所组装的测试用例,入参为suite测试套件。
    runner = unittest.TextTestRunner(verbosity=2)
    # run()方法是运行测试套件的测试用例,入参为suite测试套件
    runner.run(suite)

在这里插入图片描述

4.批量用例加载TestLoader

TestLoader() 用例加载器,我们可以通过把用例都存放在这里,然后再通过Suite进行批量执行,但无法对case进行排序。

if __name__ == '__main__':
    # 构造一个测试套件
    suite = unittest.TestSuite()
    # 实例化loader
    loader = unittest.TestLoader()
    # 加载 UserTestCase 下的全部用例
    suite.addTests(loader.loadTestsFromTestCase(UserTestCase))
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(suite)

在这里插入图片描述

5.多个文件用例加载Discover

discover 批量加载文件夹用例

  • 参数:case_dir:待执行用例的目录。
  • 参数:pattern:这个是匹配脚本名称的规则,test*.py意思是匹配test开头的所有脚本。
  • 参数:top_level_dir:这个是顶层目录的名称,一般默认等于None就行了
if __name__ == '__main__':
    # 获取用例路径
    case_path = os.path.join(os.getcwd(),"case")
    print(case_path)
    discover = unittest.defaultTestLoader.discover(case_path, pattern="helloword.py", top_level_dir=None)
    runner = unittest.TextTestRunner()
    runner.run(discover)

在这里插入图片描述

OK,结束,记得三连哦!!!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1440709.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用CLZero对HTTP1.1的请求走私攻击向量进行模糊测试

关于CLZero CLZero是一款功能强大的模糊测试工具,该工具可以帮助广大研究人员针对HTTP/1.1 CL.0的请求走私攻击向量进行模糊测试。 工具结构 clzero.py - 工具主脚本; default.py - 包含了大多数标准攻击测试方法和字符; exhaustive.py - 包…

Git介绍和常用命令说明

目录 一、Git概述 1.1 Git是什么 1.2 Git有什么用 1.3 Git仓库介绍 二、Git下载与安装 三、Git代码托管服务(远程仓库) 四、Git常用命令 4.1 设置用户信息 4.2 获取Git仓库 4.2.1 本地初始化Git仓库 4.2.2 从远程仓库克隆 4.3 本地仓库操作 …

navigator.mediaDevices.getUserMedia获取本地音频/麦克权限并提示用户

navigator.mediaDevices.getUserMedia获取本地音频/麦克权限并提示用户 效果获取权限NotFoundErrorNotAllowedError 代码 效果 获取权限 NotFoundError NotAllowedError 代码 // 调用 captureLocalMedia()// 方法 function captureLocalMedia() {console.warn(Requesting lo…

Mac 下JDK环境变量配置 及 JDK多版本切换

一、推荐官网下载: 二、环境变量配置 1、查看JDK地址,在终端输入以下命令: /usr/libexec/java_home -V 我的路径: /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home /Library/Java/JavaVirtualMachines/zulu-11.j…

MGIE官网体验入口 苹果多模态大语言模型AI图像编辑工具在线使用地址

MGIE是一项由苹果开源的技术,利用多模态大型语言模型(MLLMs)生成图像编辑指令,通过端到端训练,捕捉视觉想象力并执行图像处理操作,使图像编辑更加智能、直观。 MGIE官网体验入口https://github.com/apple/M…

Python进行AI声音克隆的端到端指南

人工智能语音克隆是一种捕捉声音的独特特征,然后准确性复制它的技术。这种技术不仅可以让我们复制现有的声音,还可以创造全新的声音。它是一种彻底改变内容创作的工具,从个性化歌曲到自定义画外音,开辟了一个超越语言和文化障碍的…

异常统一处理:MissingServletRequestParameterException(遗漏Servlet请求参数异常)

一、引言 本篇内容是“异常统一处理”系列文章的重要组成部分,主要聚焦于对 MissingServletRequestParameterException 的原理解析与异常处理机制,并给出测试案例。 关于 全局异常统一处理 的原理和完整实现逻辑,请参考文章: 《S…

Linux基础I/O(中)——重定向

重定向 根据上一篇的文章我们知道,文件描述符是什么。 0->stdin; 1->stdout; 2->stderr; 如果我们新打开一个文件的话,该文件描述符为3,如下图: ::“ 如果我先close(1),再打开一个文件,根据之前的…

for循环的多重跳出

for的多重跳出 1.前言2.标签使用3.使用异常的方式 本文在jdk17中测试通过 1.前言 前段时间面试时,面试官问我多重for循环如何跳出,我懵了,今天特别的研究了一下 本文主要说的不是continue与break,而是少用的另类操作 1.continue:…

三维可视化助力船舶制造:大数据处理、实时协作更高效!

随着科技的不断发展,船舶制造行业也在不断寻求创新和提高效率的途径。其中,HOOPS技术作为一种先进的三维可视化和工程协作技术,正逐渐成为船舶制造领域的关键工具。 本文将深入探讨HOOPS技术在船舶制造行业的应用,探讨其带来的优…

(2)llvm ir某些细节

(1)为什么需要llvm ir 也就是说,一个需求是解耦,一个需求是进行大家都需要的平台无关优化。 (2)llvm ir形式 (3)llvm结构 结构一个文件是module,里面可以有函数&#x…

基于YOLOv7算法和KITTI数据集的高精度实时车辆目标检测系统(PyTorch+Pyside6+YOLOv7)

摘要:基于YOLOv7算法和KITTI数据集的高精度实时车辆目标检测系统可用于日常生活中检测与定位行人(Pedestrian)、面包车(Van)、坐着的人(Person Sitting)、汽车(Car)、卡车…

PHPExcel导出excel

PHPExcel下载地址 https://gitee.com/mirrors/phpexcelhttps://github.com/PHPOffice/PHPExcel 下载后目录结构 需要的文件如下图所示 将上面的PHPExcel文件夹和PHPExcel.php复制到你需要的地方 这是一个简单的示例代码 <?php$dir dirname(__FILE__); //require_once …

低成本高利润:小区开店的最佳选择

作为一位在鲜奶吧行业摸爬滚打5年的创业者&#xff0c;我深知在小区内开店&#xff0c;选择什么项目能够实现低成本高利润。今天&#xff0c;我就为大家揭秘这个稳赚不亏的创业秘籍——鲜奶吧。 一、鲜奶吧&#xff1a;小区内的健康饮品专家 鲜奶吧以其新鲜、健康、营养的特点…

Java图形化界面编程——Container容器 笔记

2.3 Container容器 2.3.1 Container继承体系 Winow是可以独立存在的顶级窗口,默认使用BorderLayout管理其内部组件布局;Panel可以容纳其他组件&#xff0c;但不能独立存在&#xff0c;它必须内嵌其他容器中使用&#xff0c;默认使用FlowLayout管理其内部组件布局&#xff1b;S…

ZooKeeper安装及配置(Windows版)

步骤&#xff1a; 1.官网下载二进制版本ZooKeeper安装包。 2.解压到你要安装的目录下 3.配置 3.1进入目录 D:\Install\apache-zookeeper-3.9.1-bin 新增两个文件夹&#xff1a;data和log 3.2 进入目录D:\Install\apache-zookeeper-3.9.1-bin\conf 复制zoo_sample.cfg文件&a…

第二讲:数据结构 AcWing 826. 单链表

目录 数组模拟链表数组模拟单链表 单链表思路 && 代码 看图更好理解推荐一下y总的刷题网站 数组模拟链表 笔试的题目大部分 大部分涉及到链表都是十万级别的 用数组的方式创建链表速度很快&#xff0c;不会超时&#xff0c;而如果用new 一个结构体的话 大部分就是比较…

基于微信小程序的校园二手交易平台

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

在Linux系统中设置全局HTTP代理的步骤与技巧

在Linux系统中&#xff0c;设置全局HTTP代理可以方便我们统一管理和控制网络请求。这不仅可以帮助我们加速网络访问&#xff0c;还可以在某些情况下绕过网络限制或实现匿名上网。下面&#xff0c;我将为你详细介绍在Linux系统中设置全局HTTP代理的步骤与技巧。 步骤一&#xf…

SSM框架,Spring-ioc的学习(上)

知识点引入 关于框架 框架( Framework )是一个集成了基本结构、规范、设计模式、编程语言和程序库等基础组件的软件系统&#xff0c;它可以用来构建更高级别的应用程序。框架的设计和实现旨在解决特定领域中的常见问题&#xff0c;帮助开发人员更高效、更稳定地实现软件开发目…