当前位置: 首页 > news >正文

python技术栈之单元测试中mock的使用

什么是mock?

mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。

mock的作用

特别是开发过程中上下游未完成的工序导致当前无法测试,需要虚拟某些特定对象以便测试。

unittest是python内置的单元测试库,在做接口测试时,如果开发的接口未开发出来,我们如果想要测试接口联调,又不能干等着,这时可以使用unittest.mock模拟接口返回,进行接口测试。

举个栗子

示例:1、新增登录和获取个人信息两个接口,分别由A和B开发。2、A登录接口尚未开发完成,B获取个人信息接口已经开发完成。3、已知登录接口返回3种状态:登录成功,登录失败,登录异常。

场景源码:case.py

# -*-coding:utf-8 -*-def login():# 登录接口,尚未开发完成# 登录成功返回:{"result": "success", "message": "登录成功"}# 登录失败返回:{"result": "fail", "message":"账号或密码错误"}# 登录异常返回:{"code": "404", "message": "找不到页面"}# message返回失败原因passdef get_user_info():# 根据登录的结果success or fail,判断跳转到对应页面result = login()print(result)try:if result["result"] == "success":return "登录成功"elif result["result"] == "fail":return "登录失败"else:return "未知失败"except:return "服务端异常"

单元测试用例设计:

# -*-coding:utf-8 -*-
from unittest import mock
import unittest
import caseclass TestLogin(unittest.TestCase):# 单元测试用例def test_login_success(self):# 测试登录成功场景# mock一个支付成功的数据case.login = mock.Mock(return_value={"result": "success", "message": "登录成功"})# 根据支付结果测试页面跳转statues = case.get_user_info()self.assertEqual(statues, "登录成功")def test_login_fail(self):# 测试登录失败场景# mock一个登录失败的数据case.login = mock.Mock(return_value={"result": "fail", "message": "账号或密码错误"})# 根据登录结果测试页面跳转statues = case.get_user_info()self.assertEqual(statues, "登录失败")def test_login_fail2(self):# 测试登录失败场景# mock一个登录失败的数据case.login = mock.Mock(return_value={"result": "", "message": "账号或者密码为空"})# 根据登录结果测试页面跳转statues = case.get_user_info()self.assertEqual(statues, "未知失败")def test_login_error(self):# 测试登录异常场景# mock一个登录异常的数据case.login = mock.Mock(return_value={"code": "404", "message": "找不到页面"})# 根据登录结果测试页面跳转statues = case.get_user_info()self.assertEqual(statues, "服务端异常")if __name__ == "__main__":unittest.main()

执行unittest单元测试用例:

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

http://www.lryc.cn/news/249083.html

相关文章:

  • LeetCode(37)矩阵置零【矩阵】【中等】
  • [Python入门系列之十一]在windows上安装OpenCV
  • 论文阅读——SEEM
  • Python入门06布尔值
  • js查询详情接口控制执行时间的命令
  • Linux系统iptables
  • 每日一题 1410. HTML 实体解析器(中等,模拟)
  • Docker Swarm总结+service创建和部署、overlay网络以及Raft算法(2/5)
  • 对抗产品团队中的认知偏误:给产品经理的专家建议
  • element-ui表格无法横向拖动问题
  • 每天学习一点点之 MySQL TINYINT
  • 【数据集】未来不同情景下预测数据:如人口、土地利用等
  • TDA4VM EVM开发板调试笔记
  • 项目里边更换了同名的图片地址 / 图片没有及时更新 / 什么原因
  • RandomAccessFile学习笔记
  • 主流数据库类型总结
  • 程序员养生之道
  • CNN对 MNIST 数据库中的图像进行分类
  • HarmonyOS开发工具简介
  • 大量索引场景下 Easysearch 和 Elasticsearch 的吞吐量差异
  • 东明石化集团领导团队参访震坤行工业超市
  • Java常见的面试题(很基础那种)
  • MySQL处理并发访问和高负载的关键技术和策略
  • 软件测试jmeter基本使用
  • 一文讲透Python函数中的局部变量和全局变量
  • 【LeetCode】每日一题 2023_11_23 HTML 实体解析器(调库/打工)
  • Flask SocketIO 实现动态绘图
  • 软著项目推荐 深度学习 植物识别算法系统
  • 自动驾驶HWP 功能规范
  • Ubuntu 环境下 NFS 服务安装及配置使用