广告机 东莞网站建设深圳网络优化推广公司

张小明 2026/1/11 15:35:07
广告机 东莞网站建设,深圳网络优化推广公司,建设网站属于什么费用,专门做羽毛球的网站1. 背景 在实际产品开发过程中#xff0c;某个服务或前端依赖一个服务接口#xff0c;该接口可能依赖多个底层服务或模块#xff0c;或第三方接口#xff0c;比如说服务 A 依赖服务B#xff0c;服务B又依赖服务 C 这种依赖的问题会导致原本的需求目的是要验证服务A…1. 背景在实际产品开发过程中某个服务或前端依赖一个服务接口该接口可能依赖多个底层服务或模块或第三方接口比如说服务 A 依赖服务B服务B又依赖服务 C这种依赖的问题会导致原本的需求目的是要验证服务A但由于所依赖的服务B或者服务C不稳定或者未开发完成导致工作无法正常开展。那作为测试工程师面对这样的情形我们该怎么办呢解决这类问题的核心的思路引入依赖服务替身更通俗的叫法引入Mock服务。今天就结合unittest框架给大家分享一些关于Mock的一些常见使用。2.Mock是什么可能还有些读者之前并没有接触过Mock不清楚Mock是个啥。Mock简单来理解就是在测试过程中对于某些不容易构造或者不容易获取的对象用一个虚拟的对象来创建以便测试。而这个虚拟的对象就是mock对象。mock对象就是真实对象在调试期间的代替品。有时也将Mock服务称之为测试服务替身或者测试服务档板。3. Mock能做什么就Mock功能而言本身适用场景较多但在实际项目中引入Mock常用来解决的几类概括起来主要有接口间的相互依赖单元测试第三方接口调用1.前后端联调比如你是一个前端页面开发现在需要开发一个功能下一个订单支付页面的接口根据支付结果支付成功展示支付成功页支付失败展示支付失败页。要完成此功能你需要调用后端的接口根据返回给你的结果来展示不同的页面。此时后端接口还没开发好作为一个前端开发总不能等别人开发好了你再开发那你只有加班的命了。为了同步开发完成任务此时你可以根据接口文档的规定把接口的地址和入参传过去然后自己mock接口的不同返回界面来完成前端的开发任务。2.单元测试由于单元测试仅针对当前单元进行测试这就要求所有的内部或者外部依赖都应该是稳定的采用mock的方法模拟跟本单元依赖的其他单元可以将测试重点放在当前单元功能排除外界因素干扰提升测试精准度。3.第三方接口依赖在做接口自动化的时候有时候需要调用第三方的接口但是别人公司的接口服务不受你的控制有可能别人提供的测试环境今天服务给你开着别人就关掉了给自动化接口测试带来很多的麻烦此时就可以通过mock来模拟接口的返回数据比如模拟各种第三方异常时的返回。4. Mock实现方式Mock虽然是作为依赖服务的替身但并不需要原原本本去构造实现一个完整的服务逻辑比如现在有一个A服务依赖B服务需要通过Mock来替换B服务做一个假的B服务替身。那么我们做一个 Mock 服务其实就是做了一个简单的服务 B它不需要实现原有服务 B 负载的处理逻辑只要能按服务A需要服务B返回的处理逻辑给出对应返回数据就可以了。目前常见服务或接口协议主要两种一种是RPC另一种是HTTP/HTTPSmock原理都类似要么是修改原服务地址为Mock服务地址要么是拦截原服务的请求Mock返回值总之就是构造一个假的服务替代原有服务。5. Mock市面上常见的解决方案如果你不想自己动手构建一套Mock解决方案市面上也提供了很多现存的Mock方案。常用的有EasyMock、Mockito、WireMock、JMockit、Mock、Moco。如果你团队技术基础相对比较薄弱推荐你看看Moco这个方案官网如下https://github.com/dreamhead/moco/接下来重点介绍Python系下Mock方案的使用。6. Python下unittest.mock使用unittest.mock是一个用于在Python中进行单元测试的库顾名思义这个库的主要功能是模拟一些东西。它的主要功能是使用mock对象替代掉指定的Python对象以达到模拟对象的行为。需要注意的是在Python2.x版本中Mock需要单独安装pip install -U mock从Python 3.3以后的版本mock已经合并到unittest模块中了是unittest单元测试的一部分直接导入过来就行from unittest import mock官方文档https://docs.python.org/dev/library/unittest.mock.htmlunittest.mock模块中最常用的是Mock类。Mock类库是一个专门用于在unittest过程中制作伪造和修改篡改测试对象的类库避免这些对象在单元测试过程中依赖外部资源网络资源数据库连接其它服务以及耗时过长等案例如下场景支付是一个独立的接口由其它开发提供根据支付的接口返回状态去显示失败还是成功这个是你需要实现的功能代码存放在pay.py脚本中:# !/usr/bin/python3 # -*- coding: utf-8 -*- # Author : Mike Zhou # Email : 111 # File : pay.py def zhifu(): 假设这里是一个支付的功能,未开发完 支付成功返回{result: success, msg:支付成功} 支付失败返回{result: fail, msg:余额不足} pass def zhifu_statues(): 根据支付的结果success or fail判断跳转到对应页面 result zhifu() try: if result[result] success: return 支付成功 elif result[result] fail: return 支付失败 else: return 未知错误异常 except: return Error, 服务端返回异常!在zhifu_statues方法中依赖了zhifu方法但由于zhifu支付方法的接口是由另外一个同事开发正常情况下你同事开发的进度你是无法控制的需要等他开发完了你才能进行联调你所负责的zhifu_statues接口因此我们可以通过引入Mock来解决这个问题。引入mock后单元测试用例代码# !/usr/bin/python3 # -*- coding: utf-8 -*- # Author : Mike Zhou # Email : 111 import unittest from unittest import mock import pay class TestZhifuStatues(unittest.TestCase): 单元测试用例 def test_01(self): 测试支付成功场景 # mock一个支付成功的数据 pay.zhifu mock.Mock(return_value{result: success, msg:支付成功}) # 根据支付结果测试页面跳转 statues pay.zhifu_statues() print(statues) self.assertEqual(statues, 支付成功) def test_02(self): 测试支付失败场景 # mock一个支付失败的数据 pay.zhifu mock.Mock(return_value{result: fail, msg: 余额不足}) # 根据支付结果测试页面跳转 statues pay.zhifu_statues() print(statues) self.assertEqual(statues, 支付失败) if __name__ __main__: unittest.main()上述代码引入Mock后我们就可以顺利完成对支付成功和支付异常两类场景的验证工作。实际你可以补充更多mock中还有另一种实现方式通过patch装饰器的使用,patch作为函数装饰器为您创建模拟并将其传递到装饰函数。用mock.patch实现如下# !/usr/bin/python3 # -*- coding: utf-8 -*- # Author : Mike Zhou # Email : 111 import unittest from unittest import mock import pay class TestZhifuStatues(unittest.TestCase): 单元测试用例 mock.patch(pay.zhifu) def test_001(self, mock_zhifu): 测试支付成功场景 # 方法一mock一个支付成功的数据 # pay.zhifu mock.Mock(return_value{result: success, msg:支付成功}) # print(pay.zhifu()) # 方法二mock.path装饰器模拟返回结果 mock_zhifu.return_value {result: success, msg:支付成功} # # 根据支付结果测试页面跳转 statues pay.zhifu_statues() print(statues) self.assertEqual(statues, 支付成功) mock.patch(pay.zhifu) def test_002(self, mock_zhifu): 测试支付失败场景 # mock一个支付失败的数据 mock_zhifu.return_value {result: fail, msg: 余额不足} # 根据支付结果测试页面跳转 statues pay.zhifu_statues() self.assertEqual(statues, 支付失败) if __name__ __main__: unittest.main()还有更多的使用技巧篇符有限今天就先分享到这如果觉得有用欢迎关注最后作为一位过来人也是希望大家少走一些弯路在这里我给大家分享一些软件测试的学习资料和我花了3个月整理的软件测试自学全栈这些资料希望能给你前进的路上带来帮助。​视频文档获取方式这份文档和视频资料对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴我走过了最艰难的路程希望也能帮助到你以上均可以分享点下方小卡片即可自行领取。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

