探索后台接口进行压测时的请求方式

阿凡达2018-07-04 11:14

   在网易波特相关的质量保障工作中,由于使用波特提供服务的用户越来越多,测试后台服务能够承担多少并发是比较重要的工作。在网易波特系统中,对相关接口的压测主要通过使用jython编写压测脚本放到PTP平台上执行。

一:项目架构图

现在用户大部分是通过微信的方式来得到bot提供的服务,对微信服务器发送的信息进行处理的是wechat-server模块,接口是/{appid}/receivebot-im-server模块的/imbot/chat需要处理微信、H5和七鱼发送的信息;这两个可能是系统的瓶颈,需要对这两个接口进行压测。首先会通过postman来验证接口,然后通过jython编写压测脚本进行压测。

二:接口验证和压测

1./imbot/chat接口验证和压测,该接口处理post方式提交的数据,请求时需要带上参数,参数的形式为keyvalue的形式,如果要将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验证接口:

urlhttp://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/jsonapplication/json 这个 Content-Type 作为响应头大家肯定不陌生。实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。以FAQsearch为例:

Postman中验证:

urlhttp://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的后面,请求体中放入要携带的内容。

本文来自网易实践者社区,经作者周延旭授权发布。