接口自动化测试之Mock

1.Mock实现原理和实现机制

在某些时候,后端在开发接口的时候,处理逻辑非常复杂,在测试的时候,后端在未完成接口的情况下该如何去测试呢?

我们需要测试,但是有些请求又需要修改一下参数,或者改变一下request实现的方式,比如修改状态码,产生的图片要进行替换,或者是替换执行文件等

Mock介绍

  • Mock这个词在英语中有模拟的这个意思,因此我们可以猜测出这个库的主要功能是模拟一些东西。准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为。
  • 在项目的单元测试过程中,会遇到:
  • 1、接口的依赖
  • 2、外部接口调用
  • 3、测试环境非常复杂
  • 单元测试应该只针对当前单元进行测试, 所有的内部或外部的依赖应该是稳定的, 已经在别处进行测试过的.使用mock 就可以对外部依赖组件实现进行模拟并且替换掉, 从而使得单元测试将焦点只放在当前的单元功能。
  • 解决测试依赖
  • 例如,我们要测试A模块,然后A模块依赖于B模块的调用。但是,由于B模块的改变,导致了A模块返回结果的改变,从而使A模块的测试用例失败。其实,对于A模块,以及A模块的用例来说,并没有变化,不应该失败才对。
  • 这个时候就是mock发挥作用的时候了。通过mock模拟掉影响A模块的部分(B模块)。至于mock掉的部分(B模块)应该由其它用例来测试。
  • 例子
  • import requests from unittest import mock def request_lemonfix(): “”” :return: “”” res = requests.get(‘http://www.baidu.com’) return res.status_code.encode(‘utf-8’) if __name__ == ‘__main__’: request_lemonfix = mock.Mock(return_value=”我已经替换了数据”) print(request_lemonfix()) 结果: 我已经替换了数据 “`

2.简单的案例实现mock

  • 基本功能 # function.py def multiply(x, y): return x * y def add_and_multiply(x, y): addition = x + y multiple = multiply(x, y) # 回调函数 return (addition, multiple)
  • 针对 add_and_multiply()函数编写测试用例

import mockimport requestsimport unittesturl = “www.baidu.com/login”data = { “user_id”: “001”, “password”: “caichen”}def post_request(url, data): “””登陆百度账号””” res = requests.post(url, data).json() return resclass TestLogin(unittest.TestCase): “””单元测试””” def setUp(self) -> None: print(“case开始执行”) def tearDown(self) -> None: print(“case执行结束”) def test_01(self): “””模拟数据判断是否正确””” url = “www.baidu.com/login/tieba” data = { “user_id”: “001” } sucess_test = mock.Mock(return_value=data) post_request = sucess_test res = post_request self.assertEqual(“654321”, res()) # self.assertEqual({‘user_id’: ‘001’},res())if __name__ == ‘__main__’: unittest.main()# 错误结果Fcase开始执行======================================================================case执行结束FAIL: test_01 (__main__.TestLogin)模拟数据判断是否正确———————————————————————-Traceback (most recent call last): File “C:/Users/x1c/Desktop/untitled/mocktest.py”, line 35, in test_01 self.assertEqual(“654321”, res())AssertionError: ‘654321’ != {‘user_id’: ‘001’}———————————————————————-Ran 1 test in 0.001sFAILED (failures=1)# 正常结果case开始执行.case执行结束———————————————————————-Ran 1 test in 0.000sOK

3.mock实现get数据模拟

举个例子来说:我们有一个简单的客户端实现,用来访问一个URL,当访问正常时,需要返回状态码200,不正常时,需要返回状态码404。首先,我们的客户端代码实现如下:“`import requestsdef send_request(url): r = requests.get(url) return r.status_codedef visit_ustack(): return send_request(‘http://www.ustack.com’)“`# 外部模块调用visit_ustack()来访问baidu的官网。下面我们使用mock对象在单元测试中分别测试访问正常和访问不正常的情况。“`import unittestimport mockimport clientclass TestClient(unittest.TestCase):def test_success_request(self): success_send = mock.Mock(return_value=’200′) client.send_request = success_send self.assertEqual(client.visit_ustack(), ‘200’)def test_fail_request(self): fail_send = mock.Mock(return_value=’404′) client.send_request = fail_send self.assertEqual(client.visit_ustack(), ‘404’) “`

1.找到要替换的对象:我们需要测试的是visit_ustack这个函数,那么我们需要替换掉send_request这个函数。

2.实例化Mock类得到一个mock对象,并且设置这个mock对象的行为。在成功测试中,我们设置mock对象的返回值为字符串“200”,在失败测试中,我们设置mock对象的返回值为字符串”404″。

3.使用这个mock对象替换掉我们想替换的对象。我们替换掉了client.send_request

4.写测试代码。我们调用client.visit_ustack(),并且期望它的返回值和我们预设的一样。

上面这个就是使用mock对象的基本步骤了。在上面的例子中我们替换了自己写的模块的对象,其实也可以替换标准库和第三方模块的对象,方法是一样的:先import进来,然后替换掉指定的对象就可以了。

4.Mock和mockrunner的区别

Mockrunner用在J2EE环境中进行应用程序的模拟测试。它不仅支持Struts actions,servlets,过滤器和标签类,还包括一个JDBC和一个JMS测试框架,可以用于测试基于EJB的应用程序。

Mockrunner扩展了JUnit并模拟了必要的行为,而无需调用实际的基础结构。它不需要正在运行的应用程序服务器或数据库。此外,它不会调用web容器或Struts ActionServlet。它非常快速,使用户可以在测试的所有步骤中操纵所有涉及的类和模拟对象。它可以用于为基于J2EE的应用程序编写非常复杂的单元测试,而不会产生任何开销。Mockrunner不支持任何类型的容器内测试。

Mockrunner不会读取任何配置文件,例如web.xml或struts-config.xml。您可以使用Mockrunner API指定所有参数。因此,可以将servlet,过滤器,标签和Struts动作作为可重用组件进行测试,而不管您在一个或另一个应用程序中使用的设置如何。无法测试配置文件中的定义。如果要这样做,可以将StrutsTestCase用于基于Struts的应用程序或Cactus。

Mockrunner支持Java版本从1.3到1.6以及J2EE 1.3,J2EE 1.4和JavaEE5。尚不支持EJB 3.0。Mockrunner支持Struts版本1.1、1.2和1.3。

下载地址:Mockrunner download | SourceForge.net

  • mockrunner必须配置java环境
  • 使用命令启动:java -jar moco-runner-0.12.0-standalone.jar http -p 8801 -c config.json
  • 配置config.json文件就可以进行mock数据
  • [ { “response” : { “text” : “Hello, Moco” } } ] “` 使用命令启动: java -jar moco-runner-0.12.0-standalone.jar http -p 8801 -c config.json 访问http://localhost:8801 就会显示 Hello, Moco
  • MockRunner在工作中运用 构建一个复杂的链接规则
  • [ { “request”:{ “uri”:”/monitorApplication/alert/confirm”, “method”:”PUT”, “text”:”{“id”:”123″}” }, “response”:{ “status”:200, “json”:{ “code”:”0″, “msg”:”OK!”, “data”:null } } } ]

5.接口测试基础面试

  • 项目中如何做接口测试?
  • 通过测试工具…进行参数、请求参数、返回参数效验
  • 接口开发过程中如何进行case编写
  • 规则文档熟悉通过mock校验格式
  • 如何理解Mock
  • 模拟返回参数,模拟接口
  • Mock在工作中的运行?
  • 帮助前端实现正常开发

好了各位,以上就是这篇文章的全部内容了,能看到这里人啊,都是人才。

最后:【可能给你带来帮助的教程】软件测试最新自学教程

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
(0)
用户投稿
上一篇 2022年7月4日
下一篇 2022年7月4日

相关推荐

  • 小米圈铁耳机pro测评(小米圈铁耳机pro音质怎么样)

    【CNMO评测】每天上下班乘坐拥挤的地铁可能是当下很多年轻人的生活常态,尤其是在北上广深这样的一线城市,与其说是坐地铁,倒不如直截了当的称其为站地铁,甚至有一个落脚的地方就已经是谢…

    2022年4月18日
  • 大家看看怎么样

    这个数据不知道合理不,早上6点起来的,到晚上9点多,15个小时左右,第一次满级。

    2022年7月4日
  • Pandas GroupBy 深度总结

    今天,我们将探讨如何在 Python 的 Pandas 库中创建 GroupBy 对象以及该对象的工作原理。我们将详细了解分组过程的每个步骤,可以将哪些方法应用于 GroupBy …

    2022年6月12日
  • 对话框管理器第三章:创建控件

    和上一篇创建框架窗口相比,创建控件的工作要轻松很多,信不信由你。在对话框模板中定义的每一个控件,其对应的子窗口将会被创建。控件的大小和位置在模板中是以DLU为单位来描述的,所以,理…

    2022年7月28日
  • 消息称特斯拉自动驾驶部200名门员工被解雇

    三言财经 6月29消息,据凤凰网科技报道,有知情人士称,特斯拉公司关闭了加州一处设施,并裁掉了数百名自动辅助驾驶系统(Autopilot)团队的员工。 报道称,受影响的员工在周二收…

    2022年7月1日
  • 永劫版轮子妈?新武器双刀魂玉效果看呆玩家:怎么在LOL里不好使

    近日,24工作室打造的武侠动作游戏《永劫无间》在测试服上线了新武器双刀,这把武器早在今年的愚人节就以恶搞“双马尾”的形式出现在了玩家们的面前,引起了无数永劫玩家的兴趣。如今终于可以…

    2022年7月1日
  • 慧眼看数界 – 企业如何玩转“数据”?

    后疫情时代,数字化撑起了经济复苏的半边天,“数字化”响应先锋们正在通过数字技术为各行各业的稳定运行加速赋能。我们的经济也正经历着一种广泛的数字化,然而,这种广泛的数字化尚处于初级阶…

    2022年9月21日
  • 什么是薛定谔的猫?

    薛定谔的猫是奥地利物理学家埃尔温-薛定谔在1935年做出的一个思想实验。 准备一个带盖子的密封盒子,把一只猫放在这个盒子里, 盒子里还有其他少量的放射性物质。 放射性物质有50%的…

    2022年8月6日
  • 楼市开启“恐吓式”模式,但这3个消息出现,说明房价已定

    楼市开启“恐吓式”模式,但这3个消息出现,说明房价已定! 7月的最新楼市数据出来了,从整体上来看,数据都在下降,其中变化最明显的就是二线城市,环比下跌了45.8%,同时下降了44.…

    2022年8月8日
  • 智能共享自动售货机有哪些优势?为什么广受欢迎

    智能共享自动售卖机是将传统货币自动售卖机结合互联网移动支付实现与顾客交易的共享智能设备,能协助顾客购买例如零食、饮料、酒类、香烟及彩票等产品。不受时间、地点的限制,能节省人力、方便…

    2022年6月24日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息