MOCK玩的体无完肤

easy-mock功能介绍(简单了解下就可以)

支持接口代理

支持快捷键操作

支持协同编辑

支持团队项目

支持 RESTful

支持 Swagger | OpenAPI Specification (1.2 & 2.0 & 3.0)

基于 Swagger 快速创建项目

支持显示接口入参与返回值

支持显示实体类

支持灵活性与扩展性更高的响应式数据开发

支持自定义响应配置(例:status/headers/cookies)

支持 Mock.js 语法

支持 restc 方式的接口预览

easy-mock本地部署

1、环境准备

成功安装 Node.js(>= v8.9)& MongoDB(>= v3.4)& Redis(>= v4.0)

(此部分可以百度,安装过程中会有坑,遇到问题去百度,基本上都能解决)

六种方式:

 

2、mockjs语法

地址:http://mockjs.com/examples.html

响应式数据

当固定一个请求参数是A的时候,返回特殊的值,不是A的时候,可以返回任意值,这时候怎么处理那?

我们可以在 数据编辑器 中,为某个属性指定一个 Function。在 Function 中,我们提供了 _req 对象,这使得我们可以通过请求对象编写逻辑,实现响应式数据,如图所示。

结果:

举例:获取body数据

编写mockjs脚本

备注:针对POST的body测试,需要添加headers,不然只能通过json的方式添加请求参数

Content-Type: application/x-www-form-urlencoded

body:phonenumber=1223333&address=北京市

status=Ture

结果展示:

如果生成数据的时间 超过1s,系统将会返回一个 timed out 的错误信息,此时应该检查代码是否出现了 异步操作 或 死循环。

自定义响应

当定义的数据结构中包含 _res 字段的时候,会进入一个特殊逻辑,可以给返回的请求添加一些定制信息。

举例:

脚本:

结果:

脚本:

结果:

fiddler和easymock结合(移动端调试)

首先利用fiddler抓包,抓到我们要测试的接口,这里以:https://qc-api.jianlc.com/app/v5/sendAuthCode?为例。

此时通过app再次操作,再次抓到此接口,返回值就是easymock的接口了

Python mock

cd /opt

mkdir mockserver

http://central.maven.org/maven2/com/github/dreamhead/moco-runner/0.12.0/moco-runner-0.12.0-standalone.jar

下载:moco-runner-0.12.0-standalone.jar

touch foo.json

[

{

"request":

{

"method":"post",

"uri":"/login",

"json":

{

"username":"admin",

"password":"admin",

"roleID":22

}

},

"response":

{

"json":

{

"username":"wuya",

"userID":22,

"token":"asdgfhh32456asfgrsfss"

}

}

}

]

保存

执行命令:java -jar moco-runner-0.12.0-standalone.jar http -p 12306 -c foo.json

在Fiddler/postman校验接口

nginx配置

检查nginx配置是否正确,nginx路径下,执行nginx -t -c /nginx-1.14.0/conf/nginx.conf

nginx -s reload重新加载配置文件

简理财配置路径:/etc/nginx/jianlc443.d

vim qa-api.jianlc.com443.con

配置完成后,执行

nginx -t

nginx -s reload

自己写python mock服务

#!/usr/bin/env python
#coding=utf-8
__date__ = '2018/8/2 18:06'
from flask import Flask,g
from flask import request, Response, jsonify
import random
import string

app = Flask(__name__)


@app.before_request
def before_request():
    print ('before request started')
    print (request.url)


@app.before_request
def before_request2():
    print ('before request started 2')
    print (request.url)
    g.name = "SampleApp"


@app.after_request
def after_request(response):
    print ('after request finished')
    print (request.url)
    response.headers['key'] = 'value'
    return response


@app.teardown_request
def teardown_request(exception):
    print ('teardown request')
    print (request.url)

#返回固定的字符串
def id_generator(size=20,chars=string.digits + string.ascii_letters):
    """
    定义了一个
    """

    str_ = ""

    for i in range(size):
        i = random.choice(chars)
        str_ += str(i)

    return str_

#定义返回值
def response():
    content = "{\"result\": \"%s\", \"data\": \"%s\"}" % (id_generator(4), id_generator(9))
    resp = Response(content)
    resp.headers["Access-Control-Origin"] = '*'

    return resp


@app.route("/")  # 路由
def index():
    return "welcome!"


# http get
@app.route("/query", methods=["GET"])
def query():

    pass

    return jsonify(
        username=id_generator(4),
        password=id_generator(9),
    )


@app.route("/app/v5/sendAuthCode", methods=["POST"])
def update():
    print("----1----")
    datax3 = request.get_data()
    print (datax3)
    str_req = bytes.decode(datax3)
    print (str_req)
    req_list = (str_req.split('&'))
    phonenumber = req_list[0].split('=')
    print (phonenumber[1])

    print (type(datax3))

    content = "{\"control\": {\"phonenumber\":\"%s\",\"string\": \"★★★★\",\"serverTime\": 1531991767456,\"error \": 1,\"message \": \"网络异常\",\"type\": 208,\"version\": \"1.0\"},\"data\":{\"showOverMsm\": \"今日获取验证码次数还剩2次\",\"description\": "",\"serverTime\": 1531991767405,\"showOver\": 1,\"isNew\": 0}}"% phonenumber[1]
    resp = Response(content)
    resp.headers["Access-Control-Origin"] = '*'

    return resp


@app.route("/delete", methods=["DELEDT"])
def delete():

    return response()


@app.route("/head", methods=['HEAD'])
def head():

    return response()


if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True, port=5201, threaded=True)

Swagger

swagger-editor环境搭建

安装swagger前先去nodejs官网下载进行nodejs的安装,打开cmd命令测试安装结果,现在版本安装nodejs后node和npm会一并安装

node -v

npm -v

去官网下载,之后解压,重命名为swagger-editor:https://github.com/swagger-api/swagger-editor/releases

然后安装: npm install -g http-server

在swagger-editor所在的目录执行命令:  http-server –p 2008 swagger-editor

使用浏览器:http://IP地址:2008

tomcat中启动swagger-editor

把swagger-editor移动到tomcat/webapps下面,通过浏览器访问:

http://IP地址:tomcat端口号/swagger-editor

swagger-ui环境搭建

下载地址:https://github.com/swagger-api/swagger-ui/releases

创建一个空文件夹node_app:

cd /opt

mkdir node_app

初始化 node ,创建package.json文件():

cd node_app

npm init

安装 express

npm install express --save

创建 index.js

vim index.js

把下面代码贴如 index.js 中

var express = require('express');

var app = express();

app.use('/static', express.static('public'));

app.get('/', function (req, res) {

res.send('Hello World!');

});

app.listen(3000, function () {

console.log('Example app listening on port 3000!');

});

在 node_app 中创建空目录 public

把下载好的Swagger UI 文件中dist 目录下的文件全部复制到 public 文件夹下。

在index.js的目录下执行:node index.js

打开浏览器,输入http://localhost:3000/static/index.html

猜你喜欢

转载自blog.csdn.net/m0_37664730/article/details/81662940