接口自动化测试之Mock

简介:   在某些时候,后端在开发接口的时候,处理逻辑非常复杂,在测试的时候,后端在未完成接口的情况下该如何去测试呢?  我们需要测试,但是有些请求又需要修改一下参数,或者改变一下request实现的方式,比如修改状态码,产生的图片要进行替换,或者是替换执行文件等

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

  我们需要测试,但是有些请求又需要修改一下参数,或者改变一下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.ershouyi.com') return res.status_code.encode('utf-8') if __name__=='__main__': request_lemonfix=mock.Mock(return_value="我已经替换了数据") print(request_lemonfix()) 结果: 我已经替换了二手数据 `

  基本功能 # 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.ershouyi.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.ershouyi.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

  举个例子来说:我们有一个简单的客户端实现,用来访问一个URL,当访问正常时,需要返回状态码200,不正常时,需要返回状态码404。首先,我们的客户端代码实现如下:import requestsdef send_request(url): r=requests.get(url) return r.status_codedef visit_ustack(): return send_request('http://www.ershouyi.com')# 外部模块调用visit_ustack()来访问ershouyi的官网。下面我们使用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进来,然后替换掉指定的对象就可以了。

  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 访问localhost:8801 就会显示 Hello, MocoMockRunner在工作中运用 构建一个复杂的链接规则[ { "request":{ "uri":"/monitorApplication/alert/confirm", "method":"PUT", "text":"{"id":"123"}" }, "response":{ "status":200, "json":{ "code":"0", "msg":"OK!", "data":null } } } ]

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

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

目录
相关文章
|
14天前
|
JSON JavaScript 测试技术
Postman接口测试工具详解
Postman接口测试工具详解
25 1
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
探索自动化测试的前沿:AI与软件测试的融合
在数字化浪潮中,软件测试作为确保产品质量的关键步骤,正迎来一场革命。本文将深入探讨人工智能(AI)如何革新传统软件测试流程,通过具体案例分析,揭示AI技术在提高测试效率、减少人为错误以及预测潜在缺陷方面的潜力。我们将一窥AI在自动化测试中的应用现状,并展望其对未来软件质量保障的影响。
|
4天前
|
前端开发 数据管理 测试技术
前端自动化测试
前端自动化测试
|
7天前
|
JavaScript 前端开发 测试技术
自动化测试在API测试中的深度应用与实践
【7月更文挑战第8天】自动化测试在API测试中的应用极大地提高了测试效率和质量,为软件的快速迭代和持续交付提供了有力保障。通过合理选择测试工具、制定清晰的测试计划并遵循最佳实践,我们可以充分发挥自动化测试的优势,为软件产品的稳定性和可靠性保驾护航。
|
4天前
|
XML JSON 测试技术
Postman接口测试工具详解
📚 Postman全攻略:API测试神器!📚 发送HTTP请求,管理集合,写测试脚本,集成CI/CD。从安装配置到环境变量、断言、数据驱动测试,一步步教你如何高效测试RESTful API。实战案例包含GET、POST、PUT、DELETE请求。用Newman在命令行跑集合,自动化测试不发愁!👉 [洛秋小站](https://www.luoqiu.site/) 学更多!🚀
15 1
|
5天前
|
前端开发
什么是 Mock 测试?
Mock 是在前后端分离开发中,用于模拟后端数据的工具,让前端能提前开发而无需等待真实接口。它的重要性在于加速协同开发,避免因数据延迟导致的阻塞。通过工具如 Apifox,可以创建请求,设定 Mock 参数和测试脚本,进行 Mock 测试以确保数据符合预期。了解 Mock.js 语法有助于更好地进行 Mock 测试。
|
11天前
|
数据采集 测试技术
常见测试测量接口的比较:PXI、PXIe、PCI、VXI、GPIB、USB
常见测试测量接口的比较:PXI、PXIe、PCI、VXI、GPIB、USB
14 2
|
13天前
|
测试技术 API 持续交付
【Python自动化测试】文章探讨了Python在测试领域的关键作用,分为三部分
【7月更文挑战第2天】【Python自动化测试】文章探讨了Python在测试领域的关键作用,分为三部分:1) 自动化测试的重要性与Python的易用性、库支持、跨平台和社区优势;2) Unittest作为标准测试框架的基础用法,及Pytest的灵活性与强大功能;3) 实践中包括Selenium的Web UI测试、Requests的API测试,强调测试隔离、持续集成等最佳实践。Python助力高效稳定的软件测试。
24 2
|
5天前
|
JSON 测试技术 数据格式
postman接口测试工具详解
postman接口测试工具详解
|
10天前
|
敏捷开发 监控 Devops
探索自动化测试的利剑:持续集成与持续部署(CI/CD)在软件测试中的应用
在软件开发的快速迭代中,传统的手动测试方法已经无法满足效率和质量的双重需求。本文将深入探讨如何通过实施持续集成(CI)和持续部署(CD)来优化自动化测试流程,提升软件交付速度及质量保证水平。我们将分析CI/CD在测试中的关键作用,并通过实际案例数据展示其对提高测试覆盖率、缩短反馈周期和增强开发协作的积极影响。
30 0