我们知道写完了代码需要自己跑一跑进行测试,一个写好的程序如果连测试都没有就上到生产环境是不敢想象的,这么做的人不是太自信就是太无知。

传统测试无非就是自己运行一下程序查看结果,或者前后端服务进行联调,这里要说的是走正规流程的单元测试,那到底什么是单元测试呢?顾名思义,只测试当前单元的程序或者代码,也可以理解当前模块的代码块,单元测试假设所有的内部或外部的依赖应该是稳定的, 已经在别处进行测试过的.使用mock 就可以对外部依赖组件实现进行模拟并且替换掉, 从而使得单元测试将焦点只放在当前的单元功能。

简单地说,mock就是帮我们解决测试依赖的一个模块,在Python3中,mock已经被集成到了unittest单元测试框架中,所以不需要单独安装,可以直接使用。

什么情况下使用mock

在项目的单元测试过程中,会遇到:

1、接口的依赖

2、外部接口调用

3、测试环境非常复杂

代码示例:

def add_and_multiply(x, y):

addition = x + y

multiple = multiply(x, y)

return (addition, multiple)

def multiply(x, y):

return x * y

class MyTestCase(unittest.TestCase):

def test_add_and_multiply(self):

x = 3

y = 5

addition, multiple = add_and_multiply(x, y)

self.assertEqual(8, addition)

self.assertEqual(15, multiple)

if __name__ == "__main__":

unittest.main()

如上,我们要测试A模块,然后A模块依赖于B模块的调用。但是,由于B模块的改变,导致了A模块返回结果的改变,从而使A模块的测试用例失败。其实,对于A模块,以及A模块的用例来说,并没有变化,不应该失败才对。

这个时候就是mock发挥作用的时候了。通过mock模拟掉影响A模块的部分(B模块)。至于mock掉的部分(B模块)应该由其它用例来测试。

总有人吐槽 Python 的性能低下,但是 Python 本质其实也不是用来做计算任务的,Python 是一门胶水语言,是用来写业务逻辑的,而不是用来写CPU密集的算法的。事实上复杂的解析一般都会用 C++ 这种硬核语言来写了,比如 numpy TensorFlow lxml。大多数程序员一天 90% 的工作除了和PM撕逼以外,也就是在写 CRUD,也就是调用这些包。所以瓶颈一般在 IO 上而不在 CPU 上,而解决 IO 的瓶颈手段就多了,Python 中至少有 多进程、多线程、AsyncIO、Gevent 等多种方法。不过方法多其实也是一个弊端,这几种方法可以说是基本互不兼容,对各种第三方库的支持也参差不齐。

而测试python程序的cpu瓶颈,就需要cProfile模块了,cProfile是一种确定性分析器,只测量CPU时间,并不关心内存消耗和其他与内存相关联的信息。

cprofile在python3.7.2里是内置模块,不需要单独安装。

cProfile 有多种调用方法,可以直接从命令行调用:

python -m cProfile -s tottime 你的脚本.py

其中的 -s 的意思是 sort。常用的 sort 类型有两个:

tottime,指的是函数本身的运行时间,扣除了子函数的运行时间

cumtime,指的是函数的累计运行时间,包含了子函数的运行时间

要获得对程序性能的全面理解,经常需要两个指标都看一下。

至此,使用cprofile就可以很简单的看出你写的程序是否性能堪忧了,不过性能这个问题其实是典型的木桶理论的场景,系统的整体性能是由最差的一块决定的。所以也是一个不断迭代的过程。

