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

author: selfimpr

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

mail: [email protected]

 

感谢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 配对使用来自己做清理工作 .

18 Vuser/Parameter List 中可以统一管理当前脚本中所有参数的属性 .

19 参数的 update value on 意义

19.1 each occurrence: 每发生一次换一个

19.2 each iteration: 每次迭代换一个

19.3 once: 所有循环中都使用同一个值

20 参数的 when out of values 的意义

20.1 Abort Vuser: 中止

20.2 Continue in a cyclick manner: 继续循环取值

20.3 Continue with last value: 取最后一个值

21 从数据库导入参数

21.1 利用 Microsoft Query 从已存在的数据库中导入参数数据 (Microsoft Query Office 的套件之一 , 没有安装开始菜单中的快捷方式 , 可以在 Office 安装目录下找 MSQRY32.EXE, 如果没有 , 可能是安装 Office 时没有安装 , 运行安装程序添加组件即可 )

21.2 指定数据库连接或 SQL: 在设置参数的界面如下顺序操作

21.2.1 点击 Data wizard

21.2.2 选择 Specify SQL statement manually

21.2.3 Creat

21.2.4 新建数据源 , 导入数据即可

22 检查点 : 对于 web 应用 , vuser 中的请求执行成功并不能代表业务流程是成功的 , 比如用户名密码错误也会返回 200 响应 , 所以 , 需要检查服务器的响应内容来判断业务流程是否执行成功 , 这个判断的点就是检查点 .

22.1 全局检查点 : 运行时设置中设置 ContentCheck, 这种检查点对于有统一出错处理页面的系统是有效的 .

22.2 检查函数 : 在一个请求完成后 , 运行检查函数 , 然后作出期望的处理返回 .

22.2.1 web_find: 检查文本

22.2.2 web_image_check: 检查图片

22.2.3 web_reg_find: web_find 类似 , 不过 , 这个函数是先注册 ( 在请求之前 ), 然后查找 , 并且 , 这个函数可以查找多次 , 通过 SaveCount 保存查找到的次数 .  另外 , 通过运行时设置设置的 enable image and text check web_find 有效 , 而对 web_reg_find 无效 , web_reg_find 只要写了就会查找 .

23 Action/Import Action into vuser 可以将其他 Action 引入进来

24 Run-time settings 中可以设置脚本的全局错误处理机制 ( 是否继续执行 ), 但是 , 对于某些特殊段的脚本如果期望得到特殊的效果 , 可以通过 lr_continue_on_error 函数来控制 , 该函数接受参数 0 1, 0 表示以下代码在发生错误时退出 , 反之则继续执行 .

25 动态运行 : Tools/General Options/Replay 中设置动态运行的延时 , 然后在 view 菜单内选择 Animated run 即可以进入动态运行状态 , 此时运行脚本每运行一句都会暂停设定的毫秒数 .

26 扩展日志选项的意义 :

26.1 参数替换 : 记录指定给脚本的所有参数及其相应的值

26.2 服务器返回的数据 : 记录服务器返回的所有数据

26.3 高级跟踪 : 记录 vuser 在会话期间发送的所有函数和消息 .

27 由于扩展日志内容较大 , 因此可以选择性的开启 , 以自定义函数方式 , 调用处理时同错误处理一样 .

void ud_log_extend(int switch) {

         lr_set_debug_message(LR_MSG_CLASS_EXTENDED_LOG, switch); // 设置扩展日志

         lr_set_debug_message(LR_MSG_CLASS_PARAMETERS_LOG, switch); // 设置参数替换日志

         lr_set_debug_message(LR_MSG_CLASS_RESULT_LOG, switch); // 设置服务器返回数据日志

         lr_set_debug_message(LR_MSG_CLASS_FULL_LOG, switch); // 设置高级跟踪日志

}

Action_test{

         ud_log_extend(1); /* 开启扩展日志 */

         web_link(“test”, “Text=test”, LAST);

         ud_log_extend(0); /* 关闭扩展日志 */

         return 0;

}

28 验证测试脚本的通常流程 :

28.1 录制或开发脚本

