小米众筹的手机 mocor5是什么操作系统
Moco 是一个可以轻松搭建测试服务器的框架/工具/程序库,R5是系统版本号。
该框架还在 JavaOne 2013 大会上获过奖。 简单的说,Moco 是一个搭建模拟服务器的工具,其支持 API 和独立运行两种方式。
安装nginx
安装supervisor( 官方文档 )
安装uwsgi( 官方中文文档 )
启动服务
nginx 日志(默认)
supervisor 日志(默认)
supervisor 查看启动的进程
supervisor相关命令
一般配置文件在 /etc/nginx 目录下
全局配置文件为 nginxconf ,一般需要改的是下面两项,其他的保持默认就好了
我们要添加配置只需修改 sites-enabled/default
或在 confd/ 下面添加配置文件即可,因为在 nginxconf 中会导入这两个地方的配置文件
静态web服务器只需要有静态文件(html+css+js)和配置Nginx即可
假设我的静态文件在 /home/moco/www/html 目录下
接下来我们来配置nginx
这里为了简单,直接修改 sites-enabled/default
如果要同时配置多个呢?
说下root 和 alias的区别:
alias指定的目录就是要访问的目录,root是要访问目录的上级目录,使用root时,
静态文件的实际路径等于root+location的路径,如上面的第二个location,
站点文件必须在 /home/moco/other/tool/ 下, 而使用alias,则静态文件的路径
就是alias路径,即第三个location站点文件就在 home/moco/www/tool/ 下。
项目路径: /home/moco/www/myflask/
/home/moco/www/myflask/managepy
虚拟环境: /home/moco/local/share/virtualenvs/myflask-XuRgNXhR
在虚拟环境中安装 flask 和 uwsgi (pip install uwsgi)
在项目路径下创建uwsgi的配置文件(也可以统一在一个地方创建,如 /etc/uwsgi/ )
uwsgi_configini
启动虚拟环境中的uwsgi
配置Nginx 配置文件中的 sites-enabled/default
启动nginx
/home/moco/www/flask_hello/uwsgi_configini
/home/moco/www/flask_world/uwsgi_configini
因为要启动多个uwsgi的配置文件,这里就用supervisor工具统一启动管理
在 /etc/supervisor/confd/ 下分别添加
flask_helloconf
flask_worldconf
启动supervisor
Nginx配置
下面是flask_hello的访问示例:
作为动词,Mock 是模拟、模仿的意思。
作为名词,Mock 是能够模仿真实对象行为的模拟对象。
那么,在软件测试中,Mock 所模拟的对象是什么呢?
模拟的是 SUT(System Under Test:被测系统) 的依赖,而不是其本身。
比如,我要测试 A,但 A 依赖 B,要模拟的对象就是 B。
为什么要模拟 B 呢?
提高 A 的测试覆盖率: 通过 Mock 模拟 B 返回的正常和异常的结果,使用 A 的测试更充分。
避免 B 的因素对 A 产生影响: 当 B 因各种原因无法正常使用时,导致 A 无法测试。
提高 A 的测试效率: B 的真实行为可能很慢,但模拟可以很快。
Mock 的两大功能:
记录真实的调用信息
生成模拟的返回信息
使用 Mock 的问题是什么?
可能导致问题遗漏: 毕竟是模拟的,是理想可预见的情况,真实的情况可能更复杂。
可能导致维护成本变高: 接口变更 Mock 用例要跟着改,改错和漏改都可能出问题。
常见的 Mock 类型:
方法级别: Mock的对象是一个函数调用,例如:获取系统环境变量。
类级别: Mock 的对象是一个类,例如:一个 HTTP server。
接口级别: Mock 的对象是一个 API 接口。
服务级别: Mock 的对象是整个服务。
使用 Mock 做接口测试时,一般分二步:
1 打桩: 创建 Mock 桩,指定 API 请求内容及其映射的响应内容。
2 调桩: 被测服务来请求 Mock 桩并接收 Mock 响应。
在这二步之间还有一个 Mock 桩的注入 , 啥是 Mock 注入?
Mock 的本质就是用模拟桩来替换真实的依赖。所谓 Mock 桩注入 就是 阻断被测服务与真实服务之间的链路,建立被测服务与 Mock 之间的链路过程。
如下图所示:
常见的方式包括但不限于以下五种:
API 请求构造
客户端 Mock:在被测服务 内部 工作,直接拦截被测服务的 API 请求方法,直接从方法内部返回预定义的 Mock 响应。
服务端 Mock:在被测服务 外部 工作,作为 HTTP 服务器接收被测服务发送的 API 请求,并返回预定义的 Mock 响应。
本地配置:
对于服务端 Mock,打桩之后会生成唯一的 Mock 桩地址,被测服务提供一个依赖服务地址配置项,在需要使用 Mock 时将依赖服务地址修改成 Mock 地址。
配置中心
对于服务端 Mock,为了避免修改依赖服务地址配置项导致被测服务重启,可以采用配置中心存储和管理依赖服务地址配置,或者使用注册中心记录服务与服务地址的映射关系。
反向代理
在微服务架构下,被测服务与依赖服务之间可能不是直连的,而是经过了一层反向代理,例如 API 网关。在这种情况下,被测服务是通过调用 API 网关来间接调用依赖服务的接口。
前向代理
服务端 Mock 除了作为 HTTP 服务器,还可以兼备 HTTP 代理的功能,这种架构又叫做 Mock 代理。
对比:
常用 Mock 工具:
单元测试级别:
easymock、jMock、Mockito、Unitils Mock、PowerMock、JMockit
接口测试级别
Wiremock、Mockserver、Moco、Mockjs、RAP
Moco 是一个可以轻松搭建测试服务器的框架/工具/程序库,R5是系统版本号。
该框架还在 JavaOne 2013 大会上获过奖。 简单的说,Moco 是一个搭建模拟服务器的工具,其支持 API 和独立运行两种方式。
所以,可以下这个系统下下载并安装微信APP。
首先去github上下载moco的release版本,zip或者targz格式的都可以
解压出来是一个jar文件,随便命名个名字,我这里是mocojar,然后建立一个文件夹把mocojar复制进去,在根目录建立indexjson文件,里面填写
模拟服务器返回文本
[
{
"response" :
{
"text" : "Hello, World"
}
}
]
然后在命令行cd到你这个文件夹,执行
java -jar mocojar http -p 8888 -c indexjson
停止服务器ctrl+c,下面这些配置建议大家配置后看下终端有没有报错,有就先停止服务再启动
现在打开浏览器访问http://localhost:8888你就能看到经典的Hello, World了。
模拟服务器返回json
moco也能模拟服务器返回json数据,将indexjson文件改为
[
{"response" :
{"json" :
{ "name" : "tiantengfei"}
}
}
]
这是刷新浏览器服务器端返回{"name":"tiantengfei"};
模拟数组,数组里是json
moco还能模拟服务器返回数组,将indexjson文件改为
[
{"response" :
{"json" :
[
{ "name1" : "tiantengfei"}, {"name2" : "wanghua"}
]
}
}
]
刷新浏览器返回[{"name1":"tiantengfei"},{"name2":"wanghua"}]
返回文件
moco也支持返回文件,能够返回文件,我们就能够返回很多种数据,只要在文件中写好就行了。如果闲上面的写法太累,只需要把返回内容写在本目录一个文件,返回这个文件就可以了。
例如我在本地建立一个testjson文件
{
"status" : 0,
"data" :
[
{"revocation":1}
]
}
然后在indexjson文件中写
[
{"response" : {"file" : "testjson"}}
]
然后刷新服务器,就会返回testjson文件中的内容,以后再testjson写xml也可以
模拟请求路径
说了说返回,再来说说怎么模拟请求路径吧。很简单,配置request就可以了
[
{
"request" :
{
"uri" : "/test"
},
"response" :
{
"file" : "testjson"
}
}
]
访问http://localhost:8888/test就会看到testjso里面的内容了。
设置请求参数
moco也可以模拟请求http的请求参数
在indexjson中配置
[
{
"request" :
{
"uri" : "/test",
"queries" :
{
"name" : "tiantengfei"
}
},
"response" :
{
"file" : "testjson"
}
}
]
浏览器输入http://localhost:8888/testname=tiantengfei回车就会出现testjson的内容了。
包含json文件
moco也支持一个json文件中请求另外一个json文件
将indexjson文件改为
[
{"context" : "/test", "include" : "testjson"}
]
然后testjson文件为
[
{ "request" : { "uri" : "/getStatus"}, "response" : { "json" : [{ "status" : "true" }]}},
]
注意这个时候要使用的启动服务的命令也不一样了
java -jar mocojar http -p 8888 -g indexjso
0条评论