python 几种常用测试框架

测试的常用规则

  1. 一个测试单元必须关注一个很小的功能函数,证明它是正确的;
  2. 每个测试单元必须是完全独立的,必须能单独运行。这样意味着每一个测试方法必须重新加载数据,执行完毕后做一些清理工作。通常通过setUp()和setDown()方法处理;
  3. 编写执行快速的测试代码。在某些情况下,测试需要加载复杂的数据结构,而且每次执行的时候都要重新加载,这个时候测试执行会很慢。因此,在这种情况下,可以将这种测试放置一个后台的任务中。
  4. 采用测试工具并且学着怎么使用它。
  5. 在编写代码前执行完整的测试,而且在编写代码后再重新执行一次。这样能保证你后来编写的代码不会破坏任何事情;
  6. 在提交代码前执行完整的测试;
  7. 如果在开发期间被打断了工作,写一个打断的单元测试,关于你下一步将要开发的。当你回来工作时,你能知道上一步开发到的指针;
  8. 单元测试函数使用长的而且具有描述性的名字。在正式执行代码中,可能使用square()或sqr()取名,但是在测试函数中,你必须取像test_square_of_number_2()、test_square_negativer_number()这些名字,这些名字描述更加清楚;
  9. 测试代码必须具有可读性;
  10. 单元测试对新进的开发人员来说是工作指南。

二、常见的测试框架

2.1 Unittest

unittest是Python内置的标准类库。它的API跟Java的JUnit、.net的NUnit,C++的CppUnit很相似。

通过继承unittest.TestCase来创建一个测试用例。

具体请参考 文档 。

举个例:

import unittestdef fun(x): return x + 1 class MyTest(unittest.TestCase): def test(self): self.assertEqual(fun(3), 4) 

执行后成功。

但是,如果将期望的结果改成5,则执行的结果如下图所示:

2.2 Doctest

doctest 模块会搜索那些看起来像交互式会话的 Python 代码片段,然后尝试执行并验证结果.即使从没接触过 doctest,我们也可以从这个名字中窥到一丝端倪。“它看起来就像代码里的文档字符串(docstring)一样” 如果你这么想的话,就已经对了一半了。

举个例子:

def square(x):"""Squares x. >>> square(2) 4 >>> square(-2) 4 >>> square(5) 25 """ return x * x if __name__ == '__main__': import doctest doctest.testmod() 

当执行该代码后,会执行文档内>>> 后面的测试代码,并与下一行的结果进行比对。执行的结果如下:

但是,如果我们把结果改一下,square(2)的结果改成5,测试代码如下:

def square(x):"""Squares x. >>> square(2) 5 >>> square(-2) 4 >>> square(5) 25 """ return x * x if __name__ == '__main__': import doctest doctest.testmod() 

执行的测试结果如下所示:

2.3 py.test

py.test是unittest的替代工具。

尽管它是一个功能丰富、灵活的测试框架,但是它的语法很简单。创建一个单元测试就像编写一个模块一样。相比unittest,实现相同的测试功能,py.test做的事情更少。

py.test详细 文档 。

首先,安装py.test

pip install pytest

第二步,编写测试代码

def func(x):return x + 1 def test_answer(): assert func(3) == 5 

第三步,执行测试代码。

  •   找到pytest安装路径。
  • 用其所在的解析器(python.exe)执行test.py ,执行命令比如:

执行的结果如下图所示:

2.4 Nose

Nose是对unittest的扩展,使得python的测试更加简单。nose自动发现测试代码并执行,nose提供了大量的插件,比如测试输出的xUnitcompatible,覆盖报表等等。

nose的详细文档: https://nose.readthedocs.org/en/latest/

注意:nose本身是支持python3的,但是很多它的插件不支持。

2.5 tox

最大的特色,是自动最测试环境的管理以及使用多个解析器配置进行测试。

tox的详细文档: http://testrun.org/tox/latest/

2.6  Unittest2

是unitest的升级版。对API进行了改善以及更好的诊断语法。

unittest2的详细文档: https://pypi.python.org/pypi/unittest2

首先,安装

pip install unittest2

为了以后能在unittest与unittest2之间进行切换,最好的代码编写方式如下:

import unittest2 as unittest

class MyTest(unittest.TestCase): ... 

2.7 mock unittest.mock是用来测试python的库。在python3.3版本以后,这个是一个标准库。 对老版本来说,使用pip install mock 进行安装。

mock的精髓在于,你可以使用模拟的对象来替代你的系统的一部分,然后验证后续的执行是否正确。
mock的详细文档:http://www.voidspace.org.uk/python/mock/

转载于:https://www.cnblogs.com/ceshi2016/p/9110695.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485953.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器系统盘最佳设置,启用系统的硬盘高级性能设置优化硬盘到最佳性能

硬盘性能直接关系到网吧机器的性能,如果是无盘服务器上的硬盘,那更是整个网吧的核心性能。所以一定要好好优化下,下面推荐一个小技巧吧:启用硬盘高级性能 \ 硬件管理器,选一个磁盘,右键属性,上…

ASML 1nm光刻机研究进展:摩尔定律尚未结束

文章来源:Sparrows NEWS、新智元摩尔定律的终点是什么?随着5nm光刻技术的大规模生产和3nm的突破,摩尔定律的终结变得越来越难以捉摸。可以肯定的是,随着过程的进一步改进,其成本将成倍增加。根据日本媒体Mynavi的报道&…

redis为什么选择单线程工作模型

1、先说一下为什么出现进程,线程 进程:在计算机发明之初就发现,在输入数据时(I/O速度慢),CPU是空闲的,这样就浪费了CPU资源,为了充分利用CPU资源,发明了进程,…

​​《自然》2020年十大科学发现出炉:病毒,冷冻电镜与快速射电暴

