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

接口自动化测试:mock server之Moco工具

什么是mock server

mock:英文可以翻译为模仿的,mock server是我们用来解除依赖(耦合),假装实现的技术,比如说,前端需要使用某些api进行调试,但是服务端并没有开发完成这些api,那么前端的工作就被服务端阻塞了,那么就可以使用mock server假装实现这些api,能够返回特定的数据,帮助前端进行页面渲染,当然我们为了方便可以需要与服务端进行约定,约定接口的内容是什么。

restful接口规范

转接阮一峰老师的博客—RESTful API 设计指南:http://www.ruanyifeng.com/blog/2014/05/restful_api.html

Moco-约定uri(一)

moco工具是在github开源的一个项目,可以使用moco工具搭一个简单的mock server方便我们进行调试,github地址:https://github.com/dreamhead/moco,下载下来的是一个jar包,目前的版本是0.11.1,首先我们要编写一个config文件,把我们需要“模拟”的请求和响应写入这个配置文件,配置文件是json格式的,接下来我们写一个比较简单的请求,访问 localhost:12306/hello 接口,返回一个纯文本“moco”,moco工具约定了12306端口,不必纠结,就跟tomcat约定8080端口类似,config.json文件如下,而且json文件要与moco的jar包放在同一个文件夹下。比如博主的目录结构:

[{"request":{"uri":"/hello"},"response":{"text":"moco"}}
]

配置文件比较简单,我们请求接口,返回一个纯文本,启动指令:

>java -jar moco-runner-0.11.1-standalone.jar http -p 12306 -c config.json

这里的http就是http协议, -p 12306 绑定端口号12306, -c config.json读config文件
在这里插入图片描述

看到以上的表现,就说明moco已经顺利启动了,我们访问localhost:12306/hello 看到结果如下就说明mock server顺利返回了我们约定的数据”moco”
在这里插入图片描述

Moco-约定uri(二)

修改config文件如下,注意这里moco工具能实时监测到json配置文件的变化,并自行重启server
在这里插入图片描述

[{"request":{"uri":"/"},"response":{"text":"welcome to Moco"}},{"request":{"uri":"/hello"},"response":{"text":"moco"}}
]

 接下来分别访问localhost:12306和12306:12306/hello,结果如下:
在这里插入图片描述
在这里插入图片描述

Moco-约定get请求

[{"request":{"method":"get","uri":"/get"},"response":{"text":"moco get"}}
]

 Moco-约定post请求

[{"request":{"method":"post","uri":"/post"},"response":{"text":"moco post"}}
]

Moco-约定请求参数

[{"request":{"method":"get","uri":"/get","queries":{"id":"12306","name":"moco"}},"response":{"text":"moco queries"}}
]

在这里插入图片描述

Moco-约定请求body必须为json格式

[{"request":{"method":"post","uri":"/post","text":{"json":"{\"id\":\"12306\",\"name\":\"moco\"}"}},"response":{"status":"200"}}
]

 Moco-约定请求头部

[{"request":{"method":"post","uri":"/post","headers":{"content-type":"application/json","Connection":"keep-alive","Content-Encoding":"gzip"}},"response":{"status":"200"}}
]

Moco-约定返回内容

前面已经看到了response的集中返回内容如text,和status,下面展示一下返回文件和设置文件格式等

[{"request":{"method":"post","uri":"/post",},"response":{"file":"data.js","charset":"GBK","version":"HTTP/1.0"}}
]

Moco-约定返回状态码
见上述的几个json,里面已经包含了返回状态码的使用方式

Moco-在单元测试中的使用(以Python为例)

[{"request":{"method":"get","uri":"/api/hello"},"response":{"text":"hello Savitar!","status":200}}
]

这里模拟一个get请求,返回纯文本“hello Savitar!”和状态码200,先在浏览器访问localhost:12306/api/hello 结果如下图:

在这里插入图片描述
说明接口返回没问题,接下来使用Python requests+unittest写一个简单的接口测试用例

#coding=utf-8
'''
@author=Savitar
'''
import unittest
import requestsclass MocoTestApi(unittest.TestCase):def setUp(self):self.url = "http://localhost:12306"def test_moco_test_api(self):api = "/api/hello"url = self.url+apir = requests.get(url)self.assertEqual(r.status_code,200)self.assertEqual(r.text,"hello Savitar!")def tearDown(self):passif __name__ == '__main__':unittest.main()

 运行结果如下:
在这里插入图片描述
上述代码实现了访问接口,并通过断言返回的状态码和返回内容,断言成功,说明接口测试通过

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

在这里插入图片描述

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!     

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

相关文章:

  • 用python从零开始做一个最简单的小说爬虫带GUI界面(2/3)
  • CEF 缓存处理:清理缓存、禁用缓存、忽略缓存
  • Android 系统桌面 App —— Launcher 开发(1)
  • 一个程序员的工作日记--每天就干两件事,一年后让别人刮目相看
  • Linux虚拟机安装(Ubuntu 20)
  • 1.6 服务器处理客户端请求
  • 火山引擎发布自研视频编解码芯片 压缩效率提升30%
  • 从头开始:将新项目上传至Git仓库的简易指南
  • 数据库的增量备份与差异备份
  • 视频云存储/安防监控视频智能分析网关V3:占道经营功能详解
  • 卡尔曼滤波学习笔记
  • NLP预训练模型超大规模探索
  • OpenCV实战系列总目录(更新中)
  • 《华为认证》6to4自动隧道
  • Java课题笔记~Element UI
  • [论文笔记]ON LAYER NORMALIZATION IN THE TRANSFORMER ARCHITECTURE
  • h5逻辑_调用手机拨号功能
  • 字节一面:post为什么会发送两次请求?
  • ROS2 学习(五)接口,动作
  • Vue学习之Vue组件的核心概念
  • Web自动化测试-Selenium语法入门到精通
  • 封装axios及简单应用举例
  • Django(3)-创建第一个数据模型-ORM映射
  • C++ vector
  • Spring+redis集成redis缓存
  • 聊聊springboot的启动事件
  • jmeter HTTP请求默认值
  • CSS选择器-CSS3属性
  • 线性代数的学习和整理8:行列式相关
  • java+springboot+mysql农业园区管理系统