mock的使用,easy-mock使用方法详解
mock的重要性
mock就是对某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建的方法。项目开发和测试过程中,遇到以下的情况,就需要模拟结果返回;
1.当另一方接口或服务还未完成,阻碍项目进度时,可以通过mock的方式,实现并发开发;
2.接口不满足目前的测试需求,虽然接口已经实现,但是个别字段/返回不满足测试要求;
mock数据实现方式:
a) 使用moco,运行moco需要java环境和moco的jar包;可参考https://www.cnblogs.com/canglongdao/p/12174046.html
b) 使用easy-mock,easymock根据其官网的解释是一个在线的可视化生产模拟数据的在线服务;
easy-mock官网 https://easy-mock.com/ 注册用户;easy-mock官网,时常登录不进去;本人在centos7下,使用docker-compose搭建了easy-mock;
a) 登录成功之后,点击‘+’,创建项目;
b) 填写信息,项目名和url都是按照自己的意愿来填写,这会为最后生成的api数据接口提供地址;
c)在刚新增的项目下,创建接口;
d)写下mock的代码
准备工作
Mock.js的语法规范
a) 数据模板中的每个属性由3部分构成:属性名|生成规则:属性值;'name|rule':value;
b) 数据占位只在属性值字符串中占个位置,并不出现在最终的属性值中;@占位符;如,first: '@FIRST',
学习mock.js语法可以参考:http://mockjs.com/examples.html
Easy Mock
重点来了,现在正式开始
常见使用方式;
a)静态数据
使用postman,访问上面的接口;
b)动态数据
结合Mock.js的语法,将json改造一下,可以生成随机数据,这样就避免了每次都是一样的假数据,比较符合真实的开发场景;
访问结果:
{
"code": 0,
"message": "success",
"update_time": "2020-03-23 14:13:35",
"date": [
{
"id": "350000200105144139",
"wechat_id": "uvejr",
"phone": "18317783811",
"name": "易平",
"index": 0
},
{
"id": "710000197310224771",
"wechat_id": "edwlf",
"phone": "14716374632",
"name": "郑芳",
"index": 1
},
{
"id": "120000198902135814",
"wechat_id": "kwqzr",
"phone": "14602287701",
"name": "邹刚",
"index": 2
},
{
"id": "320000197610278437",
"wechat_id": "pdizh",
"phone": "18218458340",
"name": "邵军",
"index": 3
},
{
"id": "510000197001172974",
"wechat_id": "qfqib",
"phone": "15688701241",
"name": "刘超",
"index": 4
},
{
"id": "430000197705068278",
"wechat_id": "dxdit",
"phone": "17317161292",
"name": "张杰",
"index": 5
},
{
"id": "630000200502158419",
"wechat_id": "orstl",
"phone": "18482418154",
"name": "潘芳",
"index": 6
},
{
"id": "820000199101301552",
"wechat_id": "cqnwa",
"phone": "17556169014",
"name": "蒋超",
"index": 7
},
{
"id": "500000200512276276",
"wechat_id": "pfhhj",
"phone": "14645062242",
"name": "钱洋",
"index": 8
},
{
"id": "360000198403159779",
"wechat_id": "ybqxh",
"phone": "18645282758",
"name": "吕涛",
"index": 9
},
{
"id": "410000197003273847",
"wechat_id": "etjjx",
"phone": "15791192417",
"name": "赖霞",
"index": 10
},
{
"id": "21000020050904386X",
"wechat_id": "likhn",
"phone": "17863849283",
"name": "沈霞",
"index": 11
},
{
"id": "540000197004132770",
"wechat_id": "kjfid",
"phone": "13935155232",
"name": "邓娟",
"index": 12
},
{
"id": "130000200606127387",
"wechat_id": "qtxdi",
"phone": "15215242105",
"name": "范秀英",
"index": 13
},
{
"id": "500000198304215903",
"wechat_id": "cmtvi",
"phone": "15371744331",
"name": "金军",
"index": 14
},
{
"id": "340000201006192672",
"wechat_id": "nbacn",
"phone": "15764835310",
"name": "傅秀英",
"index": 15
},
{
"id": "34000019710901620X",
"wechat_id": "tdygr",
"phone": "17188330258",
"name": "吴超",
"index": 16
},
{
"id": "540000199608183092",
"wechat_id": "osodq",
"phone": "14704726452",
"name": "任娟",
"index": 17
},
{
"id": "330000197304230808",
"wechat_id": "sviuj",
"phone": "15948378749",
"name": "段娟",
"index": 18
},
{
"id": "430000198006267053",
"wechat_id": "cyalv",
"phone": "18580453534",
"name": "徐涛",
"index": 19
}
]
}
c) 响应式数据
可以模拟真实的接口一样,根据传入的参数不同获取对应的数据;
使用postman访问接口;不加参数,加参数,错误的请求方式;
easy mock快速生成数据字段,及常用语法;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
{ "cname" : "@cname" , //中文人名 "id" : "@id" , //生成20 位数字 "title" : "@ctitle" , //中文title "city" : "@city" , //中文城市 "ip" : "@ip" , //ip 地址 "email" : "@email" , //email "url" : "@url" , //url "cfirst" : "@cfirst" , //姓名,姓 "clast" : "@clast" , //姓名,名 "cword" : "@cword('123456')" , //123456 从中选取一个字符 "csentence" : "@csentence(1,5)" , //文字文段 "csentence5" : "@csentence(5)" , //文字文段 "cparagraph" : "@cparagraph(1,3)" , //文字文段 "string" : "@string(11)" , //输出11 个字符长度的字符串 "float" : "@float(0,10)" , //0 到 10 的浮点数 "int" : "@integer(60,70)" , //60 到 70 之间的整数 "boolean" : "@boolean" , //boolean 类型 true,false "array|1-3" : [{ "id" : "@integer(1,10)" , //整数 1到10 取整数 "name" : "cname" }], //数组(随机 1 到3个) "array_sort_add|+1" : [ "1" , "2" , "3" ], //数组1,2,3轮询输出 "boolean|1-2" : true , //boolean 类型 true,false "actionType|1" : [ 'click_url' , 'open_resource_detail' , 'open_resource_search' ], "payload" : function () { var returnClickUrl = { "linkUrl" : "http://tob.zhisland.com/apph5" }; var returnResourceDetail = { "resourceId" : "606" }; var returnResourceSearch = { "keyWords" : "" , "tagCategory" : "1" , "tag" : "1" }; var s = this .actionType == 'click_url' ? returnClickUrl : this .actionType == 'open_resource_detail' ? returnResourceDetail : returnResourceSearch; return s; |
预期返回如下数据;
方式一、使用easymock构造;
方式二、使用jmeter的 beanshell sampler;运行该请求,查看‘察看结果树’;
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步