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

news2024/12/23 9:54:26

什么是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包放在同一个文件夹下。比如博主的目录结构:

G:\学习资料\mock\moco-runner-0.11.1-standalone.jar
G:\学习资料\mock\config.json

[
    {
        "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 requests

class MocoTestApi(unittest.TestCase):
    def setUp(self):
        self.url = "http://localhost:12306"
    def test_moco_test_api(self):
        api = "/api/hello"
        url = self.url+api
        r = requests.get(url)
        self.assertEqual(r.status_code,200)
        self.assertEqual(r.text,"hello Savitar!")
    def tearDown(self):
        pass

if __name__ == '__main__':
    unittest.main()

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

学习安排上

如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

在这里插入图片描述

视频文档获取方式:

这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片进群即可自行领取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/64418.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习:在SAS中运行随机森林

为了在SAS中运行随机森林,我们必须使用PROC HPFOREST指定目标变量,并说明天气变量是“类别”还是“定量”。 最近我们被客户要求撰写关于随机森林的研究报告,包括一些图形和统计输出。为了进行此分析,我们使用了目标(…

Kamiya艾美捷抗胸腺嘧啶二聚体单抗(环丁烷嘧啶二聚体CPD)说明书

Kamiya艾美捷抗胸腺嘧啶二聚体单抗相关性质: 同义词:环丁烷嘧啶二聚体(CPD) 特异性:与由以下物质产生的胸腺嘧啶二聚体发生特异性反应:双链或单链DNA的紫外线照射。不与(6-4)照片产…

基于安卓的校园信息助手系统设计(Eclipse开发)

使用说明 1.1 软件的安装 将.api文件安装到iphone手机上,点击图标即可使用。 2.2 软件的使用 2.2.1 初始界面 软件安装好之后,在手机上显示初始界面。 2.2.2 程序主界面 主要有【课程表模块】、【新闻模块】、【学校概况模块】、【黄页模块】、【考生问答…

程序员的刻板印象,都是真的吗?

自从当了程序员,身边人对于我的职业一直好奇不断,刚好看到网上大家的刻板印象,整理几个最常见的问题,实事求是地解答一下! “青春饭、35岁危机、会修电脑、年薪10w、还有戴眼镜、格子衫、发际线高” 这些大家都在网上见…

8-事件组或标志

1-事件位(标志) 事件位用于指示事件是否发生。事件位通常称为事件标志。例如,一个应用程序可以: 定义一个标志,当为1时,表示消息已经接收并进行处理,当为0时,表示没有消息要处理。…

【王道计算机网络笔记】数据链路层-数据链路层的功能

文章目录数据链路层的研究思想数据链路层基本概念数据链路层功能概述为网络层提供服务链路管理帧定界、帧同步与透明传输(组帧)封装成帧透明传输组帧方法字符计数法字符填充法零比特填充法违规编码法流量控制停止-等待协议停等协议-无差错情况停等协议-有…

es搜索功能——DSL查询文档——DSL基本语法

1、查询的基本语法 # GET请求方式(固定写法) # indexName 要查询的索引库 # _search 查询语句的固定格式 GET /indexName/_search {"query": {"查询类型": {"查询条件": "条件值"}} } 2、无条件查询&#xff…

基础入门 - Spring Boot HelloWorld 第一节

需求&#xff1a;浏览器发送 /hello 请求&#xff0c;响应 Hello&#xff0c;Spring Boot 2 创建 maven 项目 boot-01-helloworld 如果想用Spring Boot来进行开发 需要在pom中创建父工程 <!-- Spring Boot 父工程 --> <parent> <groupId>org.springframew…

医疗健康产品展

​ 国内医疗健康行业的独角兽公司&#xff08;估值超10亿&#xff09; 下面&#xff0c;我们先看名列第二的企业&#xff1a; 微医&#xff08;平安医疗健康管理股份有限公司&#xff09; 基本信息 微医是国际领先的医疗健康科技平台&#xff0c;由廖杰远及其团队于2010年创建…

【GD32F427开发板试用】FreeRTOS移植工程

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;kings669669 前言 为了方便需要FreeRTOS&#xff0c;附上移植完毕的工程&#xff0c;方便大家后续的开发。 GitHub&#xff1a;https://githu…

【flutter电子木鱼】flutter 打包 android apk,记录配置签名的过程/调试的过程及flutter build apk放到手机上用。

目标&#xff1a; 目标通过这篇blog记录一下flutter打包android apk的过程&#xff0c;项目是参考以下链接的git仓库&#xff0c;然后自己重新创建了一个project。安卓应用市场的木鱼充斥着广告和付费体验极差&#xff0c;自己做一个还可以根据喜好做适应性调整&#xff0c;不…

图文版实现无头非循环单链表的增加和删除操作

hi&#xff0c;上一期已经给大家分享过代码版的链表的增删查改了&#xff0c;现在要对部分方法进行详细的介绍了 首先来说一说在任意位置的增加一个结点 废话不多说&#xff0c;开整 先来一幅图 加入已经有这样的链表了&#xff0c;现在要在 任意一个位置插入元素 我们先考…

zookeeper的安装与配置

1. 在root账户下创建zookeeper安装目录&#xff1a;mkdir /home/zookeeper 2. 进入zookeeper目录&#xff1a;cd /home/zookeeper 3. 通过wget命令下载zookeeper安装包&#xff1a;wget https://mirrors.bfsu.edu.cn/apache/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0…

以太网 VLAN(简介、MAC地址表与VLAN)

2.8.1 以太网 VLAN&#xff08;简介、MAC地址表与VLAN&#xff09; VLAN 虚拟局域网&#xff08;Virtual Local Area Network&#xff09;&#xff0c;通过VLAN划分不同的网络&#xff0c;能够有效提升网络的稳定性、缓解广播风暴带来的影响。 不同VLAN表示不同的虚拟局域网&am…

Unity与IOS⭐Unity接入IOS SDK的流程图

文章目录 🟥 整体思路🟧 如何复用SDK🟥 整体思路 1、先看一遍sdk的调用方法,将需要在unity中调用的方法记住给第二步使用。 2、新建一个Unity项目,写好去使用IOS SDK的方法。 3、导出Xcode工程,在Xcode中接入SDK。并根据SDK的文档,写好暴露给Unity的.h和.m文件。 …

[附源码]Python计算机毕业设计SSM焦作旅游网站(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]计算机毕业设计市场摊位管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

振弦采集模块的信号检测与分析计算

VM系列振弦采集模块的信号检测与分析计算 1、延时采样 如下图示&#xff0c; 振弦传感器钢弦起振后&#xff0c;信号强度在短时间内迅速达到最大&#xff0c;然后在钢弦张力及空气阻力作用下逐渐恢复静止。我们可将整个振动过程分为起振、调整、稳定、消失几个阶段&#xff0c…

第5章 R语言基础学习——金融资产收益率计算

5.1 收益率定义 5.1.1 常用收益率 5.1.2 红利收益率 数据中Adjusted一般就调整好了红利的收益率 5.1.3 超额收益率 与市场基准比较 5.2 股票类资产收益率计算 5.2.1 单个股票收益率计算 1. 从txt读取数据 2. 三种方法、计算股票百分比日收益率 3. 算术平均收益 4. 几何平…

电源常用LDO线性稳压IC大全!

LDO线性稳压IC FS7203 高输入电压&#xff1a;高达30V 输超低静态电流&#xff1a;0.8uA&#xff08;Typ&#xff09; 输出电压范围&#xff1a;1.5-12V 输出电压精度&#xff1a;2% 输出电流&#xff1a;IOUT150mA &#xff08; VIN4.8V&VOUT3.3V&#xff09; 短路电流&am…