28.2 单用户单迭代 : 解决可能存在的关联问题

28.3 单用户多迭代 : 验证参数化问题

28.4 多用户单迭代 : 验证可能存在的多线程问题

28.5 多用户多线程 : 实际就是真正的性能测试开始 .

29 Tools/Create Controller Scenario 根据当前脚本创建场景

性能测试指挥中心 —Controller

1 手工场景 : 负载测试通常使用手工场景 , 首先设置虚拟用户数目 , 脚本 , 以及它们运行的方式 , 然后运行得出服务器的响应时间等指标 .

2 面向目标的场景 : 首先定义测试要达到的目标 , 然后 LoadRunner 自动基于这些目标创建场景 , 运行过程中 , 不断把结果和目标相比较决定下一步走向 .

3 虚拟用户组 : 一组用户指的就是针对同一个脚本的多个虚拟用户 , 在同一个场景中 , 可以用多个用户组使用同一个脚本 .

4 集合点 ( 同步点 ): 如果当前场景中的脚本中包含集合点 (rendezvous), 那么可以通过 Scenario/Rendezvous 打开集合点信息面板来设置集合点信息

4.1 点击 Policy 按钮 : 这里设置集合点的策略 . 三个 Release 选项用来设置释放集合点的策略 , timeout 表明第一个 vuser 等待一定时间后就不再等待 , 释放等待用户 , 继续执行场景 .

5 负载生成器 : 网内安装了负载生成器的机器都可以被同一个 Controller 控制用来生成负载 .

6 Controller 中可以对 vuser 组进行运行时设置 , 这里可以设置网络带宽来模拟真实的情况 .

7 schedule( 调度栏 ) 内可以设置 vuser 加载及卸载的方式等调度策略 .

8 Scenario/Convert scenario to the percentage mode 可以将场景转换为百分比模式 . 百分比模式的场景只是对场景内的 vuser group 中的 vuser 数量进行了百分比分配

9 面向场景的目标类型 : 一次只能设置一个目标 .

9.1 virtual users: 虚拟用户数量 , 如果测试服务器的并发处理能力 , 使用这个目标 .

9.2 hits per second: 每秒点击数 , 测试 web 的真正响应处理能力 .

9.3 transaction per second: 每秒事务数 , 这种目标需要选择事务名 .transaction response time: 事务响应时间 , 需要选择事务名 , 测试 web 的真正响应处理能力 .

9.4 pages per minute: 每分钟页面响应数

10 Controller 的加载策略 :

10.1 在使用 pages per minute, hits/transaction per second 这几种目标时 , 加载时首先用最小用户数除以定义的目标 , 得到一个值 , 然后确定每个用户应该达到的数据 , 然后 Controller 开始按照以下策略加载用户 :

10.1.1 如果选择的是自动加载 vuser, controller 会首先记载 50 vuser, 如果定义的最大用户数小于 50, 会一次加载所有的 vuser.

10.1.2 如果选择的是在场景运行一段时间后达到目标 , LoadRunner 会尝试在定义的这段时间内达到目标 , 根据时间限制和计算出的单用户数据确定第一批加载多少 vuser.

10.1.3 如果选择的是按照一定的阶段达到目标 ( 也就是 x 长时间内达到 y 数据 , 然后达到下一目标 ), LoadRunner 计算每个用户应该达到的数字后 , 再确定第一批加载多少用户 .

10.2 每加载一批用户 , LoadRunner 会判断是否达到这批用户的目标 , 如果这批用户目标没有达到 , LoadRunner 重新计算每一个用户应该达到的目标数字后 , 重新调整下一批加载用户数量 .

10.3 如果 Controller 加载了最多数量的用户还没有达到预订目标 , 会重新计算每个用户的目标 , 然后同时运行最大数量的用户 , 尝试达到预订目标

10.4 如果出现以下情况 , pages per minute, hits/transaction per second 三种类型的面向目标场景会置于 ”Failed” 状态 :

10.4.1 Controller 使用了指定的最大数量用户 , 并且两次都没有达到目标

10.4.2 所有的用户运行都失败

10.4.3 没有足够的 LoadGenerator 机器

