现在的位置: 首页 > 综合 > 正文

性能测试从零开始–读书笔记

2014年02月07日 ⁄ 综合 ⁄ 共 6169字 ⁄ 字号 评论关闭

author: selfimpr

blog: http://blog.csdn.net/lgg201

mail: lgg860911@yahoo.com.cn

 

感谢51testing

的柳胜前辈精彩的讲解

以下是我的读书笔记, 在公司是程序员, 工作需要, 简单学习一下, 分享出来, 不足之处, 请邮件指点, 谢谢.

 

 

Vuser

脚本语言基础

1

脚本结构

:

1.1

vuser_init:

脚本初始化操作

,

一般放置登录操作

,

分配内存等

,

在播放

vuser_init

, Controller

Vuser

状态区域会显示

initialize

状态

1.2

Action:

虚拟用户要做的业务操作

.

1.3

vuser_end:

vuser_init

对应

,

做收尾工作

.

2

脚本中使用的三种函数

2.1

VU

通用函数

: lr_

系列函数

2.2

协议相关函数

:

一般以协议名开头

,

比如

web

协议就是

web_

系列

2.3

语言相关函数

:

VU

脚本的生成语言决定

.

多用于用户自定义函数进行脚本扩展

.

3

C

语言的

VU

脚本为例

,

实际上是隐式的存在

main

函数的

,

然后在

main

中去依次调用了

vuser_init, Action, vuser_end

几个函数

.

4

录制

HTTP

协议的

web

系统测试脚本时

,

会生成一个

globals.h

文件

,

这个文件用来负责

vuser_init,
Action, vuser_end

三个脚本都可用的全局变量的声明

.

5

lr_whoami(*userid, char
**groupname, int *sceneid)

可以用来获取当前运行

vuser

vuserid,

组名

,

场景

id,

在动态参数化的时候

,

可以使用这些值来构建动态参数

.

6

自定义函数

:

6.1

直接引用

:

C

语言产生的脚本

,

可以直接在

Action

外部定义函数

,

然后在

Action

内使用

.

6.2

本地加载

:

使用

lr_load_dll(char *dll_file_name);

加载动态链接库

,

然后调用库中的函数

.

6.3

include

模式

:

把多个函数写在一个文件中

,

vuser_init,
Action, vuser_end

中的

include

并调用

6.4

全局加载

(dll)

模式

:

LoadRunnder/data

目录下的

mdrv.dat

文件中

,

查找对应协议

,

然后在下面按照已有内容格式配置链接库即可

7

通用

vu

函数

:

构建在

C

语言基础上的脚本框架函数

,

lr

开头

,

分为以下几类

7.1

事务和事务控制函数

:

7.1.1

lr_end_sub_transaction:

标记子事务的结束以便进行性能分析

7.1.2

lr_end_transaction:

标记

LoadRunner

事务的结束

7.1.3

lr_end_transaction_instance:

标记事务实例的结束以便进行性能分析

7.1.4

lr_fail_trans_with_error:

打开事务的状态设置为

LR_FAIL

并发送错误消息

.

7.1.5

lr_get_trans_instance_duration:

获取事务实例的持续时间

7.1.6

lr_get_trans_instance_wasted_time:

获取事务实例浪费的时间

7.1.7

lr_get_transaction_duration:

获取事务的持续事件

(

按事务名称

)

7.1.8

lr_get_transaction_think_time:

获取事务的思考时间

(

按事务名称

)

7.1.9

lr_get_transaction_wasted_time:

获取事务浪费的时间

(

按事务的名称

)

7.1.10

lr_resume_transaction:

继续收集事务数据以便进行性能分析

7.1.11

lr_resume_transaction_instance:

继续收集事务实例数据以便进行性能分析

7.1.12

lr_set_transaction_instance_status:

设置事务实例的状态

7.1.13

lr_set_transaction_status:

设置打开事务的状态

7.1.14

lr_set_transaction_status_by_name:

设置事务的状态

7.1.15

lr_start_sub_transaction:

标记子事务的开始

7.1.16

lr_start_transaction:

标记事务的开始

7.1.17

lr_start_transaction_instance:

启动嵌套事务

(

由它的父事务的句柄指定

)

7.1.18

lr_stop_transaction:

停止事务数据的收集

7.1.19

lr_stop_transaction_instance:

停止事务实例的数据收集

7.1.20

lr_wasted_time:

消除所有打开事务浪费的时间

.

7.2

命令行分析函数

:

LoadRunner

以命令行方式启动和运行时

,

以下函数用来分析命令行

7.2.1

lr_get_attrib_double:

检索脚本命令行中使用的

double

类型变量

7.2.2

lr_get_attrib_long:

检索脚本命令行中使用的

long

行变量

7.2.3

lr_get_attrib_string:

检索脚本命令行中使用的字符串

7.3

系统信息函数

:

