• LoadRunner内部介绍以及常见问题


    Tools

    Recording Options

    接下来我们挨个看一下里面的东东以及区别

    General(通常的)

      Script,不用修改,是脚本的语言,我们一般都是基于 C 语言的

      Protocols:指的是协议,我们选的就是 HTTP 协议

      Recording

        HTML-based script(初学者用这个)——会把请求汇总,脚本会简介一些

        URL-based script(做熟了之后用这个)——每一个 URL 是一个单独请求,请求会有很多,详细

      HTML-based script 内的 Tree 视图只有一个请求:

      脚本如下:

    Action()
    {
    
        web_url("www.baidu.com", 
            "URL=http://www.baidu.com/", 
            "TargetFrame=", 
            "Resource=0", 
            "RecContentType=text/html", 
            "Referer=", 
            "Snapshot=t6.inf", 
            "Mode=HTML", 
            LAST);
    
        web_url("百度首页", 
            "URL=https://www.baidu.com/", 
            "TargetFrame=", 
            "Resource=0", 
            "RecContentType=text/html", 
            "Referer=", 
            "Snapshot=t7.inf", 
            "Mode=HTML", 
            LAST);
    
        web_url("s", 
            "URL=https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&ch=&tn=baidu&bar=&wd=besttest&rn=&oq=&rsv_pq=c34d645c0000bb68&rsv_t=0711mCQaaJ6hz3rDFU%2F%2B9IPRvD6ZKJcDhsyfKpcU8ELD5ZdB041RJFCccAA&rqlang=cn", 
            "TargetFrame=", 
            "Resource=0", 
            "RecContentType=text/html", 
            "Referer=https://www.baidu.com/", 
            "Snapshot=t10.inf", 
            "Mode=HTML", 
            LAST);
    
        web_url("s_2", 
            "URL=https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&ch=&tn=baidu&bar=&wd=besttest&rn=&oq=&rsv_pq=c34d645c0000bb68&rsv_t=0711mCQaaJ6hz3rDFU%2F%2B9IPRvD6ZKJcDhsyfKpcU8ELD5ZdB041RJFCccAA&rqlang=cn", 
            "TargetFrame=", 
            "Resource=0", 
            "RecContentType=text/html", 
            "Referer=https://www.baidu.com/", 
            "Snapshot=t11.inf", 
            "Mode=HTML", 
            EXTRARES, 
            "Url=/aladdin/tpl/right_toplist1/refresh.png", "Referer=https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&ch=&tn=baidu&bar=&wd=besttest&rn=&oq=&rsv_pq=c34d645c0000bb68&rsv_t=0711mCQaaJ6hz3rDFU%2F%2B9IPRvD6ZKJcDhsyfKpcU8ELD5ZdB041RJFCccAA&rqlang=cn", ENDITEM, 
            LAST);
    
        return 0;
    }
    HTML-based script

     HTML-based script 内部也有可选的:

      这里注意不要选择 web_link 做脚本,要用web_url,也就是选第二个,为什么呢?

        web_link会有个什么过程呢,比如我们在淘宝内点商品的"详情",是显示点击"详情",再 link 到"详情"的 url 地址上。如果 link 的对象是个乱码,大概率找不到

        web_url 是直接点击"详情"url ,链接过去,也就是相当于效率更高,少了中间的跳转过程。

      URL-based scripts 内的 Tree 视图,详细点

      脚本内,图片之类的也会作为一个请求

    Action()
    {
        web_url("www.baidu.com", 
            "URL=http://www.baidu.com/", 
            "Resource=0", 
            "RecContentType=text/html", 
            "Referer=", 
            "Snapshot=t16.inf", 
            "Mode=HTTP", 
            LAST);
    
        web_url("百度首页", 
            "URL=https://www.baidu.com/", 
            "Resource=0", 
            "RecContentType=text/html", 
            "Referer=", 
            "Snapshot=t17.inf", 
            "Mode=HTTP", 
            LAST);
    
        web_concurrent_start(NULL);
    
        web_url("baidu_jgylogo3.gif", 
            "URL=https://www.baidu.com/img/baidu_jgylogo3.gif", 
            "Resource=1", 
            "RecContentType=image/gif", 
            "Referer=https://www.baidu.com/", 
            "Snapshot=t18.inf", 
            LAST);
    
        web_url("baidu_jgylogo3.gif_2", 
            "URL=https://www.baidu.com/img/baidu_jgylogo3.gif", 
            "Resource=1", 
            "RecContentType=image/gif", 
            "Referer=https://www.baidu.com/", 
            "Snapshot=t19.inf", 
            LAST);
    
        web_url("bd_logo1.png", 
            "URL=https://www.baidu.com/img/bd_logo1.png?qua=high", 
            "Resource=1", 
            "RecContentType=image/png", 
            "Referer=https://www.baidu.com/", 
            "Snapshot=t20.inf", 
            LAST);
    
        web_url("bd_logo1.png_2", 
            "URL=https://www.baidu.com/img/bd_logo1.png", 
            "Resource=1", 
            "RecContentType=image/png", 
            "Referer=https://www.baidu.com/", 
            "Snapshot=t21.inf", 
            LAST);
    
        web_concurrent_end(NULL);
    
        web_url("bd_logo1.png_3", 
            "URL=https://www.baidu.com/img/bd_logo1.png?qua=high", 
            "Resource=1", 
            "RecContentType=image/png", 
            "Referer=https://www.baidu.com/", 
            "Snapshot=t22.inf", 
            LAST);
    
        web_custom_request("wup.browser.qq.com_5", 
            "URL=https://wup.browser.qq.com/", 
            "Method=POST", 
            "Resource=0", 
            "RecContentType=application/multipart-formdata", 
            "Referer=", 
            "Snapshot=t23.inf", 
            "Mode=HTTP", 
            "EncType=", 
            "BodyBinary=\x00\x00\x01&\x10\x02,<LV\x0Bqbcloudctrlf	setStatus}\x00\x01\x00\xFB\x08\x00\x01\x06\x04info\x18\x00\x01\x06
    QB.StatusInfo\x1D\x00\x01\x00\xDB
    \x06 06af66d5bcf977fdbca23e395e73c51e\x16 06af66d5bcf977fdbca23e395e73c51e \x129\x00\x02
    \x01Z:\x10O)\x00\x01
    \x0C\x1C,0\x0BA'\x11]\x00\x0Cf\x00p\x01\x0B\x0B
    \x01Z:\x10O)\x00\x01
    \x0C\x1C,0\x0BA'\x11]\x00\x0Cf\x00p\x01\x0B\x0BF\x071.0.0.0\\f\x00p	"
            "\x86\x056.1.1怈\xA0\x12\xB0	\xC6\x00苕\x00\xFC\x0F\xFC\x10\xF6\x11\x00\xF0\x12\xFF\xF0\x13\xFF\xF0\x14\xFF\xF6\x15\x00\xFC\x16\xFC\x17\xFC\x18\xFC\x19\xF6\x1A\x00\xF6\x1B\x00\xFC\x1C\xFC\x1D\xFC\x1E\xFC\x1F\xF6 \x0E6.1.7601.17514\x0B寴\x0C\xA8\x0C", 
            LAST);
    
        web_url("bd_logo1.png_4", 
            "URL=https://www.baidu.com/img/bd_logo1.png", 
            "Resource=1", 
            "RecContentType=image/png", 
            "Referer=https://www.baidu.com/", 
            "Snapshot=t24.inf", 
            LAST);
    
        web_custom_request("wup.browser.qq.com_6", 
            "URL=https://wup.browser.qq.com/", 
            "Method=POST", 
            "Resource=0", 
            "RecContentType=application/multipart-formdata", 
            "Referer=", 
            "Snapshot=t25.inf", 
            "Mode=HTTP", 
            "EncType=", 
            "BodyBinary=\x00\x00\x01&\x10\x02,<LV\x0Bqbcloudctrlf	setStatus}\x00\x01\x00\xFB\x08\x00\x01\x06\x04info\x18\x00\x01\x06
    QB.StatusInfo\x1D\x00\x01\x00\xDB
    \x06 06af66d5bcf977fdbca23e395e73c51e\x16 06af66d5bcf977fdbca23e395e73c51e \x129\x00\x02
    \x01Z:\x10O)\x00\x01
    \x0C\x1C,0\x0BA'\x11]\x00\x0Cf\x00p\x01\x0B\x0B
    \x01Z:\x10O)\x00\x01
    \x0C\x1C,0\x0BA'\x11]\x00\x0Cf\x00p\x01\x0B\x0BF\x071.0.0.0\\f\x00p	"
            "\x86\x056.1.1怈\xA0\x12\xB0	\xC6\x00苕\x00\xFC\x0F\xFC\x10\xF6\x11\x00\xF0\x12\xFF\xF0\x13\xFF\xF0\x14\xFF\xF6\x15\x00\xFC\x16\xFC\x17\xFC\x18\xFC\x19\xF6\x1A\x00\xF6\x1B\x00\xFC\x1C\xFC\x1D\xFC\x1E\xFC\x1F\xF6 \x0E6.1.7601.17514\x0B寴\x0C\xA8\x0C", 
            LAST);
    
        lr_think_time(4);
    
        web_url("s", 
            "URL=https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&ch=&tn=baidu&bar=&wd=besttest&rn=&oq=&rsv_pq=c98662740000cd91&rsv_t=bdadbVHsYjtsVORU8UBw9%2F95s5P5XfStOtdF%2BBGRtJVUEwNj1gxvd3Jqe1A&rqlang=cn", 
            "Resource=0", 
            "RecContentType=text/html", 
            "Referer=https://www.baidu.com/", 
            "Snapshot=t26.inf", 
            "Mode=HTTP", 
            LAST);
    
        web_url("s_2", 
            "URL=https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&ch=&tn=baidu&bar=&wd=besttest&rn=&oq=&rsv_pq=c98662740000cd91&rsv_t=bdadbVHsYjtsVORU8UBw9%2F95s5P5XfStOtdF%2BBGRtJVUEwNj1gxvd3Jqe1A&rqlang=cn", 
            "Resource=0", 
            "RecContentType=text/html", 
            "Referer=https://www.baidu.com/", 
            "Snapshot=t27.inf", 
            "Mode=HTTP", 
            LAST);
    
        web_url("bd_logo1.png_5", 
            "URL=https://www.baidu.com/img/bd_logo1.png", 
            "Resource=1", 
            "RecContentType=image/png", 
            "Referer=https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&ch=&tn=baidu&bar=&wd=besttest&rn=&oq=&rsv_pq=c98662740000cd91&rsv_t=bdadbVHsYjtsVORU8UBw9%2F95s5P5XfStOtdF%2BBGRtJVUEwNj1gxvd3Jqe1A&rqlang=cn", 
            "Snapshot=t28.inf", 
            LAST);
    
        return 0;
    }
    URL-based script

       URL-based script,依照默认的无需修改

    Data Formate Extension(不需要管的东西)

    Network

      Port Mapping(代理录制的设置)

    要代理录制的话,首先 Program to record 内要选:wplus_init_websocket.exe,这个是 loadrunner 的代理录制器

    代理录制的原理:请求发到代理服务器,代理服务器再把请求发给服务器;服务器返回结果先给代理服务器,代理服务器再给客户端

    其次才是设置 Option 内的:

      Capture level:默认选 Socket level and WinNet level data

      但是这里有可能会出现重复请求,因为是选的俩东西,可能会给你显示多次,cut 掉就完了

      Edit Entry

      Target Server:最好填 ip 不要填域名

         Port:是啥写啥,http 默认 80,https 默认 443

      Server ID :协议类型,http/https……

      Service Type:默认 TCP

      Record Type:Proxy,转发即可

      Connection Type:Plain

      Traffic Forwarding:端口跟浏览器内设置的一致

    HTTP Properties(HTTP参数)

      Advanced  勾选 UTF-8 ,解决的是脚本的乱码,解决请求乱码,不能解决 Response 乱码

    General Options

      回放视图展示,可以帮助定位问题

    回放可看到 Runtime-viewer

    注释脚本

      ctrl+alt+c  注释脚本

      ctrl+alt+c  取消注释脚本

    Review log

      回放的 review log 成功不代表业务成功,这里只是会对状态码进行校验,所以这里要注意一下,那么业务成功与否可以结合回访视图内的状态进行观察,是否成功

      日志内绿色为成功的,

      蓝色为参数的值,关联出的值以及事务

      红色的为错误信息

    Runtime-Settings

    General

    Run Logic

    主要用来设置迭代次数,控制每个Action中脚本执行次数。

    思考:若Run Logic中配置迭代次数为4,压测时Global Schedule中设置运行时长为5分钟,则迭代次数怎么弄?5分钟就停了吗?

     

    解答问题的关键在于弄明白controller和迭代各自是控制哪里的,脚本运行时的执行顺序。如下是上述思考题的解答思路。

    一般跑压测的时候,Runlogic都设置为1,若脚本中本身没有循环,那就只有controller中一层时间循环,时间一结束脚本就停止运行。

    Pacing

      设置action迭代的等待时间

    Log

      打印出的回放日志级别,在 Review Log 内显示,压测过程中可以把日志关闭

      但是初学者在调试脚本的情况下,最好把日志打开,便于分析问题。并且要知道参数的值以及关联值,要勾选

    Think Time

      思考时间一般不加,路指出的脚本内也要删除,思考时间会增大 tps

    Miscellaneous

    附加说明:

    1lr默认50个线程为1个进程,压测进程进程名是mmdrv

    2)进程比线程处理速度快

    3)线程模式,节约资源

    4ip欺骗一定是用进程模式,一个进程模拟一个ip

    Network

    Speed Simulation

      2G时代用,现在基本不用了

    Browser

      Browser Simulation

    Internet Protocol

    Proxy

    Preferences

    HTTPS证书

      访问 https 协议的接口,会提示 ssl 错误:[GENERAL_MSG_CAT_SSL_ERROR] connect to host ……

      解决方案:

      1、    web_set_sockets_option("SSL_VERSION",
            "TLS");  #把这行写到请求最前(解决 80% 问题)

      并且,在virtual user generator 内,vuser->run-time settings->preferences->advanced里勾上WININET replay instead of Sockets。

      2、安装相关证书

    缺少证书的解决方案:

    1. 得到web网页的.cer证书
    2. 借助openssl转换证书的格式为perm
    3. loadrunner配置
     
    具体:
     
    1. Google浏览器中先得到web网页的.cer证书

    这边选择的格式需要记住,后续需要转换。
    选择要保存的路径和文件名,完成.cer证书的导出。
     
     
    2. openssl 转换证书格式
    LR只支持.perm格式的证书,需要借助openssl。

    ① 下载openssl

    官网的openssl貌似是win32的,win64不兼容
    http://www.start64.com/index.php/64-bit-software/64bit-security/884-openssl-for-windows-x64-version

    有时间也可以自己编译折腾一下(需要安装Perl、VS10、openssl),可以根据以下的教程来做:http://blog.csdn.net/houjixin/article/details/25806151

    ② 转换
    打开cmd,运行openssl
    中间打了马赛克的就是转换前后证书路径文件,一定要加上路径。
     
    • 路径不对会如下报错:

    • 转换的命令和cer文件的编译格式有关系,如果不对,会报如下错误:

    以下是openssl命令的格式:

    3. Loadrunner设置证书

    https的端口号就固定的443。

    设置完成,进行回放,完成!
     
  • 相关阅读:
    微服务下,使用ELK做日志收集及分析
    Spring boot下,集成任务调度中心(XXL-JOB)
    使用mysqldump 导出数据时的常用选项
    MySQL 批量insert 、单条insert
    分享一个 电子书下载网站 支持 ebook pdf azw3 epub mobi
    稀疏数组
    LaTeX 交叉引用系统简介
    服务器jupyter配置与ssh远程登录
    postgresql中终止正在执行的SQL语句
    Python 个人笔记(一)
  • 原文地址:https://www.cnblogs.com/xiaowenshu/p/10337062.html
Copyright © 2020-2023  润新知