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自动化测试用例的开发与执行,该 ...
随机推荐
- VMware 无法打开内核设备 \\.\Global\vmx86
无法打开内核设备 \\.\Global\vmx86: 系统找不到指定的文件.你想要在安装 VMware Workstation 前重启吗? vmware 安装完成后,打开现有虚拟系统时,报错. 无法打 ...
- python js(JavaScript)初识
####################总结############## 引入: 可以在body标签中放入<script type=”text/javascript”></scrip ...
- (转)windows 下安装配置 Nginx 详解
windows 下安装配置 Nginx 详解 本文转自https://blog.csdn.net/kingscoming/article/details/79042874 nginx功能之一可以启动一 ...
- 介绍3款Markdown编辑器
为什么写此篇 自从CSDN的博客有了Markdown后,慢慢的了解并学会了用Markdown语法写博客.但CSDN博客是在浏览器中使用,于是一直寻找离线的Markdown编辑器. 网上先是找到了M ...
- Golang入门教程(十四)结构体和类详解
golang中并没有明确的面向对象的说法,实在要扯上的话,可以将struct比作其它语言中的class. 类声明 type Book struct { Title string Author stri ...
- 063、如何使用weave网络(2019-04-03 周三)
参考https://www.cnblogs.com/CloudMan6/p/7471162.html weave是Weaveworks开发的容器网络解决方案.weave创建的虚拟网络可以将部署在多 ...
- 明白生产环境中的jvm参数
明白生产环境中的jvm参数 写代码的时候,程序写完了,发到线上去运行,跑一段时间后,程序变慢了,cpu负载高了--一堆问题出来了,所以了解一下生产环境的机器上的jvm配置是有必要的.比如说: JDK版 ...
- JS算法练习一
JS算法练习 1.随机生成一个五位以内的数,然后输出该数共有多少位,每位分别是什么? ①.数组添加元素的方式得到位数(数组长度)与值(数组元素) ①.数组添加元素的方式得到位数(数组长度)与值(数组元 ...
- event.target解析
event.target返回最初触发事件的DOM对象. Vue例子: main.js methods:{ fan:function(event){ console.log(event.target); ...
- bean的装配方式(注入方式,构造注入,setter属性注入)
bean的装配方式有两种,构造注入和setter属性注入. public class User { private String username; private String password; ...