很多搞性能测试的人员,只会跟着网上、前辈教导的方法进行测试:挑选业务逻辑中并发量、访问量最高的业务逻辑、结合读写等业务进行测试,然后取整条业务逻辑(模拟用户全流程动作)的逻辑进行测试;结果就是:准备大堆的测试数据,复杂的准备工作;其实那些数据只是用来满足业务流中的条件,而不是真的能产生压力的部分;
笔者采用的方法:
1、B/S结构中,用户操作功能流程其实是前端js依次调用不同的CGI接口,后台实现上面其实并没有强依赖关系(只要满足对应条件进行发包都能执行)。
所以,首先挑选业务逻辑中用户访问最高的流程,然后从流程中挑选调用次数、压力最大的CGI接口;这样聚焦于对应的测试对象,可以避免很多无用的测试数据;
2、根据业务逻辑,分析被测对象券流程中,所调用的接口,对于安全旁路、分支判断等,根据情况进行取舍(有些业务只测试某个CGI,有些是测试全平台,测试中根据情况进行聚焦)。
3、根据分析情况直接修改被测对象代码:通常接口调用形式都会使用iret方式来判断,例如:
/*原有代码----begin*/ iret=xxx.call(args1,args2,args3); if(iret != 0){ print("xxxxx"); break; } /*原有代码----end*/ iret=0 ---------- 添加iret=0,让程序继续走。 |
这样不会影响外部接口调用次数,不会影响网络发包次数,但可能会影响单个网络包大小进而影响网络流量;同时稍微增加cpu负担(赋值造成内存读写)。但其实我们要测的是业务主流程,而不是外部接口(外部接口如果有需要可单独进行压测),所以笔者认为也是可以采取此种方案,而不需要准备一大堆无用的数据,只需有针对性的进行业务逻辑选取即可;
最新内容请见作者的GitHub页:http://qaseven.github.io/