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单元测试框架的更多相关文章

  1. python3+requests库框架设计01-自动化测试框架需要什么?

    什么是自动化测试框架 关于自动化测试框架的定义有很多,在我大致理解下就是把能实现不同功能的软件组合在一起,实现特定的目的,这就是一个简单的自动化测试框架. 接口自动化测试框架核心无非是选择 一个用来编 ...

  2. Python+Selenium框架设计篇之-简单介绍unittest单元测试框架

    前面文章已经简单介绍了一些关于自动化测试框架的介绍,知道了什么是自动化测试框架,主要有哪些特点,基本组成部分等.在继续介绍框架设计之前,我们先来学习一个工具,叫unittest.       unit ...

  3. 四. 引入unittest单元测试框架

    1.   安装 SeleniumIDE(firefox) (1)下载地址:https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/ (2 ...

  4. Selenium(十八):unittest单元测试框架(四) HTML测试报告

    1. HTML测试报告 对测试人员来而言,测试的产出很难衡量.换句话说,测试人员的价值比较难以量化和评估,相信这一点对软件测试人员来说深有体会.我们花费了很多时间与精力所做的自动化测试也是如此.所以, ...

  5. unittest单元测试框架总结

    unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...

  6. unittest单元测试框架详解

    unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...

  7. Selenium+Python ---- 免登录、等待、unittest单元测试框架、PO模型

    1.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去 ...

  8. unittest单元测试框架

    unittest单元测试框架 概述: 单元测试框架主要用来完成以下三件事: 提供用例组织与执行:当测试用例只有几条时,可以不必考虑用例的组织,但是当用例达到成百上千条时,大量的用例堆砌在一起,就产生了 ...

  9. unittest单元测试框架总结(转载)

    转载:https://www.cnblogs.com/yufeihlf/p/5707929.html unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该 ...

随机推荐

  1. Linux Cluster 基础之LVS调度算法与集群类型

    Linux Cluster 基础之LVS调度算法与集群类型 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.LB Cluster 1>.什么是LB LB 集群是 load ...

  2. Hadoop基础-通过IO流操作HDFS

    Hadoop基础-通过IO流操作HDFS 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.上传文件 /* @author :yinzhengjie Blog:http://www ...

  3. powershell 定时删除脚本

    powershell  定时删除脚本 $today=Get-Date #"今天是:$today" #昨天 #"昨天是:$($today.AddDays(-1))" ...

  4. linux下查看主板内存槽与内存信息

    1.查看内存槽数.那个槽位插了内存,大小是多少 dmidecode|grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range 2. ...

  5. Java基础之IO流学习总结

    Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  6. HTTP Method小结

    GET 从指定的url上获取内容 POST 提交body中的内容给服务器中指定的url中,属于非幂等的(non-idempotent)请求 HEAD 从指定的url上获取header内容(类似Get方 ...

  7. python 调用 java代码

    一.JPype简述 1.JPype是什么? JPype是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器端编程)中的不足. 2.JPype ...

  8. css3实现单行文本溢出显示省略号

    文本超出一定宽度让其隐藏,以省略号替代 width:200px; white-space:nowrap; text-overflow:ellipsis; overflow:hidden; 如下图

  9. tedu训练营day03

    Day03笔记1.作业 1.假如你现在25周岁,每年365天,计算你过了多少个星期天(大概数字) 提示 :地板除 2.毕业薪资为10000元,每年涨20%,十年之后你的薪资为多少元? 提示: 幂运算( ...

  10. IEEE signal processing letters 投稿经验

    转自:http://emuch.net/t.php?tid=6226942 前段时间比较幸运地中了一篇spl,把自己浅薄的经验写出来,直接从自己博客上转过来,分享给大家,望抛砖引玉吧~~~ 从投稿到录 ...