Python unittest 之二: 测试类的执行
大家看一段下面的代码
我们写的程序中有如下的一个 类 Widget, 代表了界面的一个控件,这是我们要测试的类
class Widget:def __init__(self,msg):# print(msg)self._size = 50,50def size(self):return self._sizedef resize(self,w,h):self._size = w, h
为了方便理解,这个类做的很简单,
初始化方法里面定义了控件的大小是50像素宽,50像素高。
记录在属性 _size 中
size方法返回该控件的长和宽。
resize改变控件的长和宽。
现在,我们使用unittest来测试它,测试代码如下所示
import unittestclass Widget:def __init__(self,msg):# print(msg)self._size = 50,50def size(self):return self._sizedef resize(self,w,h):self._size = w, hclass WidgetTestCase(unittest.TestCase):def setUp(self):print('in setUp')self.widget = Widget('The widget')def tearDown(self):print('in tearDown')def test_1(self):print('in test_1')self.assertEqual(self.widget.size(), (50,50),'incorrect default size')def test_2(self):print('in test_2')self.widget.resize(100,150)self.assertEqual(self.widget.size(), (100,150),'wrong size after resize')
现在来分析一下代码,我们导入unittest库
import unittest
定义了一个继承自unittest.TestCase 的测试类WidgetTestCase
class WidgetTestCase(unittest.TestCase)
注意,这个类名是可以随便起的,只要继承自WidgetTestCase即可。
里面有setup, teardown 两个方法,和两个测试方法test_1 , test_2
注意代表测试方法一定要以test开头,不然不会被认为是测试方法。
测试需要检查某个结果是否符合预期, 这个检查点 就是通过 TestCase方法的assert系列的函数实现的。
这里就是assertEqual, 判断前两个参数是否相等,如果相等测试通过,
如果不相等,测试不通过。显示的错误信息就是第3个参数。
这些assert系列的函数哪里来的?对了,是父类WidgetTestCase里面的。
而 setup, teardown 这两个方法就是前面说过的 初始化环境和清除环境的方法,
这 setup 方法会在该类的每个测试方法执行前先执行
这 teardown 方法会在该类的每个测试方法执行后执行
注意是每个测试方法执行前后, 都会 执行一下 setup 和teardown
我们可以在终端里面执行该测试,执行命令如下
python -m unittest test1.py
执行结果如下
D:\ut>python -m unittest test1.py
in setUp
in test_1
in tearDown
.in setUp
in test_2
in tearDown
.
----------------------------------------------------------------------
Ran 2 tests in 0.000sOK
结果是OK 表示全部通过
看看上面的输出,发现执行次序是:
先setup
执行测试方法
最后 teardown
如果想看到更详细一些的输出信息,我们可以加上参数 -v
python -m unittest test1.py -v
这样会显示当前正在执行的是哪个测试方法,和每个测试方法的执行结果
D:\ut>python -m unittest test1.py -v
test_1 (test1.WidgetTestCase) ... in setUp
in test_1
in tearDown
ok
test_2 (test1.WidgetTestCase) ... in setUp
in test_2
in tearDown
ok----------------------------------------------------------------------
Ran 2 tests in 0.000sOK
如果我们修改一下,故意让一个验证出错,比如
def resize(self,w,h):self._size = w, h+6
执行测试结果就会报错
D:\gsync\workspace\sq\python\samples\ut>python -m unittest test1.py -vtest_1 (test1.WidgetTestCase) ... in setUp
in test_1
in tearDown
ok
test_2 (test1.WidgetTestCase) ... in setUp
in test_2
in tearDown
FAIL======================================================================
FAIL: test_2 (test1.WidgetTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):File "D:\gsync\workspace\sq\python\samples\ut\test1.py", line 33, in test_2'wrong size after resize')
AssertionError: Tuples differ: (100, 156) != (100, 150)First differing element 1:
156
150- (100, 156)
? ^+ (100, 150)
? ^: wrong size after resize----------------------------------------------------------------------
Ran 2 tests in 0.000sFAILED (failures=1)
注意:只有setup成功,才会执行测试,如果setup失败,就不会执行测试方法了。
因为unittest框架会认为初识化失败了。
什么就被认为 setup失败?就是setup里面抛出了异常。
但是要注意的是: 执行一个测试方法前初始化失败了,
只是这个测试方法不执行了。
但是还是会执行下一个测试方法,当然也包括再次执行初始化方法。
再强调一遍,测试方法必须以test开头,如果不是, 比如tes,就不会被执行
执行次序
测试方法的执行次序是由方法名称的 字符串排序决定的,通常是ascii顺序
本例中就是:test_1 先执行,test_2 后执行
如果test_1 改为test_case3 ,
就会test_2 先执行
最后感谢每一个认真阅读我文章的人,下面这个网盘链接也是我费了几天时间整理的非常全面的,希望也能帮助到有需要的你!
这些资料,对于想转行做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……
如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以点击下方小卡片加入我们群,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。
敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。
自学推荐B站视频:
零基础转行软件测试:38天自学完软件测试,拿到了字节的测试岗offer,堪称B站最好的视频!
自动化测试进阶:已上岸华为,涨薪20K,2022最适合自学的python自动化测试教程,自己花16800买的,无偿分享
Python unittest 之二: 测试类的执行相关推荐
- Python学习日记(二十三) 类命名空间和组合
类命名空间 在一个类中它的函数(方法)属于动态属性,直接定义的变量属于静态属性 首先先定义一个类,并在这个类里面加入静态变量.属性等然后将一个对象实例化 class Fighter: #定义一个战机的 ...
- python appium自动化测试框架unittest_Appium基于Python unittest自动化测试 自动化测试框架 -- PO并生成html测试报告...
基于python单元测试框架unittest完成appium自动化测试,生成基于html可视化测试报告 代码示例: #利用unittest并生成测试报告 class Appium_test(unitt ...
- Python unittest –单元测试示例
Today we will learn about python unittest and look through python unit test example programs. In pre ...
- (python)Day9丨测试代码
测试函数 先写下要测试的代码: name_function.py def get_formatted_name(first,last):"""Generate a nea ...
- python的unittest测试类代码实例
nittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者就 ...
- python装饰器执行顺序_python unittest单元测试框架-3用例执行顺序、多级目录、装饰器、fixtures...
1.用例执行顺序 unittest默认会按照ascii码的顺序,依次执行.类名--方法名排序,使用discover也是默认排序.如果不想使用默认排序,就使用testsuite测试集的方式. impor ...
- python+pytest接口自动化之测试函数、测试类/测试方法的封装
前言 今天呢,笔者想和大家聊聊python+pytest接口自动化中将代码进行封装,只有将测试代码进行封装,才能被测试框架识别执行. 例如单个接口的请求代码如下: import requestshea ...
- 十年测试经验的阿里p10讲解python初阶:函数和模块 python全栈自动化测试系类4-2
还是老规矩,大家可能对凡哥不是很了解这里先和大家来个自我介绍 凡哥我已经有着十二年互联网自动化测试和测试开发工程师,拥有丰富的自动化测试平台及测试开发经验,擅长接口测试.Python自动化全栈,测试开 ...
- 测试如何学python_学习Python:如何测试函数和类,快学,与
编写代码离不开写测试,只有通过测试才知道代码的逻辑有没有问题,健壮性好不好等,测试让你深信,即便有越来越多的人使用你的程序,它也能一如既往正确地工作. 1.测试函数 Python标准库中的模块unit ...
最新文章
- python项目主界面_python项目案例
- 地图与定位之大头针视图
- c#图片base64去转义字符_C# 将图片转成Base64字符串,再将字符串转成图片,然后将图片存储到服务器文件夹中,求代码。感激不尽...
- mysql dba系统学习(16)mysql的mysqldump备份
- 《需求工程——软件建模与分析》阅读笔记二
- 第二篇: 在虚拟主机上使用ASP.NET Ajax
- 深入理解SpringBoot (4)
- 龙芯笔记本可能以闹剧收场
- Python获取本机所有IP地址
- 的正确使用_如何正确使用隔离霜
- Redis的安装和使用之二------phpredis与phpRedisAdmin
- Maven之dependencyManagement
- 收费最低的云存储_营业收费系统|自来水管理系统|自来水公司收费管理系统|手机移动抄表|网上营业厅|短信服务平台...
- C# Spire.Pdf 无限制 使用教程
- 动手学深度学习(二十七)——微调(fine turning)
- 索尼a6000拍月亮_如何给月亮拍好照片
- 建设内链要注意的事项
- switch vba_VBA switch
- 新手入门必懂:关于西瓜视频广告,你不可不知的基础知识
- html表头纵向,实现纵向表头的table
热门文章
- Linux下cppcheck静态检测工具
- 国产操作系统--奇思妙想
- 广州公布“中国制造2025”实施方案
- 【遇见大咖】测试界:如何定位自己的角色扮演?
- 世界杯来了!谁能夺冠?让我们用数据说话
- 用html制作百度地图,canvas实现百度地图个性化底图绘制
- TMS320F280049C 学习笔记20 可配置逻辑块 (CLB) 例程
- Mapgis如何把坐标点按实际投影到地质图上
- 人过五十再有精力,也不要招惹这3个“荒唐事”,余生越混越差
- 韩钰带你一起走进电商世界之淘宝店铺设计尺寸规范