获取

VU

的系统信息

7.3.1

lr_user_data_point:

记录用户定义的数据采集点

7.3.2

lr_whoami:

将有关

vuser

的信息返回给

vuser

脚本

7.3.3

lr_get_host_name:

返回执行

vuser

脚本的主机名

7.3.4

lr_get_master_host_name:

返回运行

LoadRunner Controller

的计算机名

7.4

字符串函数

:

7.4.1

lr_eval_string:

返回参数的当前值

7.4.2

lr_save_string:

将以

NULL

结尾的字符串保存到参数中

7.4.3

lr_save_var:

将变长字符串保存到参数中

7.4.4

lr_save_datetime:

将当前日期和时间保存到参数中

7.4.5

lr_advance_param:

前进到下一个可用参数

7.4.6

lr_decrypt:

解密已编码的字符串

7.4.7

lr_eval_string_ext: lr_eval_string

的扩展

,

为指向包含参数数据的缓冲区的指针

7.4.8

lr_eval_string_ext_free:

释放由

lr_eval_string_ext

分配的指针

7.4.9

lr_save_searched_string:

在缓冲区中搜索字符串实例

,

并将该字符串实例保存到参数中

.

7.5

消息函数

:

7.5.1

lr_debug_message:

将调试信息发送到输出窗口

7.5.2

lr_error_message:

将错误消息发送到输出窗口

7.5.3

lr_get_debug_message:

得到当前的消息类

7.5.4

lr_log_message:

将输出消息直接发送到

output.txt

文件

,

此文件位于

vuser

脚本目录

7.5.5

lr_output_message:

将消息发送到输出窗口中

7.5.6

lr_set_debug_message:

为输出消息设置消息类

7.5.7

lr_vuser_status_message:

生成格式化输出并将其打印到

Controller Vuser

状态区域

7.5.8

lr_message:

将消息发送到

vuser

日志和输出窗口

.

7.6

运行时函数

:

7.6.1

lr_load_dll:

加载外部

dll

7.6.2

lr_think_time:

暂停脚本的执行

,

以模拟思考时间

7.6.3

lr_continue_on_error:

指定脚本如何处理错误场景

,

是继续还是退出

7.6.4

lr_rendezvous:

vuser

脚本中设置集合点

8

HTTP

协议函数

:

8.1

HTTP

协议

:

8.1.1

header

设置

:

8.1.1.1

web_add_header

8.1.1.2

web_clean_heander

8.1.2

点击链接

:

8.1.2.1

web_link(

文字链接

)

8.1.2.2

web_image(

点击图片链接

)

8.1.3

提交表单

:

8.1.3.1

web_submit_data

8.1.3.2

web_submit_form

8.2

web

系统设置

8.2.1

cache

设置

:

8.2.1.1

web_cache_leanup

8.2.1.2

web_load_cache

8.2.2

cookie

设置

8.2.2.1

web_add_cookie

8.2.2.2

web_cleanup_cookies

8.2.3

proxy

设置

8.2.3.1

web_set_proxy

8.2.3.2

web_set_secure_proxy

8.3

LoadRunner

框架支持

8.3.1

检查点

:

8.3.1.1

web_find

8.3.1.2

web_image_check

8.3.2

关联

8.3.2.1

web_create_html_param

8.3.2.2

web_create_html_param_ex

8.3.2.3

web_reg_save_param

8.3.2.4

web_set_max_html_param_len

8.3.3

控制

8.3.3.1

lr_start_transaction

8.3.3.2

lr_rendezvous

8.3.3.3

lr_think_time

用户行为模拟器

—VUSER

1

录制

HTTP

协议的脚本时

,

录制方式的选择原则

:

1.1

基于浏览器的应用程序使用

HTML-basedScript

1.2

不是浏览器的应用使用

URL-based Script

1.3

如果基于浏览器的应用程序中包含了

Javascript

并且该脚本向服务器产生了请求

,

比如

DataGrid

的分页按钮等

,

也要使用

URL-based

方式录制

1.4

给予浏览器的应用程序中使用了

HTTPS

安全协议

,

使用

URL-based

方式录制

.

2

几种有用的日志

:

脚本能够正常运行后

,

应当禁用日志以降低消耗

.

2.1

执行日志

:

2.1.1

脚本运行时产生

.

2.1.2

描述

Vuser

运行时执行的操作

2.1.3

黑色表示标准输出消息

,

红色表示标准错误消息

,

绿色用引号括起来的文字字符串

(

例如

URL),

蓝色表示事务信息

(

开始

,

结束

,

状态

,

持续时间

);

2.2

录制日志

:

在脚本录制过程中产生

,

详细描述录制过程中客户端与服务器之间的各种交互动作

.

2.3

产生日志

:

记录了脚本录制的设置

,

网络实践到脚本函数的转换过程

.

3

Tools/General Options/Display/Show
browser during replay

