27. Unittest单元测试框架的介绍与使用
unittest单元测试框架
先贴一下unittest官网地址。unittest文档开头介绍了四个重要的概念:test fixture,test case, test suite, test runner。
test fixture
test fixture表示执行一个或多个测试所需的准备。怎么去理解这句话呢?比如我们执行一条创建文章的测试用例,但是如果我们调用创建文章的接口,需要我们进行登录。那么我们可以把登录作为一个test fixture。
test case
测试用例,这个不必多说,没有测试用例就不能叫做接口测试了。
test suite
我们在做接口测试的时候,一般都是执行多条测试用例。这就有了test suite概念,简单来说,就是把想要执行的测试用例进行组装然后进行测试。
test runner
执行测试用例。
为了方便大家的理解,会用一个实例对上面四个概念进行解释。请看如下代码:
import unittest
class AddTest(unittest.TestCase):
def setUp(self):
print("在每个用例执行之前")
def tearDown(self):
print("在每个用例执行之后")
@classmethod
def setUpClass(cls):
print("在用例执行之前,只执行一次,优先于setUp")
@classmethod
def tearDownClass(cls):
print("所有用例运行之后只执行一次")
def add(self, a, b):
if type(a) == int and type(b) == int:
return a + b
else:
return "请输入数字"
def test_add1(self):
self.assertEqual(self.add(2, 3), 5, "验证加法")
def test_add2(self):
self.assertEqual(self.add(2, 4), 6, "验证加法")
if __name__ == '__main__':
# unittest.main()
# test suite(构造测试集)
suite = unittest.TestSuite()
suite.addTest(AddTest("test_add1"))
suite.addTest(AddTest("test_add2"))
# test runner (执行测试)
runner = unittest.TextTestRunner()
runner.run(suite)
上面代码输出如下内容:
在用例执行之前,只执行一次,优先于setUp
在每个用例执行之前
在每个用例执行之后
在每个用例执行之前
在每个用例执行之后
所有用例运行之后只执行一次
我们来根据代码拆解一下,看哪部分对应test fixture,test case, test suite, test runner。首先,在使用unittest单元测试框架之前,我们需要导包,我们先import unittest,然后创建一个AddTest类,这个类继承unittest.TestCase。然后我们创建一个add方法(注意:一般类中的函数我们称作为方法),然后创建了2条测试用例test_add1,test_add2,注意!测试用例必须以test开头!然后使用test fixture中setUp、tearDown、setUpClass 、tearDownClass。然后使用test suite把2条测试用例加进去,当然需要注意一点,用例执行是有顺序的(按照 ASCII 码的从小到大的顺序),比如test_add1和test_add2,前面都是一样的,但是最后1位1排在2前面,所以先执行1,最后使用test runner执行测试用例。到这里想必大家都已经明白。最后画一张思维导图,更方便大家的理解。

