24-unittest简介

一、unittest简介

        unittest是Python中常用的单元测试框架,与Java中的Junit单元测试框架类似。

二、示例程序

1)导入unittest模块
import unittest
2)使用help()函数查看源码中的示例程序
help(unittest)
Simple usage:

    import unittest

    class IntegerArithmeticTestCase(unittest.TestCase):
        def testAdd(self):  # test method names begin with 'test'
            self.assertEqual((1 + 2), 3)
            self.assertEqual(0 + 1, 1)
        def testMultiply(self):
            self.assertEqual((0 * 10), 0)
            self.assertEqual((5 * 8), 40)

    if __name__ == '__main__':
        unittest.main()
3)示例程序解析
  • 第一行是导入unittest模块。
  • class这一行是定义了一个测试类,并继承unittest.TestCase类。
  • 接下来是定义了两个测试方法:testAdd和testMultiply。这里的注释很重要:测试方法的名称要以test开头。
  • 方法中是断言assert,断言其实就是拿实际结果和期望结果去对比。这里使用的是assertEqual断言方法,用来判断两个元素是否相等,方法中可以写多个断言
  • unittest.main()是运行主函数,运行后会看到如下测试结果:

三、简单用法

        上面的示例程序中是加法和乘法,我们可以添加测试方法来测试一下减法和除法。

import unittest

class Demo(unittest.TestCase):
    def testMinus(self):
        self.assertEqual((5 - 2), 3)

    def testDiv(self):
        self.assertEqual((5 / 2), 2)

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

        运行代码,第二个测试方法是失败的,失败原因:AssertionError: 2.5 != 2。

四、前置和后置

1)setUp:在写测试方法时,每次操作都需要先打开浏览器输入对应网址,这些操作就是执行测试方法的前置条件。

2)tearDown:测试方法执行完毕后,为了不影响下一个测试方法的执行,一般需要有数据还原的过程,这就是执行测试方法的后置条件。

3)前置条件和后置条件都是非必要,如果没有可以写pass。

4)很多人执行完测试方法后,不去做数据还原,导致下一个测试方法执行失败,这就是不喜欢擦屁股的坏习惯。

import unittest

class Demo(unittest.TestCase):
    def setUp(self):
        print('setUp')

    def tearDown(self):
        print('tearDown')

    def testMinus(self):
        print('testMinus')
        self.assertEqual((5 - 2), 3)

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

五、测试类的运行方式

import unittest

class Test(unittest.TestCase):
    def test01(self):
        print('test01 start')
        self.assertEqual(1, 1)
        print('test01 end')

    def test02(self):
        print('test02 start')
        self.assertEqual(1, 2)
        print('test02 end')

if __name__ == "__main__":
    print('测试开始~')
    unittest.main()

注:当测试方法中断言失败,后续的代码将不会执行。test02方法断言会失败,后续的打印语句将不会执行。

1)右键,选择 Run 'Unittests in .... ' 执行

        这种方式是以pycharm的unittest运行模式执行测试类,不会执行 if 条件下的代码,将 if 代码块去掉,也能执行所有的测试方法。

2)添加配置,以普通.py文件执行

3)添加配置,以pycharm的unittest运行模式执行

六、案例演示

        以打开百度搜索页为例,判断title是否完全等于期望结果。

from selenium import webdriver
import unittest
import time

