在网易波特相关的质量保障工作中,由于使用波特提供服务的用户越来越多,测试后台服务能够承担多少并发是比较重要的工作。在网易波特系统中,对相关接口的压测主要通过使用jython编写压测脚本放到PTP平台上执行。
一:项目架构图
现在用户大部分是通过微信的方式来得到bot提供的服务,对微信服务器发送的信息进行处理的是wechat-server模块,接口是/{appid}/receive;bot-im-server模块的/imbot/chat需要处理微信、H5和七鱼发送的信息;这两个可能是系统的瓶颈,需要对这两个接口进行压测。首先会通过postman来验证接口,然后通过jython编写压测脚本进行压测。
二:接口验证和压测
1./imbot/chat接口验证和压测,该接口处理post方式提交的数据,请求时需要带上参数,参数的形式为key:value的形式,如果要将body体中的信息解析成键值对的形式,请求头中的Content-Type需要设置为application/x-www-form-urlencoded。
①postman方式验证:
Url:http://xxx.xxx.xxx.xxx:7373/imbot/chat
Content-Type: application/x-www-form-urlencoded
Body:key1=value1&key2=value2
这种方式的请求类似于下面形式,将参数直接附加在url后面
②jython压测脚本:
用jython编写测试脚本对/imbot/chat这个接口进行压测,发送请求用到HTTPRequest中的POST(java.lang.String uri, NVPair[] formData, NVPair[] headers),核心代码如下:
request=HttpRequest()
url=”http://xxx.xxx.xxx.xxx:7373/imbot/chat”
formdata=”xxx”(格式为key1=value1&key2=value2)
header=[NVPair('Content-Type','application/x-www-form-urlencoded')]
result=request.POST(url, formData, header)
2./{appid}/receive接口验证和压测,该接口有三个参数和一段经过加密的纯文本,处理方式为参数加在url的后面,body为纯文本格式要求将请求头中的Content-Type设置为text/plain。
①postman验证接口:
url:http://xxx/receive?key1=value1&key2=value2
body:"发送的纯文本"
②Jython压测脚本:
request=HTTPRequest()
url=http://xxx/msg/xxx/receive?key1=value1&key2=value2
formDate=”发送的纯文本”
header=[NVPair('Content-Type', 'text/plain')]
result=request.POST(url,formData,header)
3.还有一种常用的Content-Type类型为application/json,application/json 这个 Content-Type 作为响应头大家肯定不陌生。实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。以FAQsearch为例:
①Postman中验证:
url:http://xxx/FAQSearch/Search?key1&value1&key2=value2
body: {"query":"你好","topN":5}
②Jython脚本形式:
request=HTTPRequest()
url:将参数以?key1=value1&key2=value2形式添加到url后面
url1 = "http://xxx/FAQSearch/Search?key1=value1&key2=value2
formdata={“query”:”你好”,”topN”:3}
header=[NVPair('Content-Type', 'application/json')]
request=HttpRequest()
result=request.POST(url,formdata,header)
三:总结
在对接口进行测试中,能够根据请求体的不同格式来设置Content-Type,如果请求体是key1=value1&key2=value2的格式,需要服务端将其解析成键值对的形式,那么Content-Type设置为application/x-www-form-urlencoded;如果请求体是一段纯文本,那么Content-Type设置为text/plain;如果请求体是json格式的,那么Content-Type设置为application/json。如果在发送post请求时候需要带上参数,且请求体还需要携带内容,这时可以将参数加到url的后面,请求体中放入要携带的内容。
本文来自网易实践者社区,经作者周延旭授权发布。