1、unittest基本简介

unittest是Python自带的一个单元测试框架,unittest又被称为PyUnit,是由Java的JUnit衍生而来,基本结构是类似的。对于单元测试,需要设置预先条件,对比预期结果和实际结果。

由于unittest是Python自带的标准模块,所以不需要单独再去安装。引入包import unittest即可使用。

2、unittest基本概念

(1)unittest核心的四个概念

  1. test fixture

    fixture表示test case运行前需要做的准备工作以及结束后的清理工作。比如,创建临时/代理数据库、目录或启动一个浏览器进程。
  2. test case

    test case是单元测试中的最小个体,通常是使用assert方法(断言)检查动作和输入的响应。

    unittest提供了一个基础类TestCase,一般是基于TestCase类进行扩充,来创建test case测试用例。
  3. test suite

    test suite(套件)是test case的合集,通常用test suitetest case按需求汇总后,统一执行。(批量执行用例)
  4. test runner

    test runner是一个执行器,用来执行测试用例或者套件。并将测试结果保存到TextTestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息。并提供图形界面、文本界面或者返回一个值展示测试结果。

(2)如何创建一个测试类

所有测试用例类都要继承TestCase基本类。

# 1. 导入unittest
import unittest # 2. 定义一个测试类
class Test_demo(unittest.TestCase):

(3)test fixture常用的四个方法

1)基于函数级别的方法

  • setup():每个测试方法运行前执行一次。测试类中有多少测试用例执行多少次。
  • teardown():每个测试方法运行完后执行一次。测试类中有多少测试用例执行多少次。

2)基于类级别的方法

  • setUpClass():在测试类执行前执行一次,需要@classmethod装饰器修饰。
  • tearDownClass():在测试类执行完后执行一次,需要@classmethod装饰器修饰。

(4)unittest编写测试方法(用例)规范

  1. py文件需要以test开头。(规范,不必须)
  2. 测试类名称需要Test开头。(规范,不必须)
  3. 每个测试方法名称均以test开头,否则是不被unittest识别的。(规范,必须)
  4. unittest框架中,测试用例就是TestCase的实例,所以每个测试类必须继承unittestTestCase类来编写用例。
  5. 测试方法必须带self参数,用来单独运行或则组合运行用例。
  6. 测试用例的执行顺序是按照测试方法名的ASCII编码字符集的顺序进行排序的。

(5)执行测试脚本

unittest.main():将一个单元测试模块变为可直接运行的测试脚本,main()方法是使用TestLoader类来搜索所有包含在该模块中以test命名开头的测试方法,并自动执行他们。

执行方法的默认顺序是:根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9,A-Z,a-z

3、unittest入门示例

"""
1.学习目标
掌握unittest框架下测试用例编写方法
2.操作步骤
2.1 导入unittest
2.2 创建测试类
测试类名称需要Test开头
继承unittest中的TestCase基本类
class Test_demo(unittest.TestCase):
2.3 编写test fixture
setUp()--前置函数
tearDown()--后置函数
setUpClass()--+@classmethod
tearDownClass()+@classmethod
2.4 编写test case
测试方法名称均以test开头
测试用例执行顺序:按照测试用例名称ASCII字符集编码排序。
所以我们在执行测试类中的测试方法的时候,要注意测试方法的执行顺序。
3.需求
编写简单的测试类
"""
# 1 导入unittest
import unittest # 2 创建测试类
class Test_demo(unittest.TestCase):
# 3 编写test fixture
# setUp我们也称之为前置函数
def setUp(self) -> None:
print("setUp在每个测试用例执行前先执行。") # setUp我们也称之为后置函数
def tearDown(self) -> None:
print("tearDown在每个测试用例执行后执行。") @classmethod
# cls等同于self,用于函数和类方便区分。
def setUpClass(cls) -> None:
print("setUpClass在测试类执行前先执行。") @classmethod
def tearDownClass(cls) -> None:
print("tearDownClass在测试类执行后执行。") # 4 编写test case
# 每个测试方法均以test开头,否则是不被unittest识别的。
def test_case_03(self):
"""测试用例3,这里是测试用例的备注"""
# 测试方法中,将多行注释写在第一行,就是该方法的备注。
print("执行测试用例3") def test_case_02(self):
"""测试用例2"""
print("执行测试用例2") def test_case_01(self):
"""测试用例1"""
print("执行测试用例1") if __name__ == '__main__':
# 执行当前测试类中,以test开头的所有测试用例
unittest.main() """
输出结果:
setUpClass在测试类执行前先执行。
setUp在每个测试用例执行前先执行。
执行测试用例1
tearDown在每个测试用例执行后执行。
setUp在每个测试用例执行前先执行。
执行测试用例2
tearDown在每个测试用例执行后执行。
setUp在每个测试用例执行前先执行。
执行测试用例3
tearDown在每个测试用例执行后执行。
tearDownClass在测试类执行后执行。
"""

提示:test fixture的四个方法,用到哪个写哪个就好,不用全部都写。

结果说明

测试执行完成后,会打印如下信息

# 运行了3个测试用例,执行的时间
Ran 3 tests in 0.008s # 执行结果
OK

执行结果有如下三种:

  • OK:表示测试用例全部通过。
  • F:表示测试用例没通过,代码没有问题。
  • E:表示代码有问题。