细心的人可以看到,测试用例中有一个assertEqual,这就是我们说比assert更好用的断言,那么这些断言有哪些呢?请看下面表格:
| Method | Checks that |
|---|---|
| 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 |
| assertNotIn(a, b) | a not in b |
| assertIsInstance(a, b) | isinstance(a, b) |
| assertNotIsInstance(a, b) | not isinstance(a, b) |
小结:本章内容只是简单介绍了一下unittest的使用方法以及相关概念,unittest框架使用起来很简单也很方便,建议大家多去官网学习,当然不管是UI自动化也好,还是接口自动化也好,如果使用Python实现,一般都不会绕过Unittest这个概念,希望大家可以熟练掌握。
欢迎关注微信公众号:软件测试汪。软件测试交流群:809111560
27. Unittest单元测试框架的介绍与使用的更多相关文章
- Python+selenium之简单介绍unittest单元测试框架
Python+selenium之简单介绍unittest单元测试框架 一.unittest简单介绍 unittest支持测试自动化,共享测试用例中的初始化和关闭退出代码,在unittest中最小单元是 ...
- Python+Selenium框架设计篇之-简单介绍unittest单元测试框架
前面文章已经简单介绍了一些关于自动化测试框架的介绍,知道了什么是自动化测试框架,主要有哪些特点,基本组成部分等.在继续介绍框架设计之前,我们先来学习一个工具,叫unittest. unit ...
- unittest单元测试框架
unittest单元测试框架 概述: 单元测试框架主要用来完成以下三件事: 提供用例组织与执行:当测试用例只有几条时,可以不必考虑用例的组织,但是当用例达到成百上千条时,大量的用例堆砌在一起,就产生了 ...
- Selenium(十七):unittest单元测试框架(三) 脚本分析、编写Web用例
1. 带unittest的脚本分析 也许你现在心里还有疑问,unittest框架与我们前面所编写的Web自动化测试之间有什么必然联系吗?当然有,既然unittest可以组织.运行测试用例,那么为什么不 ...
- Selenium(十六):unittest单元测试框架(二) 初识unittest(续)
1. 认识unittest(续) 关于unittest单元测试框架,还有一些问题值得进一步探讨.你可能在前一章的学习过程中产生了一些疑问,也许你会在本节中找到答案. 1.1 用例执行的顺序 用例的执行 ...
- Selenium(十五):unittest单元测试框架(一) 初识unittest
1. 认识unittest 什么是单元测试?单元测试负责对最小的软件设计单元(模块)进行验证,它使用软件设计文档中对模块的描述作为指南,对重要的程序分支进行测试以发现模块中的错误.在python语言下 ...
- unittest单元测试框架前言
一.在我们没有学习过python语言的时候领导让我们做接口测试 我们都使用工具来做测试,一般常用的如jemeter,postman这些个工具,我来推荐使用postman 这个工具来进行接口测试,有的小 ...
- unittest单元测试框架总结
unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...
- unittest单元测试框架详解
unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...
随机推荐
- Ionic4 入门
1.搭建环境 1.电脑安装node.js,安装后电脑会自动安装npm 2.通过cmd命令,安装cnpm npm install -g cnpm -registry=https://regist ...
- HBaseRegionServer宕机数据恢复
本文由 网易云 发布 作者:范欣欣 本篇文章仅限内部分享,如需转载,请联系网易获取授权. 众所周知,HBase默认适用于写多读少的应用,正是依赖于它相当出色的写入性能:一个100台RS的集群可以轻松地 ...
- mongo数据库基本查询语句
D:\MongoDB\Server\3.4\bin>mongo MongoDB shell version v3.-g83c3022fe4 connecting to: mongodb://12 ...
- elasticsearch api约定
elasticsearch REST API 使用JSON通过HTTP协议传输. 本约定贯穿整个REST API,除非有特别的说明. 一.多重索引 大多数APIs引用到一个index参数来在多个索引中 ...
- JAVA金额格式字符串转数值
项目中有时会遇到对金额格式的数值如“1,234.34567”进行计算,直接使用Double.parseDouble(“1,234.34567”)会抛出NumberFormatException异常, ...
- linux随笔-03
必须掌握的Linux命令 系统状态检测命令 1.ifconfig命令 ifconfig命令用于获取网卡配置与网络状态等信息,格式为“ifconfig [网络设备] [参数]”. 使用ifconfig命 ...
- Pandas_key_point
10分钟快速入门pandas: http://pandas.pydata.org/pandas-docs/stable/10min.html ----------------------------- ...
- Codeforces 1185G2 Playlist for Polycarp (hard version) 背包,暴力
题意及思路:https://www.cnblogs.com/Als123/p/11061147.html 代码: #include <bits/stdc++.h> #define LL l ...
- mysql协议解析
目录 目录 1 交互过程 1.1 握手认证阶段 1.2 命令执行阶段 2 基本类型 2.1 整型值 2.2 字符串(以NULL结尾)(Null-Terminated String) 2.3 二进制数据 ...
- vscode 常用的插件
这些是本人在使用vscode中用的比较爽的插件,个人爱好习惯不同,请按需拿取.先声明本人是一个前端,所用的,插件都是和前端匹配的,后台的同学可以不用浪费时间了 基础插件 chinese 英文是所有读书 ...