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 ;
}

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\tsetStatus}\\x00\\x01\\x00\\xFB\\x08\\x00\\x01\\x06\\x04info\\x18\\x00\\x01\\x06\rQB.StatusInfo\\x1D\\x00\\x01\\x00\\xDB\n\\x06 06af66d5bcf977fdbca23e395e73c51e\\x16 06af66d5bcf977fdbca23e395e73c51e \\x129\\x00\\x02\n\\x01Z:\\x10O)\\x00\\x01\n\\x0C\\x1C,0\\x0BA'\\x11]\\x00\\x0Cf\\x00p\\x01\\x0B\\x0B\n\\x01Z:\\x10O)\\x00\\x01\n\\x0C\\x1C,0\\x0BA'\\x11]\\x00\\x0Cf\\x00p\\x01\\x0B\\x0BF\\x071.0.0.0\\\\f\\x00p\t"
"\\x86\\x056.1.1怈\\xA0\\x12\\xB0\t\\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\tsetStatus}\\x00\\x01\\x00\\xFB\\x08\\x00\\x01\\x06\\x04info\\x18\\x00\\x01\\x06\rQB.StatusInfo\\x1D\\x00\\x01\\x00\\xDB\n\\x06 06af66d5bcf977fdbca23e395e73c51e\\x16 06af66d5bcf977fdbca23e395e73c51e \\x129\\x00\\x02\n\\x01Z:\\x10O)\\x00\\x01\n\\x0C\\x1C,0\\x0BA'\\x11]\\x00\\x0Cf\\x00p\\x01\\x0B\\x0B\n\\x01Z:\\x10O)\\x00\\x01\n\\x0C\\x1C,0\\x0BA'\\x11]\\x00\\x0Cf\\x00p\\x01\\x0B\\x0BF\\x071.0.0.0\\\\f\\x00p\t"
"\\x86\\x056.1.1怈\\xA0\\x12\\xB0\t\\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(); 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 ;
}

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

附加说明:

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

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

3)线程模式,节约资源

4)ip欺骗一定是用进程模式,一个进程模拟一个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。

设置完成,进行回放,完成!
 

LoadRunner内部介绍以及常见问题的更多相关文章

  1. 阿里云(四)Linux 实例常用内核网络参数介绍与常见问题处理

    Linux 实例常用内核网络参数介绍与常见问题处理 https://help.aliyun.com/knowledge_detail/41334.html

  2. LoadRunner 使用介绍

    功能介绍 安装流程 LoadRunner是一款测试系统行为和性能的负债测试工具,通过模拟上千万用户实施并发复杂以实时性能监控的方式来确认和查找问题.它是一款付费商业软件,开发商为HP,个人开发者可以使 ...

  3. redis介绍及常见问题总结

    1.redis c语言编写的一个开源软件,使用字典结构存储数据,支持多种类型数据类型 数据类型:字符串,字典,列表,集合,有序集合 2.redis特点 速度快:c语言实现的,所有数据都存储在计算机内存 ...

  4. LoadRunner简单介绍----性能自动化测试工具

    在做性能测试中,我认为技术可以说是武功心法,工具则是一把利剑,有一把好的利剑可以帮助自己更好的完成性能测试工作.在这里简单介绍一下LoadRunner,带大家一起来认识一下这把尚方宝剑. 一.性能测试 ...

  5. EasyUI介绍及常见问题

    JQuery Easy UI介绍 1.JQuery Easy UI环境搭建和调试: https://jingyan.baidu.com/article/67508eb4342f9f9cca1ce426 ...

  6. Linux实例常用内核网络参数介绍与常见问题处理---重要

    文章转载自:https://help.aliyun.com/knowledge_detail/41334.html 本文主要介绍如下几点内容,您可以根据实际需要选择. 查看和修改Linux实例内核参数 ...

  7. CentOS安装Oracle数据库详细介绍及常见问题汇总

    一.安装前准备 1.软件硬件要求 操作系统:CentOS 6.4(32bit)Oracle数据库版本:Oracle 10g(10201_database_linux32.zip)最小内存:1G(检查命 ...

  8. java虚拟机内部介绍

    一.介绍 java 的内存管理和垃圾回收在某种程度是同一个问题来着.对于java程序员来说,在虚拟机自动内存管理机制的帮助下,不在需要为每一个new操作去写配对的delete/free代码,不容易出现 ...

  9. Linux 实例常用内核网络参数介绍与常见问题处理

    本文总结了常见的 Linux 内核参数及相关问题.修改内核参数前,您需要: 从实际需要出发,最好有相关数据的支撑,不建议随意调整内核参数. 了解参数的具体作用,且注意同类型或版本环境的内核参数可能有所 ...

随机推荐

  1. Zynq-PL中创建AXI Master接口IP及AXI4-Lite总线主从读写时序测试(转)

    转载:原文  http://www.eefocus.com/antaur/blog/17-08/423751_6cc0d.html 0. 引言 通过之前的学习,可以在PL端创建从机模式的AXI接口IP ...

  2. Linux文件系统命令 ln

    命令:ln 功能:Linux下文件的链接功能,区别,软链接需要-s选项,硬链接不需要.相同的是,都是同步变化的,不过软链接不需要占用空间,硬链接占用空间 用法:软链接:ln -s 源文件 目标文件 硬 ...

  3. synchronized(三)

    package com.bjsxt.base.sync003; /** * 对象锁的同步和异步问题 * @author alienware * */public class MyObject { pu ...

  4. centos /data目录扩容

    /data盘被日志撑死了,必须扩容 有一块现成的100G的/dev/sdb盘,但是mount到了/data/test目录下,而且还有应用程序在上面进行读写操作 1.先查看哪些应用程序 在占用磁盘 #f ...

  5. Java Editplus编译环境配置

    java jdk 安装win10 配置:此电脑--属性--高级系统设置--环境变量--系统变量-->新建--变量名--JAVA_HOME 变量值--浏览目录--jdk安装路径jdk...--&g ...

  6. vue mapbox 地图 demo

    执行以下命令: npm install --save mapbox-gl// cnpm install --save mapbox-gl <template> <div style= ...

  7. JavaScript中的函数-7---函数的作用,定义,调用

    JavaScript中的函数 函数也是对象,并且是javascript中的一等公民,可以用来创建普通对象.对象只是属性和值的集合 学习目标 1.掌握函数的作用 2.掌握函数的定义 3.掌握函数的调用 ...

  8. GitHub使用教程、注册与安装

    GitHub注册与安装 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请调整网页缩放比例至200%) 1 进入GitHub官网:http ...

  9. flask使用蓝图,创建副本

    随着flask的发展,flask框架越来越复杂,我们需要进行模块化处理,因为之前学过python模块化管理,我可以对一个flask程序进行简单的模块化处理. 我们都有一个博客程序,由此可知博客的前端界 ...

  10. java-Integer类

    1.为什么会有基本类型包装类 * 将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据. 2.常用操作 * 常用的操作之一:用于基本数据类型与字符串之间的转换. * Intege ...