『心善渊』Selenium3.0基础 — 25、unittest单元测试框架的更多相关文章

  1. 『心善渊』Selenium3.0基础 — 24、Selenium的expected_conditions模块详细介绍

    目录 1.EC模块介绍 2.EC模块常用类 3.EC模块的使用 4.EC模块综合使用 (1)title_is(title)示例 (2)presence_of_element_located(locat ...

  2. 『心善渊』Selenium3.0基础 — 11、Selenium对元素常用操作

    目录 1.Selenium对元素常用操作 2.Selenium对元素的其他操作 1.Selenium对元素常用操作 操作 说明 click() 单击元素 send_keys() 模拟输入 clear( ...

  3. 『心善渊』Selenium3.0基础 — 12、Selenium操作鼠标和键盘事件

    目录 (一)对鼠标的操作 1.鼠标事件介绍 2.ActionChains 类鼠标操作的常用方法 3.perform()方法 4.鼠标事件操作步骤 5.示例 (1)右键单击.左键双击 (2)鼠标拖拽动作 ...

  4. 『心善渊』Selenium3.0基础 — 29、使用HTMLTestRunner生成unittest的HTML报告

    目录 1.HTMLTestRunner介绍 2.HTMLTestRunner的使用 3.测试报告示例 4.封装成模块 1.HTMLTestRunner介绍 HTMLTestRunner是一个基于uni ...

  5. 『心善渊』Selenium3.0基础 — 1、Selenium自动化测试框架介绍

    目录 1.Selenium介绍 2.Selenium的特点 3.Selenium版本说明 4.拓展:WebDriver与Selenium RC的区别 5.Webdriver工作原理 1.Seleniu ...

  6. 『心善渊』Selenium3.0基础 — 2、Selenium测试框架环境搭建(Windows)

    目录 1.浏览器安装 2.浏览器驱动下载 (1)ChromeDriver for Chrome (2)Geckodriver for Firefox (3)IEDriverServer for IE ...

  7. 『心善渊』Selenium3.0基础 — 3、使用Selenium操作浏览器对象的基础API

    目录 1.导入Selenium库 2.创建浏览器对象 3.浏览器窗口大小设置 4.浏览器位置设置 5.请求访问网址 6.浏览器页面前进.后退和刷新 7.关闭浏览器 相比于高大上的各种Selenium进 ...

  8. 『心善渊』Selenium3.0基础 — 4、Selenium基础元素定位详解

    目录 1.什么是元素定位 2.Selenium元素定位常用API (1)By_id 定位 (2)by_name 定位 (3)by_class_name 定位 (4)by_tag_name 定位 (5) ...

  9. 『心善渊』Selenium3.0基础 — 19、使用Selenium操作文件的上传和下载

    目录 1.Selenium实现文件上传 (1)页面中的文件上传说明 (2)文件上传示例 (3)总结 2.Selenium实现文件下载 (1)Firefox浏览器文件下载 1)操作步骤: 2)文件下载示 ...

随机推荐

  1. Python数模笔记-PuLP库(2)线性规划进阶

    1.基于字典的创建规划问题 上篇中介绍了使用 LpVariable 对逐一定义每个决策变量,设定名称.类型和上下界,类似地对约束条件也需要逐一设置模型参数.在大规模的规划问题中,这样逐个定义变量和设置 ...

  2. 为Go项目编写Makefile

    为Go项目编写Makefile 借助Makefile我们在编译过程中不再需要每次手动输入编译的命令和编译的参数,可以极大简化项目编译过程. make介绍 make是一个构建自动化工具,会在当前目录下寻 ...

  3. Raft: 一点阅读笔记

    前言 如果想要对Raft算法的了解更深入一点的话,仅仅做6.824的Lab和读<In Search of an Understandable Consensus Algorithm>这篇论 ...

  4. 重新整理 .net core 实践篇—————3种配置验证[十四]

    前言 简单整理一些配置的验证. 正文 配置的验证大概分为3类: 直接注册验证函数 实现IValidteOptions 使用Microsoft.Extensions.Options.DataAnnota ...

  5. AlexeyAB DarkNet YOLOv3框架解析与应用实践(三)

    AlexeyAB DarkNet YOLOv3框架解析与应用实践(三) ImageNet分类 您可以使用Darknet为1000级ImageNet挑战赛分类图像.如果你还没有安装Darknet,你应该 ...

  6. TensorRT 加速性能分析

    TensorRT 加速性能分析 Out-of-the-box GPU Performance 模型推理性能是什么意思?在为用户评估潜在的候选项时,不测量数据库查询和预筛选(例如决策树或手动逻辑)的贡献 ...

  7. GPU上创建目标检测Pipeline管道

    GPU上创建目标检测Pipeline管道 Creating an Object Detection Pipeline for GPUs 今年3月早些时候,展示了retinanet示例,这是一个开源示例 ...

  8. JVM系列(五):gc实现概要01

    java的一大核心特性,即是自动内存回收.这让一些人从繁琐的内存管理中解脱出来,但对大部分人来说,貌似这太理所当然了.因为现在市场上的语言,几乎都已经没有了还需要自己去管理内存这事.大家似乎都以为,语 ...

  9. 一、部署监控服务器--安装LNMP环境

    1.要求: 本案例要求部署-台Zabbix监控服务器, -台被监控主机,为进一步执行具体的监控任务做准备:1.安装LNMP环境2.源码安装Zabbix3.安装监控端主机,修改基本配置4.初始化Zabb ...

  10. 搭建支持SSL加密传输的vftpd

    让vsftpd支持SSL 必须让OPENSSL≥0.9.6版本还有就是本身vsftpd版本是否支持 查询vsftpd软件是否支持SSL        [root@localhost vsftpd]# ...