vuepost请求设置参数为requestpayload格式_wiremock实现对参数的传递

更新时间:2023-07-01 06:05:44 阅读: 评论:0

vuepost请求设置参数为requestpayload格式_wiremock实现对
参数的传递
benjamin ling什么是WireMock, 我的理解是模拟后端服务。由于前端开发⼀般先于后端,所以为了能够模拟⽐较真实的后端借⼝服务,就需要搭建Mock Service,这种模拟跟写假数据是有区别的,虽然数据都是假的,但是Mock Service可以拥有真实的⽹络请求环境,也可以动态的修改获取数据
基本了解使⽤后觉得WireMock还是挺简单的,运⾏⼀下jar包就可以搭建服务器了。
Mac想要运⾏jar⽂件需要配置java环境,jdk下载地址,安装好后就可以运⾏jar⽂件啦~ (如果遇到java路径问题可能是环境变量没配好,上⽹查查~)
回到WireMock , WireMock Jar 包在这⾥下载,这⾥我们下载的是wiremock-standalone,记住这个standalone单词 ,也就是⼀种可以独⽴运⾏的“模式”,下载完成后⽤终端cd到⽬录下运⾏
gracefully// 请注意你下载的版本号和名称,不要盲⽬复制运⾏ java -jar wiremock-standalone-2.1.10.jar -port 7777
-port 是选择运⾏端⼝,默认是:8080,如果8080端⼝被暂⽤了还是⽤其他的吧~
如果启动成功了会出现WireMock的图案:
启动成功图
这时候该⽂件⽬录下会出现两个⽂件夹
mappings:可以理解成专门定义request请求的地⽅,你需要把你需要请求的所有request请求先在这⾥先定义。每⼀次改动都需要重启WireMock服务(如果服务已经启动了,先:control + c 停⽌服务,再重新运⾏上⾯的代码运⾏jar⽂件并且出现成功图案即可),如果发现没有成功的图,可能是mappings下的某个request⽂件出错了,重新检查下~
__files:可以理解成存放respon请求body的地⽅,在request中设置响应体⽂件名称,服务会对应找
dunga
到__files下的这个⽂件作为respon返回~
举个
大象的英文
mappings ⽂件夹下我创建⼀个abc.json格式的请求(名称随意起),内容如下:
请求⽅式GET,路径是/api,对应的respon是个⽂件,⽂件名为two.json,类型为json,
{ "request": { "method": "GET", "urlPath": "/api" }, "respon": { "status": 200, "bodyFileName": "two.json", "headers": { "Content-Type": "application/json" } } }
tocall
该错误是正常的,因为我们返回的是内容是two.json的⽂件,可是我们并没有写这个⽂件,下⾯我们只要在__files中创建这个json⽂件即可
{ "equalToJson" : "{ "name": "new product", "creator": "tester", "createTime": "2015-09-07" }", "jsonCompareMode": "LENIENT" }
__files ⽂件夹内的改动不需要重启服务,保存即可,再次看看浏览器页⾯~ 完⼯啦~
当然,你也可以不⽤创建这个⽂件,直接在request中将bodyFileName改成直接body写出这个json也是可以的
{ { "request": { "method": "GET", "urlPath": "/api" }, "respon": { "status": 200, "body": "{ "id": 1, "name": "new product", "creator": "tester", "createTime": "2015-09-07" }", "headers": { "Content-Type": "application/json" } } }
是不是很简单⽅便,当然,POST请求也是可以的, XML格式请求也是可以的~
进阶⼀:
以上是⼀种⾮常简单的形式,数据都是写死的,那么如果想要加⼊参数怎么办呢?
参数的传递需要对WireMock进⾏扩展,也就是需要另⼀种jar包⽀持:wiremock-body-transformer,开发者描述中找到standalone模式对应的地⽅可以看到它的使⽤介绍:
⾸先下载扩展包 [Download the body transformer extension jar file here.]
northstar如果还没有WireMock的“基础包” 点击这⾥下载 wiremock-standalone-2.1.10.jar ,有的话就不⽤下了。
然后将两个jar包放在⼀个⽂件夹下运⾏
// 请注意你下载的这两个jar包的版本号和名称,不要盲⽬复制运⾏
java -cp "wiremock-body-transformer-1.1.6.jar:wiremock-standalone-2.3.1.jar"
akehurst.wiremock.standalone.WireMockServerRunner --verbo --extensions
sion.BodyTransformer -port 7777
运⾏成功后就可以写借⼝了。先创建⼀个GET请求的request,格式是json,⽂件名随意,内容如下:
{ "request": { "method": "GET", "urlPath": "/transform" }, "respon": { "status": 200, "body": "{"responName": "$(name)"}", "headers": { "Content-Type": "application/json" }, "transformers": ["body-transformer"] } }
可以看到其中有个特别的字段是$(name),这个就是GET请求中的参数名称,⽤$()包裹,保存后重启服务,在浏览器中打开
参数获取成功~
家乡变化
下⾯我们试下XML格式,和POST请求的效果:
依然是先创建request,格式是json,⽂件名随意,内容如下:
{ "request": { "method": "POST", "urlPath": "/transform/post" }, "respon": { "status": 200, "body":
"$()$(de.from)$(derNo)$(derNo2)", "headers": { "Content-Type": "text/xml" }, "transformers": ["body-transformer"] } }
可以看到在返回内容的body中,我们返回的是xml格式的内容,⽽且$()中是⽀持点语法的,这样我们就可以访问的请求体中的内容了,接下来我们需要发送这个post请求,需要⽤到Postman 来模拟post请求:
因为模拟xml格式的请求, 所以我们设置post请求体中也为xml格式,来看下效果
成功拿到数据,可以理解$(body)是能够拿到respon下的body内容的,既然⽀持点语法,就可以很轻松访问其他节点~
如果觉得在respon中将body以字符串的形式表达很不直观的话,我们可以⽤⽂件的形式去写~
美国大学托福分数依然是先创建request,格式是json,⽂件名随意,内容如下:
{ "request": { "method": "POST", "urlPath": "/transform/post/file" }, "respon": { "status": 200, "bodyFileName": "test-post-file-body.vm", "headers": { "Content-Type": "text/xml" }, "transformers": ["body-transformer"] } }
我将原先写在respon中的body内容替换为bodyFileName,并且指明⽂件名,在 __files ⽂件夹中创建 test-post-file-body.vm这个⽂件,内容就是之前respon中body中的内容:
$()$(de.from)$(derNo)$(derNo2)
这样写是很可观的,⼀⽬了然~
重启运⾏后的效果当然结果跟之前也是⼀样的,这⾥就不展⽰了。
⾄此,参数获取完结~ 怎么样?还是蛮简单的吧
进阶⼆
再想想, 以上所掌握的⽅法依然不满⾜现实所需,能不能写⼀些判断语句在⾥⾯呢,类似这种
$(derNo > 0 ? derNo : 暂⽆数据)
尝试许久~发现这种表达式是不⽀持的
那么如果需要判断参数以返回不同内容 ,我们该怎么办呢?
发现了这个扩展:wiremock-velocity-transformer,我看到它给的Demo中是这样写的:
{ "requestAbsoluteUrl" : "$requestAbsoluteUrl", "requestBody" : "$requestBody", "requestMethod" : "$requestMethod", "requestHeaderHost" : "$requestHeaderHost", "requestHeaderUrAgent" : "$requestHeaderUrAgent", "requestHeaderAcceptAccept" : "$requestHeaderAccept", "requestHeaderAcceptLanguage" : "$requestHeaderAcceptLanguage", "requestHeaderAcceptEncoding" : "$requestHeaderAcceptEncoding", "requestHeaderConnection" : "$requestHeaderConnection", "date" : "$date", "math": "$und(22.2)",
#if($requestAbsoluteUrl == 'localhost:8089/my/resource') "customProp" : "customValue", "customProp2" : "customValue2", #el "customProp" : "customValue", #end "date" : "$Month()", "math" : "$math.floor(2.5)" }
我发现了 #if()表达式,我需要这个~ 于是运⾏⼀下看看效果
GitHub中它也提供了Standalone的运⾏⽅法,跟之前body-transformer类似,名称不⼀样⽽已~
// 请注意你下载的这两个jar包的版本号和名称,不要盲⽬复制运⾏ java -cp "wiremock-standalone-2.1.12.jar:wiremock-velocity-transformer-standalone-1.4.jar" akehurst.wiremock.standalone.WireMockServerRunner --verbo --extensions com.github.ansformer.VelocityResponTransformer
它提供的request 内容:pirate
{ "request": { "urlPattern": "/resource", "method": "GET" }, "respon": { "status": 200, "bodyFileName": "respon-test-body.vm", "headers": { "Content-Type": "application/json" } } }
运⾏⼀下看看效果
可以看到他提供的 $requestBody #if() #date #math() 等等⽅法都是可以直接⽤的,⾮常不错。
这⾥要注意, 这个扩展并不⽀持之前的$(xxx)这种格式, 因为$(xxx)这是body-transformer扩展中的⽅法。
下⾯只要同时加载这两个扩展就能满⾜我的需求。
官⽅⽂档 Standalone部分中这样说明
--extensions: Extension class p.p.BodyTransformer. See extending-wiremock.
Transformer之间以“ , ”分割, 完美~
还有之前设置 -port 的解释说明呦,有问题可以在这⾥找找~
bleecker--port: Set the HTTP port --port 9999
最终,我们讲所⽤到的所有jar包(wiremock-standalone-2.3.1.jar ,wiremock-body-transformer-1.1.6.jar,wiremock-velocity-transformer-standalone-1.4.jar)
放在同⼀⽬录下,运⾏~
/
/ 请注意你下载的jar包的版本号和名称,不要盲⽬复制运⾏ java -cp "wiremock-standalone-2.3.1.jar:wiremock-body-transformer-1.1.6.jar:wiremock-velocity-transformer-standalone-1.4.jar"
akehurst.wiremock.standalone.WireMockServerRunner --verbo --extensions
com.github.ansformer.VelocityResponTransformer,sion.BodyTransformer -port 7777
测试⼀下效果~
依然是先创建request,格式是json,⽂件名随意,内容如下:
{ "request": { "method": "POST", "urlPath": "/transform/post/double" }, "respon": { "status": 200, "bodyFileName": "respon-doubel-body.vm", "headers": { "Content-Type": "text/xml" }, "transformers": ["body-transformer"] } }
在 __files ⽂件夹中创建 respon-doubel-body.vm这个⽂件,内容如下:
<?xmlversion ='1.0'encoding='UTF-8'?> $()$(de.from)$(derNo)
#if($ains('from')) $(derNo2) #el no from node #end
解释:
这⾥⽤到了Java的contains⽅法,意思判断requestBody中是否包含'from'标签,从⽽显⽰不同的内容,在这⾥我就理解成from标签了,当然如果任意标签中存在"from"字符串也是可以匹配到的,由于扩展提供⽅法有限,只能这样意思下,暂时还不知道有什么⽅法可以完美的筛选标签或者内容, 这⾥不必要在意细节, 毕竟是测试嘛~
运⾏下看看效果:更改mappings记得重启服务~
有from标签
⽆from标签
没有问题~ , ⾄此功能需求基本满⾜,WireMock 的搭建和运⾏测试也已完结,这些功能应该可以满⾜⼤部分需求

本文发布于:2023-07-01 06:05:44,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/163342.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:请求   需要   服务   下载   格式
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图