零基础学Python之Unitest模块

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,结束,记得三连哦!!!
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Git合并多个commit

git rebase -i commitId 假设想要合并最后3个commit, git log显示 commit id 1 commit id 2 commit id 3 commit id 4 则执行git rebase -i commitId4. 注意是4,不是3. 然后,pick最老的commit (commit id 3). https://blog.csdn.net/qiao…

在 VMware 虚拟机上安装 CentOS系统 完整(全图文)教程

一、前期准备: 1.安装VMware 虚拟机软件(不在讲解,可自行去下载安装)。官网:https://customerconnect.vmware.com/cn/downloads/details?downloadGroupWKST-PLAYER-1750&productId1377&rPId111471 2.下载iso…

女博士眼里的“科学的尽头是玄学”

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 过年啦,拜年啦,吉祥话说起来吖!祝大家龙腾四海、龙马精神、龙飞凤舞、龙年大吉!不知道…

一条 SQL 更新语句是如何执行的?

之前你可能经常听 DBA 同事说,MySQL 可以恢复到半个月内任意一秒的状态,惊叹的同时,你是不是心中也会不免会好奇,这是怎样做到的呢? 我们先从一条更新语句讲起,首先创建一个表,这个表有一个主键…

内网穿透工具

1. nps-npc 1.1 简介 nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……)&#xff0c…

Git、github与gitee码云

1.git核心是两个仓库:本地仓库和远程仓库 主要用于团队合作和代码版本控制(个人现有版本代码出错可回溯上个提交版本的代码) 远程仓库国际主流githut,但外网速度问题,国内可使用码云gitee github:https:…

奇瑞汽车,好好卖车,别趟个人是非的浑水

文 | AUTO芯球 作者 | 雷歌 这下,奇瑞法务部忙都忙不过来了。 一个字,就是,告!告!告! 刚投诉完这家,又去告那家。 可是骂奇瑞的实在太多了,告不完,根本告不完。 有骂…

力扣刷题之旅:进阶篇(四)—— 滑动窗口问题

力扣(LeetCode)是一个在线编程平台,主要用于帮助程序员提升算法和数据结构方面的能力。以下是一些力扣上的入门题目,以及它们的解题代码。 --点击进入刷题地址 引言: 在编程的世界里,滑动窗口问题是一种…

【漏洞复现】狮子鱼CMS某SQL注入漏洞01

Nx01 产品简介 狮子鱼CMS(Content Management System)是一种网站管理系统,它旨在帮助用户更轻松地创建和管理网站。该系统拥有用户友好的界面和丰富的功能,包括页面管理、博客、新闻、产品展示等。通过简单直观的管理界面&#xf…

自制微信红包封面

一.前言 这不是过年了吗,各大平台都发放了免费的微信红包封面,但我老是抢不到QAQ。于是乎,我便想“授人以鱼不如授人以渔”,不如自己造个封面。 二.主要步骤 1.条件 1>创建视频号 2>过去一年发表过视频号 3>过去一…

比较6*6范围内7个点182个结构的顺序

( A, B )---6*30*2---( 1, 0 )( 0, 1 ) 让网络的输入有6个节点,训练集AB各由6张二值化的图片组成,让A中有7个点,让B全是0,收敛误差7e-4,收敛199次,统计迭代次数平均值并排序。 得到顺序为 用6个点的结构标…

re:从0开始的CSS学习之路 1. CSS语法规则

0. 写在前面 现在大模型卷的飞起,感觉做页面的活可能以后就不需要人来做了,不知道现在还有没有学前端的必要。。。 1. HTML和CSS结合的三种方式 在HTML中,我们强调HTML并不关心显示样式,样式是CSS的工作,现在就轮到C…

整合 Axios

大家好我是苏麟 , 今天聊一下Axios . Axios Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpReques…

C++ 中的模型预测控制(01/2)

目录 一、说明二、MPC原理说明三、分解算法的来源并显示关键特征,四、C 实现说明五、平衡 Q 和 R六、资源下载地址 一、说明 以下文章介绍了应用模型预测控制器的简单控制系统方法。本文讨论了这种控制的基本机制,该机制适用于各种工程领域。 MPC 涉及对…

MPLS VPN功能组件(3)

私网标签分配 通过MPBGP为VPNv4路由分配内层标签 PE从CE接收到IPv4路由后,对该路由加上相应VRF的RD(RD手动配置),使其成为一条VPNV4路由,然后在路由通告中更改下一跳属性为自己,通常是自己的Loopback地址…

[Java][算法 双指针]Day 02---LeetCode 热题 100---04~07

LeetCode 热题 100---04~07 第一题:移动零 思路 找到每一个为0的元素 然后移到数组的最后 但是需要注意的是 要在给定的数组原地进行修改 并且其他非零元素的相对顺序不能改变 我们采用双指针法 定义两个指针i和j i和j一开始分别都在0索引位置 然后判断j所…

PWM输入输出

PWM(Pulse Width Modulation)即脉冲宽度调制,在具有惯性的系统中,可以通过对一系列脉冲的宽度进行制,来等效地获得所需要的模拟参量,常应用于电机控速、开关电源等领域。 PWM参数 PWM 中有三个重要参数&…

关于CSDN的原力分增长规则,一点个人经验

本文章编写于 2024年2月9日 从2022年开始到现在,官方的原力分增减规则已经改过好几版了,有一些规则描述比较模糊,这里总结了一些个人经验。 原力值增长点: 1.每日发布文章一篇10分,两篇15分,上限15分&am…

Qt QML学习(一):Qt Quick 与 QML 简介

参考引用 QML和Qt Quick快速入门全面认识 Qt Widgets、QML、Qt Quick 1. Qt Widgets、QML、Qt Quick 区别 1.1 QML 和 Qt Quick 是什么关系? 1.1.1 从概念上区分 QML 是一种用户界面规范和标记语言,它允许开发人员创建高性能、流畅的动画和具有视觉吸引…

Red Panda Dev C++ Maker 使用说明

https://download.csdn.net/download/HappyStarLap/88804678https://download.csdn.net/download/HappyStarLap/88804678 下载https://download.csdn.net/download/HappyStarLap/88804678: ​ 这个,就是我们将运行的文件。 ​ 里面加了许多我…