class Demo(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get('https://www.baidu.com')
        time.sleep(3)

    def tearDown(self):
        time.sleep(1)
        self.driver.quit()

    def testTitle(self):
        title = self.driver.title
        print(title)
        self.assertEqual(title, '百度一下')

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

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

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

相关文章

数组和指针的联系(C语言)

数组和指针是两种不同的数据类型,数组是一种构造类型,用于存储一组相同类型的变量;而指针是一种特殊类型,专门用来存放数据的地址。数组名除了sizeof(数组名)和&数组名表示整个数组外,其他情况下都表示的是首元素的…

Visual Studio Code 开发esp8266流程2Arduino 配置 nodemcu

http://arduino.esp8266.com/stable/package_esp8266com_index.json http://arduino.esp8266.com/stable/package_esp8266com_index.json Arduino: Library Manager Arduino: Board

零拷贝技术

背景 磁盘可以说是计算机系统重最慢的硬件之一,读写速度相对内存10以上,所以针对优化磁盘的技术非常的多,比如:零拷贝、直接I/O、异步I/O等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统内核中的…

【Unity学习笔记】反射

文章目录 前言反射通过反射获取类型 Unity中的反射用反射在Unity中动态加载 前言 在我平时做项目的时候,由于我们做的项目都是很简单的,所以不怎么接触反射机制。最早了解反射机制是关于Invoke的时候,知道可以通过方法名来直接进行Invoke调用…

数字人动作解决方案,塑造逼真动作

在品牌形象塑造、市场推广及客户服务等领域,企业正面临着前所未有的挑战和机遇。为满足企业的需求,美摄科技凭借其在人工智能和计算机视觉领域的深厚积累,推出了面向企业的数字人动作解决方案,助力企业轻松打造逼真、灵活的虚拟形…

apple开发者账户证书删除与下载

1.打开并登陆: Sign In - Apple 选择证书 证书管理页面 证书详情 删除或者下载证书 下载证书 删除证书

【实战】kafka3.X kraft模式集群搭建

文章目录 前言kafka2.0与3.x对比准备工作JDK安装kafka安装服务器增加hosts 修改Kraft协议配置文件格式化存储目录 启动集群停止集群测试Kafka集群创建topic查看topic列表查看消息详情生产消息消费消息查看消费者组查看消费者组列表 前言 相信很多同学都用过Kafka2.0吧&#xf…

【MySQL03】【 Buffer Pool】

文章目录 一、前言二、缓冲池(Buffer Pool )1. 缓冲池的概念2. LRU List、Free List 和 Flush List2.1 Free 链表2.1.1 缓冲页的哈希处理 2.2 Flush 链表2.3 LRU 链表2.3.1 简单 LRU 链表2.3.2 优化后的 LRU 列表2.3.3 更进一步的优化 3. 脏页的刷新4. 多…

【最新鸿蒙应用开发】——Want信息载体

信息传递载体Want 1、概述 上一章节我们学习了UIAbility组件 【最新鸿蒙应用开发】——一篇搞懂什么是UIAbility-CSDN博客 ,其中组件间的交互传递信息的媒介就是Want,本章节我们来更加深入学习Want的相关知识。 Want是一种对象,用于在应用组…

性能狂飙:SpringBoot应用优化实战手册

在数字时代,速度就是生命,性能就是王道!《极速启航:SpringBoot性能优化的秘籍》带你深入SpringBoot的内核,探索如何打造一个飞速响应、高效稳定的应用。从基础的代码优化到高级的数据库连接池配置,再到前端…

恭喜!Z医生喜提世界顶级梅奥诊所访问学者邀请函

➡️【院校简介】 梅奥诊所(Mayo clinic),于1863年在美国明尼苏达州罗彻斯特创立,是全球规模最大的综合性非营利医生执业组织。它是以不断创新的医学教育和世界领先的医学研究为基础,建立起来的全美规模最大、设备最先…

YashanDB携手宏杉科技助力国产软件生态发展

近日,深圳计算科学研究院崖山数据库系统YashanDB与宏杉科技系列存储、系列服务器与数据库一体机等多款产品顺利完成兼容性互认证。经严格测试,双方产品完全兼容,稳定运行,共同提供高效、稳定、安全的国产软硬件一体化解决方案&…

Spring异步任务@Async的默认线程池执行器是如何初始化的

Spring异步任务Async的默认线程池执行器,是从哪里来?是如何初始化的? 结论先行 异步任务Async的默认线程池执行器是通过TaskExecutionAutoConfiguration#applicationTaskExecutor自动注入的。 异步任务的线程池执行器是如何初始化的&#…

查看Linux端口占用和开启端口命令

查看端口的使用的情况 lsof 命令 比如查看80端口的使用的情况 lsof -i tcp:80列出所有的端口 netstat -ntlp查看端口的状态 /etc/init.d/iptables status开启端口以开启端口80为例。 1 用命令开启端口 iptables -I INPUT -p tcp --dport 80 -j accpet --写入要开放的端口/…

【Vue】scoped解决样式冲突

默认情况下写在组件中的样式会 全局生效 → 因此很容易造成多个组件之间的样式冲突问题。 全局样式: 默认组件中的样式会作用到全局,任何一个组件中都会受到此样式的影响 局部样式: 可以给组件加上scoped 属性,可以让样式只作用于当前组件 一、代码示例 BaseOne…

龙迅#LT8711H支持TYPE-C/DP/EDP转HDMI功能应用,分辨率支持 1080p@60Hz,芯片内置固件!

1. 概述 LT8711H是一款高性能 Type-C/DP1.2/EDP 转 HD-DVI1.3 转换器,设计用于将 USB Type-C 源或 DP1.2 源连接到 HD-DVI1.3 接收器。 该LT8711H集成了符合 DP1.2 标准的接收器和符合 HD-DVI1.3 标准的发射器。此外,还包括两个用于 CC 通信的 CC 控制器…

Linux服务器扩容及磁盘分区(LVM和非LVM)

Linux扩容及磁盘分区(LVM和非LVM) 本文主要介绍了阿里云服务器centos的扩容方法:非LVM分区扩容方法(系统盘),以及磁盘改LVM并分区(数据盘)。主要是ext4文件系统及xfs磁盘scsi MBR分…

springcloud Feign调用拦截器(统一处理拷贝请求头实现透传信息、内部调用鉴权、打印feign调用)

springcloud Feign调用拦截器(统一处理拷贝请求头实现透传信息、内部调用鉴权、打印feign调用日志) 实现接口Feign.RequestInterceptor 实现接口 feign.RequestInterceptor 并注入到IOC容器即可生效 示范代码如下 拷贝请求头,将原请求信…

Redis:Redis的数据类型介绍

Redis 支持多种数据类型,每种数据类型都有其特定的用途和优势。以下是 Redis 中主要数据类型的介绍: 1. String(字符串) 介绍:最基本的 Redis 数据类型,通常用于缓存和存储经常需要读取的数据。 示例&am…

病理级Polymer酶标二抗IHC试剂盒上线!

免疫组织化学 Immunohistochemistry,lHC 是利用抗体与抗原特异性识别原理,对组织样本中的抗原进行定位/定性分析的实验技术。组织切片保留了样品的解剖学结构特征,从而可以高分辨率地显现蛋白在细胞,甚至细胞器中的定位。基于以上特性&…