python3+requests库框架设计05-unittest单元测试框架
unittest单元测试框架,主要由四部分组成:测试固件、测试用例、测试套件、测试执行器
测试固件(test fixture)
测试固件有两部分,执行测试前的准备部分setUp(),测试执行完后的清扫部分tearDown()
测试用例(test case)
测试用例中,包含测试固件,具体的测试代码的函数。测试固件可以不写,但是至少要有一个以test开头的函数。
unittest会自动识别test开头的函数是测试代码,一定要用小写的test开头!,下面看一个实例
在PyCharm中新建一个项目,在下面建一个包叫做lesson_unittest,然后在这个包下面新建一个.py文件叫做lesson_test_fixture1,然后写下面的代码
import unittest
from io import StringIO
class lesson(unittest.TestCase): def setUp(self):
self.f = StringIO()
print("创建StringIO") def tearDown(self):
s = self.f.getvalue()
print("读取StringIO:",s) def test_case1(self):
self.f.write("test case 1")
print("写入test case 1") def test_case2(self):
self.f.write("test case 2")
print("写入test case 2") if __name__ =='__main__':
unittest.main()
所有方法中一定要带self这个变量
unittest.main()在PyCharm可以不要,如果要在cmd中运行,一定要加上这行
setUp()执行成功之后,不管test中有没有异常发生,tearDown()都会执行
可以看出上面这个实例在执行每个test之前和之后都会去调用setUp()和tearDown()这个方法
很多时候我们只想执行一次测试固件:比如setUp()中放着连接数据库操作,多个test case放着不同数据库操作,然后tearDown()断开数据连接
使用setUpClass()和tearDownClass()可以的得到这样的效果,必须被装饰成classmethod
使用装饰器@unittest.skip可以跳过某个测试用例不执行
在刚才lesson_unittest包下,再新建一个.py文件叫做lesson_test_fixture2,然后写下面的代码
import unittest
from io import StringIO
class lesson(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.f = StringIO()
print("创建StringIO") @classmethod
def tearDownClass(cls):
s = cls.f.getvalue()
print("读取StringIO:",s) def test_case1(self):
self.f.write("test case 1")
print("写入test case 1") def test_case2(self):
self.f.write("test case 2")
print("写入test case 2") if __name__ =='__main__':
unittest.main()
测试执行器(test runner)
test runner用来执行加载的测试用例,可以是单个测试用例,也可以是测试套件
一种就是上方实例中的直接使用unittest.main()去执行,会搜索所有以test开头的测试用例,按照ASCII的顺序执行多个用例
另一种就是使用TextTestRunner()方法初始化一个测试执行器,然后使用run()去执行测试套件
runner = unittest.TextTestRunner() runner.run(suite)
这里suite是指测试套件的实例
测试套件(test suite)
很多测试用例的集合就是测试套件,通过测试套件来管理多个测试用例,会根据用例的加载顺序执行用例
使用TestSuite()初始化一个Suite实例
使用addTest()方法加载测试方法到测试套件中,addTest()如果要在传入别的包下的测试方法: 包名.类名(测试方法函数)
suite = unittest.TestSuite()
suite.addTest(lesson('test_case1'))#lesson是类名,test_case1是测试函数
suite.addTest(lesson('test_case2'))#如果是lesson是其他包下的,就是包名.lesson(‘test_case2’)
runner = unittest.TextTestRunner()
runner.run(suite)
将文章第一个示例中最后一行unittest.main()换成上方代码执行
使用makeSuite()可以把一个类下面所有测试方法都加载到测试套件中
目前项目路径应该是这样的,最上面是项目,然后包,最后是.py文件。一定要有__init__.py文件,不然引用不到
在项目下新建一个.py文件,名字随便不要带test,或lesson就行。在项目下新建,不要在包里,不要在包里,不要在包里
import unittest
from lesson_unittest.lesson_test_fixture1 import lesson
suite = unittest.TestSuite(unittest.makeSuite(lesson))
if __name__=='__main__':
runner = unittest.TextTestRunner()
runner.run(suite)
可以看到把lesson两个测试用例都执行了,但是使用makeSuite()还是有些繁琐。要把写的所有的类都加到测试套件中
最常用的是使用discover()方法可以把指定路径下所有测试方法都加载到测试套件中
使用刚才实验makeSuite()方法的那个.py文件,清空代码输入以下代码
import unittest
test_dir = 'D:/PycharmProjects/PythonLesson/lesson_unittest'
discover = unittest.defaultTestLoader.discover(test_dir, pattern='lesson*.py')
runner = unittest.TextTestRunner()
runner.run(discover)
test_dir是指定的路径,pattern是指定的文件名。pattern参数是定义文件名匹配规则的,可以随便修改
比如这里lesson*.py是指文件名以lesson开头的文件
也可以写成*test*文件带有test的文件
如果是*lesson.py,那就是指文件名以lesson.py结尾的文件
*起到跟通配符差不多的作用
python3+requests库框架设计05-unittest单元测试框架的更多相关文章
- python3+requests库框架设计01-自动化测试框架需要什么?
		
什么是自动化测试框架 关于自动化测试框架的定义有很多,在我大致理解下就是把能实现不同功能的软件组合在一起,实现特定的目的,这就是一个简单的自动化测试框架. 接口自动化测试框架核心无非是选择 一个用来编 ...
 - Python+Selenium框架设计篇之-简单介绍unittest单元测试框架
		
前面文章已经简单介绍了一些关于自动化测试框架的介绍,知道了什么是自动化测试框架,主要有哪些特点,基本组成部分等.在继续介绍框架设计之前,我们先来学习一个工具,叫unittest. unit ...
 - 四. 引入unittest单元测试框架
		
1. 安装 SeleniumIDE(firefox) (1)下载地址:https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/ (2 ...
 - Selenium(十八):unittest单元测试框架(四) HTML测试报告
		
1. HTML测试报告 对测试人员来而言,测试的产出很难衡量.换句话说,测试人员的价值比较难以量化和评估,相信这一点对软件测试人员来说深有体会.我们花费了很多时间与精力所做的自动化测试也是如此.所以, ...
 - unittest单元测试框架总结
		
unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...
 - unittest单元测试框架详解
		
unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...
 - Selenium+Python ---- 免登录、等待、unittest单元测试框架、PO模型
		
1.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...
 - unittest单元测试框架
		
unittest单元测试框架 概述: 单元测试框架主要用来完成以下三件事: 提供用例组织与执行:当测试用例只有几条时,可以不必考虑用例的组织,但是当用例达到成百上千条时,大量的用例堆砌在一起,就产生了 ...
 - unittest单元测试框架总结(转载)
		
转载:https://www.cnblogs.com/yufeihlf/p/5707929.html unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该 ...
 
随机推荐
- 2、JPA-Annotation
			
注解放在类属性上不生效时可放在get方法上试试,原因未知 @Entity /** * @Entity 该Java类为实体类,将映射到数据库表.如声明一个实体类 Customer,它将映射到数据库中的 ...
 - Hadoop记录-变更
			
1.安装salt-minion sed -i 's/^#//g' /etc/yum.repos.d/centos7.4.repo sed -i 's/enabled=0/enabled=1/g' /e ...
 - 关于PHP中会话技术的知识点分享
			
前言:在PHP中会话技术也是特别重要的,主要应用在免登录,保存一些持久化数据等等的方面,但是后期的介绍中,我将会放弃这种技术改用redis方法来替换这种方法. (一)cookie技术(即数据缓存在客户 ...
 - 【1】【leetcode-33,81】 搜索旋转排序数组
			
(没思路) 33. 搜索旋转排序数组 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给 ...
 - 【自适应波束形成】MVDR(Minimum Variance Distortionless Response )笔记
			
参考: https://blog.csdn.net/qq_40981790/article/details/80143524 1. MVDR简介(Minimum Variance Distortion ...
 - Entity Framework Code First 学习日记(1)精
			
我最近几天正在学习Entity Framework Code First.我打算分享一系列的学习笔记,今天是第一部分: 为什么要使用Code First: 近 年来,随着domain driven d ...
 - vue使用字体图标转码问题
			
使用iconfont字体之后,出现的是一个方框,而没有出现相应的图标 需要通过String.fromCharCode方法转成指定unicode编码对应的十六进制字符 <div class=&qu ...
 - SpringBoot系列: Actuator监控
			
Sprng Boot 2 actuator变动加大, 网上很多资料都都已经过期. ============================配置项============================ ...
 - DataTabe使用Linq实现 Group
			
DataTable dt = dataSet.Tables[]; var query = from t in dt.AsEnumerable() group t by new { t1 = t.Fie ...
 - StarUML最新版2.8.1简单使用及代码生成
			
StarUML(简称SU)是一款开放源码的UML开发工具,由韩国公司主导开发出来的,可以直接到StarUML网站下载. 在这里直接超链接:http://staruml.io/download SU是一 ...