微信号:grzlwx

介绍:光荣之路官方资讯

性能测试概念点分析与过程讲解(四)--抓包

2015-09-13 22:33 光荣之路


2. 抓包方式

1准备事项

安装抓包工具以及相关浏览器插件:Fiddler ,火狐浏览器的firebug,等。安装过程这里不再简述了,查阅我之前写过的文档,熟悉这些工具的使用方式。

LR相关设置:对于手写脚本来说,录制设置其实不重要,因为用不到,那么这里主要需要对运行选项进行设置,也就是Run-time setting 选项中的相关内容,打开Vuser--->Run-time setting

Run logic设置一般直接选择默认,这个设置的意思是运行时,action执行的次数,如果调试打算重复执行多次,则可以调整到自己想要的次数。

Pacing 具体是设置action循环的节奏的,就是上一遍循环完成后是立即下一次循环还是休息一会儿再进行。看业务场景需要了,如果没有必要可以选择立即执行下一次循环。

Log 上文提到过的日志打印,和上面设置一样就好。主要也是调试用。还是跑场景时对场景参数化数据分析用。

think time 设置思考时间。思考时间是指在我们脚本执行过程中有一些步骤跟步骤之间的停顿时间,比如登入操作,显然在登入页面加载完成后,到登入提交这个过程,用户需要一个输入用户名密码的过程,那么这两部分请求中间,肯定就有了一个停顿时间,而思考时间就是为了满足这个场景产生的。以便为了更好更准确的模拟用户行为。设置思考时间,需要在脚本中加入思考时间函数lr_think_time(2),2是停顿的时间,单位秒。在脚本中加了这个函数之后如果运行设置中不设置think time选择,则这个函数不会生效。当然场景中也会有一个这样的运行设置,要想这个函数生效也要勾选上对应的按钮才行。

Miscellanioeus 设置一下Automatic Transaction 以便收集每个事物的响应时间和其他测试数据。主要的设置就这几个,其他的大多默认就好。


2.2 抓包

无论是接口请求还是页面请求,我们都可以想办法把它的包抓到,利用Fiddler这类软件,可以清晰看到一个请求和该请求的响应。而我们写脚本的依据也就来自这些包里面。具体的抓包方法这里不做具体讨论了。查阅以前写过的Fiddler使用,这里主要来分析一下抓包的数据以及和脚本的对应关系。

首先看每个请求的Headers


上图可以看到Headers中包含了请求的一些关键信息,比如请求方式为get,请求地址为http://wiki.intra.inzwc.com/rest/quickreload/latest/13468871?since=1438235434617,请求报文格式是application/json格式,回调地址referer是http://wiki.intra.inzwc.com/pages/viewpage.action?pageId=13468871,这些信息都是后续写脚本需要用到的信息。接下来看请求参数和body信息。

这是一个我去投资的登录请求,请求用的 是post方式,提交的具体参数包含有t=1438236210099(时间戳),mobile=13012312314(手机号码即用户 名),loginPwd=wbTC5wVj6eef7k8VQcc/9TpT5QhFnclzeA /QD4mrbrZqpMyWH8YanJvzEldWSOEBGZuUyju /Ddmb09C5uLnHTBjlbBesv4WHqfVJuNIyi2ioTUuXfqbeAN29WgFMq9NRYe6RJsMxb2fGUxrOFHJjqIIxpfmgFGJ0Av4MmPhoE4c= (登入密码,加密后生成的字符串),checkCode=uhv6(验证码)。有了这些信息结合上面Headers里面包含的信息,实际上一个提交请求函数就可以写出来了。

web_submit_data("login", /** ----------函数名称---------**/

"Action=http://www.woqutz.com/uc/login/crossdomain-ajax-login?t=1438236210099", /***----请求的URL,对应抓包里面的URL----***/

"Method=POST", /**---提交请求的方式,一般就get或者post两种,其他方式比如update等很少用---***/

"RecContentType=text/html", /**--请求报文格式,一般也就那么几种,常见的text/html,application/json--**/

"Referer=http://jyzd.woqutz.com/", /**--回调地址对应headers中的referer--**/

"Snapshot=t34.inf", /**-LR中的快照,手写脚本这个可以随机写一个,不过txx.inf 这种格式需要保持-**/

"Mode=HTTP", /**--请求准守的http请求协议,这个一般的B/S结果程序都是一样的--**/

ITEMDATA, /**-脚本函数中的关键字,上面是对请求头的一些定义,下面则是对body相关的一些定义。-**/

"Name=t", "Value= 1438236210099", ENDITEM,

"Name= mobile", "Value= 13012312314", ENDITEM,

"Name= loginPwd", "Value=wbTC5wVj6eef7k8VQcc/9TpT5QhFnclzeA/QD4mrbrZqpMyWH8YanJvzEldWSOEBGZuUyju/Ddmb09C5uLnHTBjlbBesv4WHqfVJuNIyi2ioTUuXfqbeAN29WgFMq9NRYe6RJsMxb2fGUxrOFHJjqIIxpfmgFGJ0Av4MmPhoE4c=", ENDITEM,

"Name= checkCode", "Value= uhv6", ENDITEM,LAST);

