【LoadRunner】回放脚本Replay Log不报错但结果不成功"msg" : "Content type 'application/octet-stream' not supported"

电脑坏了好久,最近终于修好了,停更了好久。

近来遇到一个问题

脚本内容如下:

订单确认:订单确认后,订单状态由创建状态变成已确认状态。

录制了脚本之后,从数据库中查询导出创建状态的订单,对脚本进行订单号参数化。确认的脚本请求如下:

<span style="white-space:pre">	</span>web_custom_request("submit", 
		"URL=http://127.0.0.1/goOrder/submit?", 
		"Method=PUT", 
		"TargetFrame=", 
		"Resource=0", 
		"RecContentType=application/json", 
		"Referer=http://127.0.0.1/#order", 
		"Snapshot=t7.inf", 
		"Mode=HTML", 
		"Body=[\"{订单号}\"]", 
		LAST);

(题外话:RESTful架构里有get、post、put、delete等method,该请求中使用了PUT,详情可谷歌百度一下RESTful)


回放脚本,查看下方的Replay Log 提示Pass,不报错,但是查询订单状态依然是创建状态,没有更新为已确认状态。


查错过程:

1、从Script模式切换到Tree+HTTP View模式,查看回放

2、查看录制时的response信息,发现头部提示200 OK,返回的信息也正常,response信息简要如下:

<span style="white-space:pre">	</span>{
  <span style="white-space:pre">	</span>"XX1609240001" : {
   <span style="white-space:pre">	</span> "code" : "0",
 <span style="white-space:pre">	</span>   "msg" : "[XX1609240001]操作成功!"
 <span style="white-space:pre">	</span> }
<span style="white-space:pre">	</span>}

code一般是标识是否执行成功,code=0一般情况下就是成功,其它就是失败,并且会在msg里返回错误信息。

3、查看回放时的response信息,发现虽然头部提示200 OK,但是具体的返回信息却有异常。与录制的时候做确认后response的信息简要如下:

<span style="white-space:pre">	</span>{
  <span style="white-space:pre">	</span>"code" : "000016",
 <span style="white-space:pre">	</span> "msg" : "Content type 'application/octet-stream' not supported",
 <span style="white-space:pre">	</span> "data" : null
<span style="white-space:pre">	</span>}

这一提示信息我们可以理解为服务器不认客户端发出的Content type,即不支持application/octet-stream


4、这时候查看一下录制时的request和response的头部信息,都发现有Content type的信息,且值为application/json,而不是application/octet-stream



5、这时候再查看回放时的脚本的request和response的头部,会发现只有response含有Content type,而request并没有。这就与录制时的有异。



6、查看一下web_custom_request这个请求函数,可以在LR自带的Function Reference里查询该函数,或者在百度查函数关键词查看中文版解释,主要查看其语法:

(具体语法可自行百度)

在查看语法解释,发现有一个参数

EncType:编码类型。此参数给出一个内容类型(Content-Type),指定其做为回放脚本时“Content-Type”请求头的值,例如“text/html”。Web_custom_request函数不处理未编码的请求体。请求体参数将会使用已经指定的编码方式。因此,如果指定了不匹配HTTP请求体的“EncType”,会引发服务端的错误。通常我们建议不要手动修改录制时的“EncType”值。

任何对于“EncType”的指定都会覆盖web_add_[auto_]header函数指定的Content-Type。当指定了“EncType=”(空值)时,不会产生“Content-Type” 请求头。当省略了“EncType”时,任何一个web_add_[auto_]header函数都会起作用。如果既没有指定EncType也没有web_add_[auto_]header函且“Method=POST”,

“application/x-www-form-urlencoded”会做为默认值来使用。其他情况下,不会产生Content-Type请求头。
 (太理论了/(ㄒoㄒ)/~~,我都看不下去了)

简单来说就是自己在web_custom_request这个请求函数中添加EncType,即手工添加Content-Type,值为

application/json

<span style="white-space:pre">	</span>web_custom_request("submit", 
		"URL=http://glsuat.midea.com/goOrder/submit?", 
		"Method=PUT", 
		"TargetFrame=", 
		"Resource=0", 
		"EncType=application/json",
		"RecContentType=application/json", 
		"Referer=http://glsuat.midea.com/#order", 
		"Snapshot=t7.inf", 
		"Mode=HTML", 
		"Body=[\"{订单号}\"]", 
		LAST);

7、回放脚本,在数据库中查看结果,可以发现订单状态能更新为已确认状态。

8、成功啦~不过也不造是代码问题,还是LR本身的缺陷问题,毕竟LR也不是第一次抽风~这个也是帮别人远程解决的问题,所以也没继续跟开发人员沟通。个人是比较倾向后者原因。。。回头再问问负责这项目的测试人员吧~








  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值