zoukankan      html  css  js  c++  java
  • Loadrunner与kylinPET的能力对比测试--web动态请求

    概述      

    在《性能测试工具选择策略--仿真度对比测评分析报告》一文详细分析了使用相同的web页面,分别使用LoadRunner,Jmeter,kylinTOP工具进行录制脚本并执行得出在静态请求页面下,Loadrunner12与kylinTOP的仿真能力都非常的高,接近真实场景。这次我们进一步分析,对于对态请求界面,两者的差异性(这次我们改用kylinPET与LoadRunner12.60进行对比分析)。

    被对象分析

     被测试对象URL:http://59.110.158.28/Example/  ,这是一个简单的登录和内容加载页面。

     首面登录界面

     页面登录成功后的内容:

    登录过程过程中,按下F12按钮,可以看到页面加载过程所有请求。getNews共有6个动态的并发请求。

    LoadRunner12.60录制脚本并运行:

    • 脚本录制

    使用LoadRunner12.60自带的录制功能,使用Chrome浏览器进行脚本录制(注意:录制过程需要安装一个fiddler,在录制脚本前,启动fiddler),录制完成后要进行自动关联和手动关联两个动作,

    自动关联ticket和手动关联:validateCode,否则脚本无法运行。以下是关联后,action部分内容展示,脚本中手工增加了一个页面加载事务(从提交登录至脚本请求结尾)

      1 Action()
      2 {
      3    
      4     web_add_auto_header("Upgrade-Insecure-Requests","1");
      5     
      6     web_reg_save_param_ex("ParamName=validateCode", "LB=validateCode">","RB=</span>",LAST);
      7  
      8     web_url("Example", 
      9         "URL=http://59.110.158.28/Example/", 
     10         "Resource=0", 
     11         "RecContentType=text/html", 
     12         "Referer=", 
     13         "Snapshot=t45.inf", 
     14         "Mode=HTML", 
     15         EXTRARES, 
     16         "Url=images/button/btn_login.png", "Referer=http://59.110.158.28/Example/css/login.css", ENDITEM, 
     17         LAST);
     18  
     19     web_add_auto_header("Origin", 
     20         "http://59.110.158.28");
     21  
     22 /*相关性注释 - 切勿更改!  Original value='ST-1610868492644' Name ='ticket' Type ='ResponseBased'*/
     23     web_reg_save_param_regexp(
     24         "ParamName=ticket",
     25         "RegExp=ticket=(.*?)\
    \
    ",
     26         SEARCH_FILTERS,
     27         "Scope=Headers",
     28         "IgnoreRedirections=No",
     29         "RequestUrl=*/login*",
     30         LAST);
     31         
     32 lr_start_transaction("页面加载");
     33  
     34     web_submit_form("login", 
     35         "Snapshot=t46.inf", 
     36         ITEMDATA, 
     37         "Name=name", "Value=admin", ENDITEM, 
     38         "Name=password", "Value=admin", ENDITEM, 
     39         "Name=validate", "Value={validateCode}", ENDITEM, 
     40         LAST);
     41  
     42     web_revert_auto_header("Upgrade-Insecure-Requests");
     43  
     44     web_add_auto_header("X-Requested-With", 
     45         "XMLHttpRequest");
     46     
     47  
     48     web_submit_data("getNews",
     49         "Action=http://59.110.158.28/Example/getNews",
     50         "Method=POST",
     51         "RecContentType=text/plain",
     52         "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}",
     53         "Snapshot=t47.inf",
     54         "Mode=HTML",
     55         ITEMDATA,
     56         "Name=times", "Value=6", ENDITEM,
     57         LAST);
     58  
     59     web_submit_data("getNews_2",
     60         "Action=http://59.110.158.28/Example/getNews",
     61         "Method=POST",
     62         "RecContentType=text/plain",
     63         "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}",
     64         "Snapshot=t48.inf",
     65         "Mode=HTML",
     66         ITEMDATA,
     67         "Name=times", "Value=1", ENDITEM,
     68         LAST);
     69  
     70     web_submit_data("getNews_3",
     71         "Action=http://59.110.158.28/Example/getNews",
     72         "Method=POST",
     73         "RecContentType=text/plain",
     74         "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}",
     75         "Snapshot=t49.inf",
     76         "Mode=HTML",
     77         ITEMDATA,
     78         "Name=times", "Value=4", ENDITEM,
     79         LAST);
     80  
     81     web_submit_data("getNews_4",
     82         "Action=http://59.110.158.28/Example/getNews",
     83         "Method=POST",
     84         "RecContentType=text/plain",
     85         "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}",
     86         "Snapshot=t50.inf",
     87         "Mode=HTML",
     88         ITEMDATA,
     89         "Name=times", "Value=5", ENDITEM,
     90         LAST);
     91  
     92     web_submit_data("getNews_5",
     93         "Action=http://59.110.158.28/Example/getNews",
     94         "Method=POST",
     95         "RecContentType=text/plain",
     96         "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}",
     97         "Snapshot=t51.inf",
     98         "Mode=HTML",
     99         ITEMDATA,
    100         "Name=times", "Value=2", ENDITEM,
    101         LAST);
    102  
    103     web_submit_data("getNews_6",
    104         "Action=http://59.110.158.28/Example/getNews",
    105         "Method=POST",
    106         "RecContentType=text/plain",
    107         "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}",
    108         "Snapshot=t52.inf",
    109         "Mode=HTML",
    110         ITEMDATA,
    111         "Name=times", "Value=3", ENDITEM,
    112         LAST);
    113 lr_end_transaction("页面加载",LR_AUTO);
    114     return 0;
    115 }
    View Code

    录制完成,设置LoadRunner的运行代理功能,主要是方便Fiddler工具抓取HTTP请求(Fiddler只能通过代理方式抓取请求,不支持网卡抓取)。

    脚本执行:

            使用录制好的脚本,新建测试场景,这里不要建的过于复杂,只要能让脚本运行一次即可。运行成功后,从Fiddler上抓取的HTTP请求瀑布图看,6个并发的动态请求,全部变为串行执行,页面的加载时间由原来最大的请求时间决定,现变为6个请求时间之和(11.7秒),相同网络下,真实结果为:1-4秒不等。

       

         

    kylinPET脚本录制并运行

    录制完成后,设置proxy代理,方便fiddler抓取HTTP请求

      

    脚本执行

    从执行结果看,页面加载事务时间是2.8秒,Fiddler的抓包图看,最后6个动态请求是并发请求。

    总结

        对于页面的动态请求,LoadRunner 12.60版本(笔者采用发稿时最新版本),是串行请求,导致测试结果的页面加时间变长,而kylinPET是并发请求(与真实浏览器情况相同),测试结果更接近于浏览器的真实结果 。

    也就是说LoadRunner 12版本,对于静态请求的测试结果与真实情况比较接近,而如果是动态的请求,变得非常不可信。这也是为什么论坛中有人说,测试结果与真实结果差距大的原因。

  • 相关阅读:
    bzoj1951 [Sdoi2010]古代猪文
    bzoj2693 jzptab
    数学一本通第三章总结
    poj1019 Number Sequence
    SGU179 Brackets light
    字母组合2
    字母组合
    Java基础知识强化之集合框架笔记09:Collection集合迭代器使用的问题探讨
    Java基础知识强化之集合框架笔记08:Collection集合自定义对象并遍历案例(使用迭代器)
    Java基础知识强化之集合框架笔记07:Collection集合的遍历之迭代器遍历
  • 原文地址:https://www.cnblogs.com/kylinTOP/p/14290424.html
Copyright © 2011-2022 走看看