10.4.4 Controller 增加了几批用户后 , pages per minute, hits/transaction per second 数据没有增加 .

11 IP 欺骗设置 : 应对某些服务器要求不允许单 IP 多登的测试 .

11.1 在负载生成器机器上 ( 必须使用固定 IP), “Windows 开始 ”/LoadRunner/Tools/Ip wizard 打开 IP 向导 , 根据向导配置 IP 列表 .

11.2 Controller , Scenario/Enable IP spoofer 打开 IP 欺骗

12 场景的运行时控制

12.1 场景开始运行后 , 可以通过 stop 按钮停止 , 但是停止的方式需要在运行之前通过 Tools/Options/Run-time settings 中设置好

12.2 场景开始运行后的 reset 按钮用来将方案中的所有 vuser 组重置为其方案前的关闭状态

12.3 Vusers 用来查看 vuser 组内每个 vuser 的详细状态

12.4 Run/Stop Vusers 打开 运行 / 停止 vuser” 对话框 , 在场景运行时决定是继续执行还是停止某个用户组 .

12.5 运行时释放集合点用户 : Scenario/Rendezvous 然后选定用户 disable vuser

13 如果系统提供的数据采集点不能满足需求 , 可以在脚本中用 lr_user_data_point 自定义数据采集点 .

14 判断磁盘瓶颈的方法 : 每磁盘 I/O = [ 读次数 +(4* 写次数 )]/ 磁盘个数 , 如果每磁盘的 I/O 数大于磁盘的处理能力 , 那么磁盘存在瓶颈 .

寻找系统瓶颈的得力助手 —Analysis

1 Analysis 功能 :

1.1 Analysis 图有助于确定系统性能瓶颈 .

1.2 图数据 视图和 原始数据 视图以电子表格格式显示用于生成图的实际数据 .

1.3 报告 功能可以使用户查看每个图的摘要 , HTML 报告或各种性能和活动报告 .

2 摘要报告 (summary):

2.1 Analysis summary( 统计摘要 ):

2.1.1 Maximum Running vusers: 最大同时运行用户数

2.1.2 Total Throughput(bytes): 吞吐量

2.1.3 Average Thoughput(bytes/second): 吞吐率

2.1.4 Total Hits: 总点击数

2.1.5 Average Hits per Second: 每秒点击数

2.1.6 View HTTP Responses Summary: 查看 HTTP 响应的摘要

3 Trasaction summary( 事务摘要 ):

3.1 Minimum: 事务最小时间

3.2 Average: 平均事务时间

3.3 Maximum: 事务最大时间

3.4 Std.Deviation: 标准方差 . 值越大数据越离散也就说明不稳定 .

3.5 90 Percent: 90% 的事务消耗的时间 , 通常这个值比总平均时间个更可靠 .

3.6 Pass/Fail/Stop: 通过 / 失败 / 中途停止的事务数

4 Average Transaction Response Time 图中 , 可以选择某个事务曲线 , 右键 ”Web Page Breakdown for login” 将事务进行分解 , 查看事务过程中每个请求的每一步是怎么样完成的 .

5 Time to first buffer breakdown(Over Time) 图中可以对比页面响应时间中的服务器时间和网络时间 , 从而分析是网络还是服务器造成的耗时 .

6 Page Download Time Breakdown(Over Time) 图中可以看出每次请求详细分解的请求时间 ( 包括客户端时间 , 连接时间 , DNS 解析时间 , 错误时间 , 首次缓存时间 , FTP 鉴权时间 , 接收时间 , SSL 处理时间等等 ).

7 图的合并 :

7.1 叠加 : 重叠共用一个 x 轴的两个图的内容 , 合并图使用左右两个不同的 y

7.2 平铺 : 共用同一个 x 轴的数据 , 但显示上上下分离 , 合并图仍然是左右两个不同的 y

7.3 关联 : 当前图的 y 轴成为合并图的 x , 被合并图的 y 轴是合并图的 y

8 可以使用 Reports 生成报告 .

 

你可能感兴趣的:(Web,String,测试,脚本,读书,loadrunner)