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自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...
随机推荐
- 加载的DAL数据访问层的类型
using System; using System.Collections; using System.Reflection; using CSFrameworkV4_5.Core; using C ...
- python使用消息队列RabbitMq(入门)
windows平台开发和使用 安装 安装Erlang:https://pan.baidu.com/s/1QcZDaI205uaue7mMWh5cSA 安装RabbitMQ:https://pan.ba ...
- FlowProtal jQuery 对比时间大小
function ValidatoTime(source, args){ var StartTime = agent.calcExpress(null, 'SCTDB:AS_MeetingRoom.S ...
- OKVIS框架之前端
1. 数据流入 在okvis_app_sychronous.cpp内,把IMU和图像数据加入到各自的队列里.由ThreadedKFVio负责队列的各种操作.作者对队列加了特殊功能,保证队列是线程安全的 ...
- vuex存取数据展示在table里-----第一次实现
之前也看了vuex的文档,对它的原理只是了解,看代码(仅自己复习.做笔记) 流程是在组件的created中提交dispatch,然后通过action调用一个封装好的axios然后再触发mutation ...
- Linux系统分辨率设置
linux 设置分辨率 如果你需要在linux上设置显示屏的分辨率,分两种情况:分辨率模式存在与分辨率模式不存在,具体如下. 1,分辨率模式已存在 1)如何查询是否存在: 图形界面:在System S ...
- Java中File的处理
不知道“文件”和“文件路径”是否存在的处理情况 1.如果是文件,先获取文件父路径,没有就生成父路径,然后再生成文件. public class TestMain { public static voi ...
- 转 Tomcat访问日志详细配置
配置http访问日志.Tomcat自带的能够记录的http访问日志已经很详细了取消下面这段的注释: <Valve className="org.apache.catalina.valv ...
- 调用opencv的接口实现人脸检测(简单)
import cv2 import matplotlib.pyplot as plt %matplotlib inline # 提取预训练的人脸检测模型,提前下载好的模型 face_cascade = ...
- Django 与 Flask框架的比较
Django Django恐怕是最有代表性的Python框架了.它是一个遵循MMVC架构模式的开源框架.它的名字来自Django Reinhardt,一个法国作曲家和吉他演奏家,很多人认为他是历史上最 ...