选中后可以在

VU

运行时查看浏览器活动

,

不过这只是一个不完整的解释器而不是浏览器

,

因此一些脚本可能会加载不完全

.

打开运行时查看器后在运行脚本时就会实时播放动作

.

4

关联

:

对于一些请求

,

需要以前面某次请求服务器响应的数据去作为请求参数

,

因此

,

不能把这些数据硬编码

,

而是以参数的方式提供

,

同样

,

要使用的前面某次请求响应的数据也要写入到变量中以便使用

.

5

录制前自动关联

:

在录制脚本之前

,

已知寻找需要关联数据和关联的规则

,

就可以通过为

VU

设置规则来让其自动关联

.

5.1

内建关联规则

:

对于一些常用系统

, VU

有内建的关联规则

,

通过

Recording Options/HTTP
Properties/Correlation

中启用关联规则

,

然后选择相应的关联规则

,

则在录制对应的系统时

,

就会自动建立关联

.

5.2

自定义关联规则

: Recording Options/HTTP Properties/Correlation

中建立新的关联规则

(

也需要启用关联

)

6

录制后自动关联

:

录制完成后

,

脚本至少需要执行一次

,

在执行中

,

录制后关联会试图找出录制时和执行时服务器响应内容的差异部分

,

藉以找出需要关联的数据并建立关联

.

7

手动关联

:

7.1

找出需要关联的数据

7.1.1

使用相同的业务流程和数据

,

录制两份脚本

7.1.2

使用

WinDiff

工具找出不同点

: Tools/Compare with Vuser

7.2

使用

web_reg_save_param

函数手动建立关联

7.3

web_reg_save_param

函数放在要检查内容的请求之前

7.4

原理

:

捕获第一个操作的输出

 

à

保存为参数

 

à

 

将参数作为另一个操作的输入

8

关联的用户和意义

:

8.1

简化和优化脚本代码

8.2

动态生成数据

: session

等服务器端返回数据的利用

8.3

支持唯一数据

9

除了显式的以

lr_start_transaction

控制事务外

,

还可以在

vuser

的运行时设置中的

miscellaneous

选项中定义自动事务

.

10

集合点

(

同步点

):

为了模拟较重的用户负载

,

需要模拟多个

vuser

同时向服务器发送请求

,

此时

,

就可以在

vuser

脚本中通过

lr_rendezvous

来创建集合点

, Controller

在遇到集合点时会暂停脚本

,

等待其他

vuser

到达后

,

一起释放

vuser

运行

. 

需要注意的是只能在

action

中添加集合点

,

而不能在

vuser_init

vuser_end

中创建

.

11

思考时间

:

为了模拟用户在操作过程中的停顿

,

可以用

lr_think_time

来设置思考时间

,

思考时间的单位是秒

.

有时测试不需要思考时间

,

这时就可以通过

Run-time Settings/Think time

中设置忽略思考时间

.

12

由于集合点和思考时间在

Controller

运行中都会产生等待

,

因此如果在事务中有这两项操作

,

就可能会对事务的响应时间产生影响导致结果不准确

.

13

参数化的过程

:

13.1

在脚本中用参数取代常量值

13.2

设置参数的属性以及数据源

.

14

参数数据源类型

:

参数的信息在脚本目录下的

脚本名

.prm”

文件中

14.1

Data Files:

数据保存在文件中

14.2

User-Defined Functions:

调用外部

dll

函数生成数据

14.3

Internal Data:

虚拟用户内部产生的数据

14.3.1

Date/Time:

用当前日期

/

时间替换参数

,

需要指定

Date/Time

格式

.

14.3.2

Group Name:

用虚拟用户组名称替换参数

14.3.3

Load Generator Name:

用脚本负载生成器的名称替换参数

,

负载生成器是虚拟用户在运行的计算机

14.3.4

Iteration Number:

用当前迭代数目替换参数

14.3.5

Random Number:

用一个随机数替换参数

14.3.6

Unique Number:

用一个唯一的数字来替换参数

.

14.3.7

Vuser Id:

用运行时分配给

Vuser

id

替换参数

15

Tools/General
Options/Parameterization

可以定义参数的括号类型

.

16

直接的参数化

,

只有在其作为函数参数时才能够使用

,

而且

,

有些函数的有些参数是不能被参数化的

,

在这种情况下

,

如果想要参数化

,

可以使用

lr_eval_string()

来代替要参数化的内容

,

而我们去参数化

lr_eval_string()

的参数

.

17

由于

lr_eval_string

返回的是一个指向参数值的指针

,

内容在每次

Iteration

后自动释放

,

因此

,

对于一个大的

Iteration,

如果使用

lr_eval_string

做参数化可能导致内存迟迟不能释放

,

此时可以使用

lr_eval_string_ext

lr_eval_string_ext_free

抱歉!评论已关闭.