钦州建站哪家好自建网站支付问题

微信网页版无法访问?3分钟解决你的所有烦恼! 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 还在为微信网页版频繁报错而头疼吗…

张小明 2025/12/31 19:29:14 网站建设

竞价网站推广经典软文案例分析

PyScaffold终极指南:3分钟学会Python项目模板搭建 【免费下载链接】pyscaffold 🛠 Python project template generator with batteries included 项目地址: https://gitcode.com/gh_mirrors/py/pyscaffold 想要快速创建符合Python最佳实践的标准化…

张小明 2026/1/1 13:41:06 网站建设

asp网站源码做网站需要有公司吗

Buildozer终极指南:快速实现Python跨平台应用打包 【免费下载链接】buildozer Generic Python packager for Android and iOS 项目地址: https://gitcode.com/gh_mirrors/bu/buildozer Buildozer作为一款功能强大的自动化打包工具,能够帮助开发者…

张小明 2026/1/1 14:46:40 网站建设

小企业网站建设和管理镇海区住房和建设网站

量子物理中的跃迁速率与寿命:从理论到实践 1. 引言 在量子物理领域,激发态的描述通常涉及到寿命和跃迁概率这两个重要概念。寿命是衡量激发态稳定性的关键指标,而跃迁概率则描述了原子在不同能级之间跃迁的可能性。本文将深入探讨氢原子巴尔末系的发射过程,详细计算相关的…

张小明 2026/1/2 5:18:22 网站建设

网站导航页面设计百度人气榜

摘要:本文聚焦粉丝社群策划与实施领域,深入探讨链动21模式、AI智能名片与S2B2C商城小程序在其中的应用。通过分析这些技术与模式的特点和优势,结合实际案例,提出一套完整的粉丝社群策划与实施方案,旨在为企业在粉丝社群…

张小明 2026/1/2 3:21:20 网站建设