• 录毛线脚本,直接手写接口最简洁的LoadRunner性能测试脚本(含jmeter脚本)


    近日翻看了下招聘信息,很多都要求loadrunner和jmeter这两款工具,毕竟是性能测试的主流客户端并发工具。

    录制的问题

    做性能脚本是性能测试的基本功,loadrunner和jmeter这两款工具都提供录制的功能,经常在群里看到有测试朋友问录制脚本的问题:

            1、录制不到脚本;

            2、浏览器卡死;

            3、录制的脚本杂乱;​

            4、其它问题;

    loadrunner录制可以参考:LoadRunner原理、使用流程及脚本实战,jmeter录制可以参考:https://www.cnblogs.com/UncleYong/p/10990053.html

    我以前最开始学的时候也遇到过这个问题,很苦恼,哪怕录到了,录的还乱七八糟(各种css,js,img等),索性就不录了,直接抓包手写吧

    听起来好高大上啊,其实很简单,抓包获取请求的参数即可,可以用谷歌F12或者火狐插件firebug、或者fiddler

    通常情况下,我们测试性能先要做单场景测试,即某个功能的性能测试,这里用谷歌F12抓包loadrunner自带的订票系统登录功能来演示

    前提需要安装loadrunner,参考:https://www.cnblogs.com/UncleYong/p/10698925.html

    手写loadrunner脚本

    启动服务后,谷歌浏览器访问:http://127.0.0.1:1080/WebTours/

    按F12,然后输入用户名和密码(jojo/bean),登录

    登录成功

    下面是F12抓到的请求,login.pl就是登录请求

    点击login.pl这个请求,在最下面可以看到请求参数,是form表单

    点击view source,可以看到&符号连接的键值对

    为了把上面字符串处理成loadrunner传参的样式,专门写了一个脚本来处理(需要脚本的可以关注【全栈测试笔记】联系作者),处理结果是:

    "Name=userSession","Value=118674.760955853zVAtDDDpAVzzzzzHDzzcfpQQiV",ENDITEM,
    "Name=username","Value=jojo",ENDITEM,
    "Name=password","Value=bean",ENDITEM,
    "Name=login.x","Value=41",ENDITEM,
    "Name=login.y","Value=8",ENDITEM,
    "Name=login","Value=Login",ENDITEM,
    "Name=JSFormSubmit","Value=off",ENDITEM,
    

    userSession每次都不一样,是登录之前服务器返回的,经过查找,是下面这个请求返回的

    所以,这里需要用到关联,loadrunner关联参考:https://www.cnblogs.com/UncleYong/p/10702702.html

    所以,下面两个请求是登录必须的

    这里,登录后,我们要判断是否登录成功

    登录成功的返回结果 

    登录成功,loadrunner的日志

    为了精准找到登录成功和失败的差异,​退出后,用错误的用户名或密码登录,得到登录失败的响应信息

    通过工具对比,在body中查找frame src=的值比较靠谱

     

    照葫芦画瓢,打开loadrunner,按F1,在帮助手册中搜索对应的方法,复制里面相应的例子改改即可。

    如果是get请求,搜索web_url;​

    如果是post请求:    ​    

        ​表单提交,搜索web_submit_data;    ​    ​

        传json,搜索web_custom_request;

    完整脚本

     Action()
    {
    //     lr_start_transaction("hp_homepage");
    //         web_url("hp_homepage","url=http://127.0.0.1:1080/WebTours/",LAST);
    //     lr_end_transaction("hp_homepage", LR_AUTO);
    
        //web_reg_save_param("userSession","LB=name=userSession value=","RB=>","Search=body",LAST);
        web_reg_save_param_ex("ParamName=userSession","LB=name=userSession value=","RB=>",SEARCH_FILTERS,"Scope=body",LAST);
    
        lr_start_transaction("hp_webtours");
            web_url("hp_webtours","url=http://127.0.0.1:1080/WebTours/nav.pl?in=home",LAST);    
        lr_end_transaction("hp_webtours", LR_AUTO);
        lr_error_message("userSession=%s",lr_eval_string("{userSession}"));
        web_reg_save_param("result","LB=<frame src=","RB=?intro=true","Search=body",LAST);
        //web_reg_save_param("result","LB=login.pl?intro=","RB= ","Search=body",LAST);
        //判断事物的时候和true比较,if(strcmp(lr_eval_string("{result}"),"true")==0)
    
        lr_start_transaction("login");
            web_submit_data("login", 
            "Action=http://127.0.0.1:1080/WebTours/login.pl", 
            "Method=POST",
            "TargetFrame=", 
            "RecContentType=text/html", 
            "Referer=", 
            "Snapshot=t7.inf", 
            "Mode=HTML", 
            ITEMDATA, 
            "Name=userSession","Value={userSession}",ENDITEM,
            "Name=username","Value=jojo",ENDITEM,
            "Name=password","Value=bean",ENDITEM,
            "Name=login.x","Value=41",ENDITEM,
            "Name=login.y","Value=8",ENDITEM,
            "Name=login","Value=Login",ENDITEM,
            "Name=JSFormSubmit","Value=off",ENDITEM,
            LAST ); 
            //系统自动判断写为:lr_end_transaction("login", LR_AUTO);
            if(strcmp(lr_eval_string("{result}"),"login.pl")==0)
            {
                lr_end_transaction("login", LR_PASS);
                lr_error_message("log succes");
            }
            else{
                lr_error_message("log fail");
                lr_end_transaction("login", LR_FAIL);
                lr_error_message("log fail");
            }
        return 0;
    }
    

      

    设置日志打印服务器响应内容

    不下载非html资源

    请求后,日志返回的userSession(下面显示是Error红色,是因为脚本中用的lr_error_message来打印userSession,显示红色,方便查看)

    登录成功

    用其它用户登录,获取到的userSession也是OAA(具体原因未知),但是这样容易造成用户信息混乱,如果把主页的请求加上,增加如下代码,获取到的userSession就正常了,且登录成功

        lr_start_transaction("hp_homepage");
            web_url("hp_homepage","url=http://127.0.0.1:1080/WebTours/",LAST);
        lr_end_transaction("hp_homepage", LR_AUTO);

     

    获取到的userSession

    登录成功

    手写jmeter脚本 

    基于上面抓包及分析的结果,我们也可以直接写jmeter的脚本了

    http请求默认值:ip、端口

    信息头

    首页get请求

    登录页get请求

    正则表达式提取userSession

    登录请求

    登录断言

    登录请求传参

    登录成功

    是不是感觉很简单?

     
  • 相关阅读:
    Python IDE
    Codeforces Beta Round #69 Div1
    HDU1595 find the longest of the shortest[最短路]
    MFC/OpenGL下的调色板
    ApacheCN 编程/大数据/数据科学/人工智能学习资源 2019.12
    计算机电子书 2016 BiliDrive 备份
    计算机电子书 2017 BiliDrive 备份
    Java项目中常见的异常处理
    从小工到专家第三次读后感
    《梦断代码》读后感1
  • 原文地址:https://www.cnblogs.com/uncleyong/p/6871486.html
Copyright © 2020-2023  润新知