使用Python来写mock代码(桩代码)-其实很简单

1.Mock基本用法
- 使用Mock能创建你能访问(模拟)的属性和方法
- 指定类或者函数的返回值和断言方式
创建handle_mock_01.py文件
# 1. 导入mock模块
from unittest import mock class Payment(object):
"""
创建支付类
"""
pass payment = Payment()
# 2. 创建Mock对象, 作为Payment的实例方法
payment.pay = mock.Mock(return_value="Success")
# 3. 当调用pay方法时, 会返回定义Mock对象时指定的return_value值
print(payment.pay())
2.不同的参数返回不同的值

创建handle_mock_02.py文件
# 1. 导入mock模块
from unittest import mock class Payment(object):
"""
创建支付类
"""
pass def parameter_return_data(param):
"""定义参数与返回值映射函数
"""
param_data = {
"用户ID1": "支付成功",
"用户ID2": "支付异常",
"用户ID3": "支付超时",
"用户ID4": KeyError("参数有误"), # 可以返回异常 }
return param_data[param] payment = Payment()
# 2. 创建Mock对象, 作为Payment的实例方法
payment.pay = mock.Mock(side_effect=parameter_return_data)
# 3. 当调用pay方法时, 会返回指定的值
print(payment.pay("用户ID1")) # 返回结果: 支付成功
print(payment.pay("用户ID2")) # 返回结果: 支付异常
print(payment.pay("用户ID3")) # 返回结果: 支付超时
print(payment.pay("用户ID4")) # 返回结果: '参数有误'
3.传参个数
创建handle_mock_03.py文件
# 1. 导入mock模块
from unittest import mock class Payment(object):
"""
创建支付类
"""
pass def fn(a, b):
"""假设实际pay函数, 有两个参数"""
pass payment = Payment()
# 2. 创建Mock对象, 作为Payment的实例方法
payment.pay = mock.create_autospec(fn, return_value="支付成功")
# 3. 当调用pay方法时, 传参数的个数如果不为两个, 则会抛出异常
print(payment.pay("用户ID1", "卡号")) # 返回结果: 支付成功
print(payment.pay("用户ID1")) # 返回结果: TypeError: missing a required argument: 'b'
4.断言方式
创建handle_mock_04.py文件
# 1. 导入mock模块
from unittest import mock class Payment(object):
"""
创建支付类
"""
pass def parameter_return_data(param):
"""定义参数与返回值映射函数
"""
param_data = {
"用户ID1": "支付成功",
"用户ID2": "支付异常",
"用户ID3": "支付超时",
"用户ID4": KeyError("参数有误"), # 可以返回异常 }
return param_data[param] payment = Payment()
# 2. 创建Mock对象, 作为Payment的实例方法
payment.pay = mock.Mock(side_effect=parameter_return_data)
# 3. 当调用pay方法时, 会返回指定的值
# 4. 不同的断言方式
# a. assert_called() mock方法至少调用一次
# 如果还未调用, 则返回 AssertionError: Expected 'None' to have been called.
# 如果已经调用, 则返回None
print(payment.pay("用户ID1")) # 返回结果: 支付成功
# print(payment.pay.assert_called()) # 返回结果: None # b. assert_called_once() mock方法只调用一次
# 如果调用超过一次则返回 AssertionError: Expected 'None' to have been called.
# 否则返回None
print(payment.pay.assert_called_once()) # 返回结果: None # c. assert_called_with() 断言mock方法已经携带某个参数调用了
# 如果没有携带某个参数调用, 那么会断言失败
print(payment.pay.assert_called_with("用户ID1")) # 返回结果: None # d. assert_called_once_with() 断言mock方法已经携带某个参数调用了一次
# 如果没有携带某个参数调用一次的话, 那么会断言失败
print(payment.pay.assert_called_once_with("用户ID1")) # 返回结果: None # e. assert_any_call() 有携带参数(有即可)调用过 # f. assert_not_called() 断言mock方法从未调用过
二、总结

- 本文介绍了Python处理Mock的常用操作
- 对于使用Python写mock代码有帮助
- 本文为原创, 如需转载请联系本人。有不足之处, 欢迎指点!
如果对python自动化测试、web自动化、接口自动化、移动端自动化、大型互联网架构技术、面试经验交流等等感兴趣的老铁们,可以关注我。我会不定期的发放免费的资料链接,这些资料都是从各个技术网站搜集、整理出来的,如果你有好的学习资料可以私聊发我,我会注明出处之后分享给大家。欢迎分享,欢迎评论,欢迎转发。需要资料的同学可以关注我的微头条获取资料链接。
使用Python来写mock代码(桩代码)-其实很简单的更多相关文章
- 写一个程序,统计自己C语言共写了多少行代码,Github基本操作
前言 在上一篇博客中,本人提到了自己的文件操作可以说是几乎没用过.现在想想,这也算是只在OJ上做题的一个弊端吧.虽然通过OJ做题是一个学习代码好手段,但其他方面也要多多涉猎才好,而不是说OJ用不到文件 ...
- 用python & bat写软件安装脚本 + HM NIS Edit自动生成软件安装脚本
2019-03-11更新:原来NSIS脚本也可以禁用64位文件操作重定向的! 1.在安装脚本的开始处定义 LIBRARY_X64. !include "MUI.nsh"!inclu ...
- 利用Python中的mock库对Python代码进行模拟测试
这篇文章主要介绍了利用Python中的mock库对Python代码进行模拟测试,mock库自从Python3.3依赖成为了Python的内置库,本文也等于介绍了该库的用法,需要的朋友可以参考下 ...
- 【转】利用Python中的mock库对Python代码进行模拟测试
出处 https://www.toptal.com/python/an-introduction-to-mocking-in-python http://www.oschina.net/transla ...
- python实现统计你一共写了多少行代码
程序员要保证一定的代码量就必须勤奋的敲代码,但怎么知道自己一共写了多少代码呢,笔者用python写了个简单的脚本,遍历所有的.java,.cpp,.c文件的行数,但是正如大家所知,java生成了许多代 ...
- (转)Python新手写出漂亮的爬虫代码2——从json获取信息
https://blog.csdn.net/weixin_36604953/article/details/78592943 Python新手写出漂亮的爬虫代码2——从json获取信息好久没有写关于爬 ...
- (转)Python新手写出漂亮的爬虫代码1——从html获取信息
https://blog.csdn.net/weixin_36604953/article/details/78156605 Python新手写出漂亮的爬虫代码1初到大数据学习圈子的同学可能对爬虫都有 ...
- Python写出LSTM-RNN的代码
0. 前言 本文翻译自博客: iamtrask.github.io ,这次翻译已经获得trask本人的同意与支持,在此特别感谢trask.本文属于作者一边学习一边翻译的作品,所以在用词.理论方面难免会 ...
- python怎么写可读性好的面向过程的长篇代码?
最近接受老代码,mmp的,说是重新运行运行起来,那还不如重写呢,因为有很多毛病,不能直接运行,pep8就不用妄想奢望了,还有包括语法错误问题和内存严重泄露的问题(运行几分钟后python.exe进程达 ...
随机推荐
- Jupyter notebook中的Cell and Line Magics
参考资料: https://www.jianshu.com/p/81ada9234788 https://my.oschina.net/u/2306127/blog/832510 首先,Cell an ...
- 一行代码让你的python运行速度提高100倍
转自:https://www.cnblogs.com/xihuineng/p/10630116.html 加上之后运行速度快了十倍,我的天呐. python一直被病垢运行速度太慢,但是实际上pytho ...
- VNC连接cnetos图形化界面
VNC连接cnetos图形化界面 Linux系统在服务器上一般都直接最小化安装,是不安装图形界面的,但是有时候,有一些特殊情况,需要使用图形界面,而下面就利用VNC来实现类似windows的远程桌面功 ...
- Docker Dockerfile 指令详解与实战案例
Dockerfile介绍及常用指令,包括FROM,RUN,还提及了 COPY,ADD,EXPOSE,WORKDIR等,其实 Dockerfile 功能很强大,它提供了十多个指令. Dockerfile ...
- vue入门的第一天:v-clock、v-text、v-html的使用
vue入门的第一天 1. v-cloak v-cloak可以解决插值闪烁问题(防止代码被人看见),在元素里加入 v-cloak即可 html: <p v-cloak>{{msg}}< ...
- Redis Wendows安装步骤
1.打开cmd命令提示符2.打开cmd如下图,输入Redis下载磁盘名称+“:” ,然后回车 3.如下图:输入"cd" 然后空格,后面是Redis的路径 回车 4.设置服务命令 ...
- Java Service Wrapper 浅谈
在实际开发过程中很多模块需要独立运行,他们并不会以web形式发布,传统的做法是将其压缩为jar包独立运行,这种形式简单易行也比较利于维护,但是 一旦服务器重启或出现异常时,程序往往无法自行修复或重启. ...
- 线程基础9-quene讲解
在学习Java 多线程并发开发过程中,了解到DelayQueue类的主要作用:是一个无界的BlockingQueue,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走. ...
- TCP端口扫描类型-隐蔽扫描和僵尸扫描
TCP扫描有三种类型:全连接扫描,隐蔽扫描,僵尸扫描.全连接扫描无须赘述. 隐蔽扫描:发送完SYN数据包以及收到SYN/ACK数据包后不再发送SCK数据包,由于没有建立完整的TCP连接,所以在目标主机 ...
- 吉比特&雷霆游戏--2020春招实习
笔试 题量较大,仅记了一些印象比较深刻的题. 题型为选择 + 填空(给C++代码填输出结果) + 编程 编程题不会太难,最难的就一道字符串的全排列(类似剑指offer第38题LeetCode链接)可以 ...