以前常用SoapUI来做接口的性能测试,这次用的Jmeter,对需由客户端根据时间戳等登录参数生成随机token值和印签值来发请求的系统,非它莫属了。下面就这次测试的难点和操作注意问题展开总结。
**航空订票APP性能测试以接口压测为主,采用JMETER压测工具,结合NMON监控服务器资源。采用两台测试机,分布式并发压测,在500个并发,800个并发压力下,记录服务器资源的使用情况,并作分析。
1.脚本准备:
测试中,发送的请求体以JSON代码为主,且每个接口要求有token值和印签值(根据请求的body参数生成),因此采取在请求前添加前置处理器BeanShellPreProcessor,来处理token和印签值,下面以“常客登录”为例进行说明。
1)JMETER库添加生成印签的JAR包(目录地址:/lib/ext/),JAR包在Eclipse下生成;
2)线程组下添加配置元件“HTTP信息头管理器”,并设置信息头:名称Content-Type,值为application/json。
3)JMETER请求前添加前置处理器BeanShellPreProcessor,脚本如下:
import com.air.keygen.*;//引用JAR包中写入的方法
String body ="{\n" +
" \"common\": {\n" +
" \"abuild\": \"593\",\n" +
" \"akey\": \"B502CA25CB7944758F349C8187D6456D\",\n" +
"\"aname\": \"com.rytong.hnair.preview\",\n" +
" \"atarget\": \"preview\",\n" +
" \"aver\": \"6.3.0\",\n" +
"\"did\":\"4d0063f74e1c21cd\",\n" +
" \"schannel\": \"AD\",\n" +
" \"slang\": \"zh_CN\",\n" +
"\"sname\": \"samsung/k3gxx/k3g:4.4.2/KOT49H/G900HXXU1ANCI:user/release-keys\",\n" +
" \"stime\": \"1480535569991\",\n" +
" \"sver\": \"4.4.4\",\n" +
" \"szone\": \"+0800\"\n" +
" },\n" +
" \"data\": {\n" +
"\"number\": \"7044002896\",\n" +
"\"pin\": \"123456\",\n" +
"\"toSave\": true\n" +
" }\n" +
"}";
String airSign = Generator.getKey(body);
vars.put("airSign",airSign); //输出参数hnairSign
vars.put("body",body); //输出参数body
3)请求体调用BeanShellPreProcessor脚本生成的参数airSign和body。
如常客登录的请求url为:https://..../login?hnairSign=${airSign},请求体Body Data为:${body}。
2. 其它设置项
1). 本次测试用的https协议,先准备本系统的证书文件(.crt文件),然后导入认证文件至JMETER(菜单-选项-SSL管理器,选择要导入的证书文件),在JMETER的sampler中,协议选择https即可。
2). 参数化处理。本次测试过程中,为了保证数据的完整性和真实性,采用csv文件保存数据文本,然后在请求下添加配置元件CSV Data Set Config,将保存的csv文件路径写入配置文件。请求脚本中需要调用参数的地方,做参数化即可,如:${__CSVRead(D:\HN-APP\预订-查询单程机票.csv,3)}。
3). 随机数据生成。由于一个请求脚本中会多次用到同一个参数,因此,添加一个前置处理器:用户参数,设置名称和值,值调用随机函数随机生成。如:名称idNo,值${_Random(10000000,9999999,idNo},名称mobile,值${_Random(10000000,9999999,mobile)} ,对应的引用脚本修改为:"idNo\": \"TESTA${idNo}\","mobile\": \"189${mobile}\"。
4). 集合点设置。在线程下添加定时器Synchronizing Timer,设置并发用户数即可。
3.分布式压测
1)测试环境准备。本次采用两台测试机分布式压测,两台机在同一网段,先准备好两台机的Jmeter版本及JDK版本一致,避免不必要的错误,将测试脚本和参数化文件,分别放到相同的目录下。
2)参数设置。环境准备好后,先准备一台机做主机,一台做从机,在主机端的jmeter的bin文件中,用记事本打开jmeter.properies文件,找到remote_hosts并设置值为从机的IP,如:remote_hosts=192.198.0.26,默认端口号为1099,
3)分布式运行。保存好设置后,先运行从机的jmeter-sever.bat,再运行主机的的jmeter.bat,在菜单运行下方的远程启动下,可以查看到从机和主机的IP,此时可以根据并发情况,分别选择一台机或两台机同时进行测试。