python单元测试mock_python3的单元测试模块mock与性能测试模块cProfile相关推荐

  1. python unitest框架_python单元测试框架Unitest

    一.unitest简介 unittest是python内置的单元测试框架,具备编写用例.组织用例.执行用例.输出报告等自动化框架的条件. 使用unittest前需要了解该框架的五个概念: test c ...

  2. Python 标准库之单元测试框架 -- unittest

    用Python搭建自动化测试框架,我们需要组织用例以及测试执行,这里博主推荐Python的标准库--unittest. unittest是xUnit系列框架中的一员,如果你了解xUnit的其他成员,那 ...

  3. python测试系列教程 —— 单元测试unittest

    全栈工程师开发手册 (作者:栾鹏) python教程全解 unittest是xUnit系列框架中的一员,如果你了解xUnit的其他成员,那你用unittest来应该是很轻松的,它们的工作方式都差不多. ...

  4. Python必会的单元测试框架 —— unittest

    用Python搭建自动化测试框架,我们需要组织用例以及测试执行,这里博主推荐Python的标准库--unittest. unittest是xUnit系列框架中的一员,如果你了解xUnit的其他成员,那 ...

  5. python语言案例教程单元测试答案_Python单元测试框架(附例子)

    什么是单元测试? 单元测试在[Python中做是为了在应用程序的开发阶段的早期识别错误时的错误不太经常和修复成本更低. 单元测试是用Python设计的脚本化代码级测试,用于验证功能的小"单元 ...

  6. Python单元测试介绍及单元测试理解,单元测试的自动生成(对函数进行测试)

    目录 一.单元测试的定义 二.实例理解 2.1可通过的测试 一个模拟的登录 测试用例 测试代码 运行结果 2.2不可通过的测试 一个模拟的登录 测试用例 测试代码 运行结果 三.单元测试的自动生成 h ...

  7. Python之路【第七篇】:常用模块

    一. 模块介绍 1. 什么是模块 在前面的几个章节中我们基本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了. 为此 Python ...

  8. Python游戏工具包---Pygame最常用的15个模块详解(附pdf版本)

    ↑ 点击上方 "一行数据" 关注 + 星标 ~ 每周送书,绝不错过 本文不查错,三连送书 最近很多读者想学习使用python来制作游戏,其中最经典的工具包就是Pygame ,如果单 ...

  9. Java单元测试实践-01.单元测试概述与示例

    Java单元测试实践-00.目录(9万多字文档+700多测试示例) https://blog.csdn.net/a82514921/article/details/107969340 1. 前言 以下 ...

最新文章

  1. 2017-2018-1 20155336 《信息安全系统设计基础》加分作业:实现mypwd
  2. 巨蟒django之CRM5 学习记录课程记录班级管理私户的数量上限
  3. C指针原理(27)-编译基本原理-语法树及其实现7
  4. 【收藏】在QGIS中导入GOOGLE、BING等地图和卫星影像(插件方式和XYZ方式)
  5. 【机器视觉】 until算子
  6. mvnForum1.2.2在Eclipse中的部署
  7. ROS-手势控制小海龟移动
  8. win11网络怎么优化 Windows11优化网速的步骤教程
  9. 软件测试 java_关于Java单元测试,你需要知道的一切
  10. NPOI SetColumnHidden隐藏列不起作用的原因
  11. 2017全国计算机二级office题库,2017全国计算机二级office选择题题库
  12. winediag:SECUR32_initNTLMSP ntlm_auth was not found or is outdated
  13. Spring的事务传播特性
  14. 【影像配准】配准之棋盘网格图(镶嵌图像)(附有 C++ 代码)
  15. BasesHomo 21‘ 旷视UESTC
  16. SQL语句值left join,right join,inner join的用法
  17. Elasticsearch:如何在聚合时选择所需要的 bucket 并进行可视化
  18. 什么是 Web 3.0:面向未来的去中心化互联网
  19. 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 总共多少步
  20. WinForm引用ActiveX组件,对Com组件的学

热门文章

  1. iOS开发之解决系统数字键盘无文字时delete键无法监听的技巧
  2. codeMirror配置
  3. MPLS ×××配置
  4. squid代理服务器在企业网中的应用
  5. 《我的第一本c++书》读后感
  6. 话里话外:家族化管理模式和职业化管理模式孰优孰劣
  7. linux java -xms_为什么JVM比指定的-Xms消耗更少的内存?
  8. python获取文件名不含后缀名_大部分Python资料都没有说到的重点-用实战教你解决问题的思路...
  9. matlab双目相机标定校正_基于双目视觉的无人机避障算法(一)
  10. python加密程序_Python 简单的可逆加密程序