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

张小明 2026/1/13 7:14:42
广告机 东莞网站建设,深圳网络优化推广公司,建设网站属于什么费用,专门做羽毛球的网站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进行投诉反馈,一经查实,立即删除!

做响应网站wordpress更换网页logo

医疗AI安全防护:如何用PyRIT构建5大风险检测防线? 【免费下载链接】PyRIT 针对生成式人工智能系统的Python风险识别工具(PyRIT)是一款开源的自动化解决方案,它致力于赋能安全专家与机器学习开发工程师,使其能够主动检测并发现其构…

张小明 2026/1/4 22:03:12 网站建设

邢台路桥建设总公司网站世界杯比分

10 个降AI率工具,专科生必备!高效降AIGC推荐 AI降重工具:让论文更自然,更高效 随着AI技术的广泛应用,越来越多的学生在撰写论文时会使用AI辅助工具来提高效率。然而,随之而来的AIGC率偏高、查重率过高等问题…

张小明 2025/12/28 11:20:27 网站建设

怎样建网站宣传产品门户网站建设意见

如何快速实现APNS证书转换:面向开发者的完整指南 【免费下载链接】Knuff 项目地址: https://gitcode.com/gh_mirrors/knu/Knuff 苹果推送通知服务(APNS)开发中,证书管理是每个开发者必须面对的技术挑战。Knuff作为专业的A…

张小明 2025/12/28 11:20:30 网站建设

游戏娱乐网站建设在广州注册公司流程和费用

你是否曾经遇到过这样的困境?阅读了无数文章和书籍,却总是记不住关键内容;收藏了大量资料,却再也找不到需要的信息;脑子里闪过无数灵感,却无法有效组织成系统思考。这正是传统笔记工具的局限性所在&#xf…

张小明 2026/1/2 11:24:34 网站建设

黑龙江省生产建设兵团知青网站西餐厅网站建设的需求分析

1.数据类型介绍所谓类型,就是指相似的数据所拥有的共同特征,例如整型,浮点型,字符型等等。编译器只有知道了数据的类型,才能知道怎么操作数据。数据类型是编程语言中用于定义变量或函数可以存储或处理的数据的种类。1.…

张小明 2025/12/28 11:20:32 网站建设