来源:科研圈作者:陈梦圆、谢一璇、李姗珊、邱燕宁、魏潇科学成就

命令行设置dns_dos命令netsh图文教程,设置修改IP地址子网掩码网关命令行改dns...

大家好,我是老盖,首先感谢观看本文,本篇文章做的有视频,视频讲述的比较详细,也可以看我发布的视频。今天我们学习dos命令中的netsh,这个命令是网络命令,它有很多的功能,今天我们用它…

第三代人工智能基础设施背后,是一次技术应用的常识普及运动

来源:脑极体买了新电脑和手机,你会提前安装好杀毒或安全软件,还是等被黑客攻破了才悔之晚矣?处理传染病疫情,是从源头释放药物和疫苗,还是坐等医院的患者超过治疗和处理能力?面对危机舆情&#…

5 ui自适应窗口_Qt编写地图综合应用5-自适应拉伸

一、前言用过echart的人都会遇到一个问题,就算是代码中写了window.onresize echart.resize,也只是横向自适应拉伸填充页面,垂直方向不会变化,除非指定高度才可以,这就比较郁闷了,为何echart本身不会自适应…

为什么俄罗斯的数学那么牛?

编辑 ∑Gemini来源:奇趣数学苑但在国际上也有一个很著名的说法,就是世界上最好的大学,其实是“美国的学校,中国的学生,俄罗斯的教授”。俄罗斯数学家佩雷尔曼虽然俄罗斯现在相比以前来说,尤其明显的是在一些需要大量设…

查看屏幕大小_疑似“iPhone 12” 的OLED屏幕组件泄露

来自可靠的泄密者的新照片显示了即将面世的“ iPhone 12”所搭载的OLED屏幕。这名泄密者以前曾显示过未来苹果产品的准确图像,此前曾展示过苹果A14芯片组的早期图片,并声称“ iPhone 12”将配备20W电源适配器。现在他在推特上发布了一张照片,…

搭建Hexo博客(一)-创建Hexo环境

Hexo配合github,可以创建自己的博客。基本原理是使用Hexo生成静态页面,发布到github上。在本地需要搭建Hexo环境。 1、安装nodejs 下载并安装NodeJS,官网地址:https://nodejs.org/en/ 2、安装完后,查看安装情况 1 node…

Nature:2020年最佳科学影像,每一张都是壁纸,每一张都是历史

文章来源:学术头条2020年是独一无二的一年。COVID-19大流行将科学推到了最前沿,并深刻影响了人们的生活。但是这一年也产生了许多与病毒无关的新影像。从薄薄的太阳能电池,到经过基因编辑的鱿鱼,下面就是Nature新闻和艺术团队评选…

转 从红帽、GitHub和Docker看开源商业模式的进阶

从红帽、GitHub和Docker看开源商业模式的进阶 发表于2014-12-16 10:26| 7594次阅读| 来源http://stratechery.com/| 0 条评论| 作者Ben ThompsonDocker红帽GitHub开源CoreOS摘要:从技术角度来说,Docker无疑是可圈可点的,比如“write once run…

antimalware可以关闭吗_iPhone最好关闭这4个设置,手机流畅还省电

你抢到新款的iPhone12了吗?80%的小伙伴都会忽略的设置,你的iPhone手机最好关闭以下这4个设置。①关闭ios系统更新操作步骤:打开【设置】-【通用】-【软件更新】-【自动更新】-【下载iOS更新】,关闭即可。这样就不会莫名其妙地下载…

MVVM Light Toolkit使用指南

原文地址: https://blog.csdn.net/ldld1717/article/details/77040077概述MVVM Light Toolkit是一个Android MVVM 轻量级工具库,主要目的是更快捷方便的构建Android MVVM应用程序,工具库添加了一些Data Binding 不支持的属性,还有…

段永朝:界面——之内、之外与之间

来源:苇草智酷01画一个圈儿,就把平面分成圈内,圈外。这个圈儿,就成了界面。垒一道墙,就把空间分成墙里,墙外。这个墙,就成了界面。看一眼手机上的钟表,那一刻闪现的数字,…

mysql面试考点_mysql面试知识点

1 引擎-MyISAM和InnoDB的区别a 是否支持行级锁 :MyISAM 只有表级锁(table-level locking),而InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁。b 是否支持事务和崩溃后的安全恢复:MyISAM 强调的是性能,每次查询具有原子性,其执行…

jquery 快速入门二

---恢复内容开始--- 操作标签 样式操作 样式类 addClass();//添加指定的CSS类名。 removeClass();//移除指定的类名. hasClass();//判断样式不存在 toggleClass();//切换css类名,如果有就移除,如果没有就添加 示例:开关灯和模态框 CSS css(&q…

中国工程院《全球工程前沿2020》报告在京发布

来源:科学网作者:李晨阳12月18日上午,中国工程院《全球工程前沿2020》报告在京发布。报告围绕机械与运载工程、信息与电子工程、化工冶金与材料工程、能源与矿业工程、土木水利与建筑工程、环境与轻纺工程、农业、医药卫生、工程管理9个领域&…

AlphaFold证明人工智能可以解决基本的科学问题

来源:IEEE电气电子工程师Gif: DeepMindTwo examples of protein targets in the free modelling category.任何人工智能的成功实施都依赖于以正确的方式提出正确的问题。这就是英国人工智能公司DeepMind(Alphabet的子公司)在利用其神经网络解…

Java中文件的创建

File filenew File(“text.txt”) 运行这行代码,我们会发现相应的文件夹下无法找到创建的text.txt 首先 File 类是对文件系统的映射 并不是硬盘上真实的文件 所以 new File("xxx.xxx") 只是在内存中创建File文件映射对象,而并不会…