这样一个提交函数就完成了,其实一般请求下,LR录制的脚本也好,关键的函数就那么几个,一个是这个提交函数,另外一个常见的是另外一个请求函数:

web_custom_request("jyzdgateway.aicai.com/gataway",
"URL=http://jyzdgateway.aicai.com/gataway/req?service_name=ec_freeze_balance&partner_id=10001&sign=f745fae2c597ce28b682fd120d76b75e&sign_type=MD5&request_time=20150725120026&out_freeze_no=dj{NewParam}&freeze_amount=10&identity_id={NewParam_1}&account_type=MEMBER&summary=HAHA TEST SUMMARY&ext1=ext11&ext2=ext2222&ip=192.168.1.1&_input_charset=UTF-8",
"Method=get",
"Resource=1",
"Referer=",
"Snapshot=t2.inf",
// "EncType=",
LAST);

注意看两个函数格式,稍微有点区别,web_submit_data 函数一般都会有参数提交,而且参数会单独一一列出来,而web_custom_request函数其实也有参数提交,只是参数都直接包含在请求地址里面。 上面的例子是配资项目账户金额冻结的接口请求。整个URL=http://jyzdgateway.aicai.com/gataway /req?service_name=ec_freeze_balance&partner_id=10001&sign=f745fae2c597ce28b682fd120d76b75e&sign_type=MD5&request_time=20150725120026&out_freeze_no=dj{NewParam}&freeze_amount=10&identity_id={NewParam_1}&account_type=MEMBER&summary=HAHA TEST SUMMARY&ext1=ext11&ext2=ext2222&ip=192.168.1.1&_input_charset=UTF-8 前 面的jyzdgateway.aicai.com/gataway/req是真正的请求地址,而?后面的则都是提交的参 数,service_name=xxx,以&符号隔开另外的参数,partner_id=10001(商户 ID),sign=XXXXXXXX(安全验证签名),sign_type=md5(签名方式)request_time=2015xxxxx(请求时 间),out_freeze_no=xxxxxxx(请求订单号),freeze_amout=10(冻结金 额),identity_id=xxxxxx(用户ID),account_type=MEMBER(冻结用户的类型),summary=xxxx之后的 参数则只是为了日志方便和监控而传入的,跟实际业务关系不大。

这里列举了两个提交函数,并举例说明了两种请求方式下来选择提交函数以及如何把抓包到的请求转化成LR代码。主要还是要理解抓包抓到的数据每项都是什么,做什么用,LR提交函数中的每项是填什么信息,这样才能在任何转化请求的情况下,来根据抓包收集到的数据转化成我们要的LR性能脚本。

这里举例的只是两个请求,当然,真正的业务压力测试逻辑可能不止一个抓包数据,可能包含很多个请求,这时候需要我们一个个去写并按顺序排列出来。


关联的使用:

前文我们聊到过关联,那么关联到底是做什么的呢?未完待续

  
             
  
             
  
             
  
            
  
            
  
            
  
            
  
            
  
            
  
            
  
            
  
            
  
            

(作者:owenhe 来源:http://www.cnblogs.com/7test/articles/4778743.html)


  
             
  
             
  
             
  
            
  
            
  
            
  
            
  
            
  
            
  
            
  
            
  
            
  
            

一字一句当思来之不易,感谢作者,传播测试知识、技能与正能量!

光荣之路软件测试培训

官网:http://www.gloryroad.cn/

微信公众号:gloryroadtrain

性能测试QQ群:415987441
软件测试招聘QQ群: 203715128
自动化3群QQ: 371211499


 
光荣之路 更多文章 今天晚上的 linux 公开课- Awk 编程 7月28日(今天)晚上的 linux 公开课- shell编程 8月4日(今天)晚上的 linux 公开课- shell编程 9月1日(本周一)晚8点半,光荣之路Web自动化系列基础课—javascript第二讲 推荐本好书《与机器赛跑》
猜您喜欢 揭秘腾讯大数据之平台综述篇 今晚公开课:闲鱼APP测试经验分享 Android 7.0 给开发者带来了什么 你的代码写的很烂 高效R开发(二):Microsoft R