发布网友 发布时间:2小时前
共1个回答
热心网友 时间:1小时前
在性能测试中,对于飞机订票、短信息和股票等动态变化的数据,传统的录制方式无法动态发送请求信息。这主要是因为脚本将发送的请求写成固定值,无法适应动态变化的业务需求。为解决这一问题,可以引入异步技术,实现动态处理这些信息。
### 同步与异步的区别
通常的Web功能使用同步方式处理请求,具体步骤如下:
1. 用户使用Web浏览器与服务器交互。
2. 根据用户输入,浏览器向服务器提交请求。
3. 服务器响应请求,更新客户端信息。
同步方式的主要缺点是无法动态显示服务器的动态数据,如股票价格。理想情况下,客户端应能动态显示服务器端更新的数据,例如,每10秒自动获取最新的股票价格。
异步方式则允许服务器在发现事件变化时,立即通知客户端,从而实现更高效的数据更新。客户端无需等待服务器处理完成,可以在处理请求的同时处理其他任务。一旦服务器处理完成,会自动通知客户端更新。
在性能测试中,LoadRunner提供异步处理API函数,用于处理服务器动态更新值的业务。通过这些API,可以避免每次回放时将动态值写为固定值,更准确地模拟用户行为。
异步处理有多种方式,包括堆、轮询和长轮询。详细原理将在6.5.2章节中阐述。
### 异步通信方式
异步通信由请求和响应序列组成。主要方式有:
1. **轮询异步通信**:客户端定期向服务器发送HTTP请求,如每5秒一次。如果服务器有数据更新,会立即响应请求;没有更新则继续发送请求。原理图见6-63。
2. **长轮询异步通信**:服务器接收请求后,如果有数据立即响应,没有则等待一段时间。如果这段时间内有数据,服务器会立即响应;否则响应HTTP请求。浏览器收到响应后立即发送新请求。原理图见6-。
3. **堆异步通信**:客户端打开连接,向服务器发送HTTP请求,服务器在必要时向客户端发送“子消息”更新状态。服务器无更新时,会发送“ping”消息防止连接超时。原理图见6-65。
### 创建异步脚本
在录制脚本时,LoadRunner会自动扫描是否需要异步处理。若脚本包含异步数据,录制完成后会弹出Async设置对话框,显示异步处理情况。以去哪儿订票系统为例,介绍如何创建异步脚本。
1. **选择HTTP/HTML协议录制脚本**:异步处理仅适用于HTTP/HTML、Flex、Silverlight和Web Services协议。
2. **设置Async Scan选项**:在Recording Options界面,选择General->Code Generation标签页,确保Async Scan复选项选中。
3. **配置异步请求参数**:进入Asynchronous Request Thresholds对话框,设置最小响应大小、最大子消息大小、最小有效子消息数、轮询时间间隔和长轮询响应时间。
4. **开始录制脚本**。
5. **扫描并处理异步信息**:业务录制完成后,VuGen会自动扫描是否需要异步处理。如果发现异步信息,会显示相关设置。
### 异步函数
LoadRunner中的异步通信API包括web_reg_async_attributes、web_stop_async等。本章节将重点介绍web_reg_async_attributes和web_stop_async。
**web_reg_async_attributes**:用于设置异步通信参数,包括ID、URL、模式、间隔时间等。
**web_stop_async**:用于结束异步会话。
### 异步函数参数详解
**web_reg_async_attributes**参数包括ID、URL、模式、间隔时间等。ID是会话标识,URL是请求地址,模式设置异步方式,间隔时间是等待时间。其余参数如XMLHttpRequest、CrossStep等控制请求处理和响应等待。
### 异步会话ID规则
会话ID命名规则:不能为空、以下划线开头、首尾不能为空格、不含控制字符和描述性能控制字符。ID对空格敏感,但URL字符转换为小写后不进行其他操作。
### URL和Pattern设置
URL表示请求地址,可使用正则表达式或不区分大小写。Pattern设置异步通信模式,包括堆、轮询和长轮询。
### 异步回调函数
在脚本中添加回调函数,如RequestCB、ResponseBodyBufferCB和ResponseCB,用于处理请求、响应缓存和最终响应。VuGen会自动在web_reg_async_attributes函数中添加这些回调函数。
### 修改回调函数
可以修改回调函数中的代码,如修改请求URL或请求体内容,实现更动态的业务流程。
### 总结
本章节详细介绍了性能测试脚本编辑中的关键技术,包括检查点、Block块、参数化和关联技术。其中,异步通信是必须掌握的,需要理解其原理和API函数的使用方法,以准确模拟动态变化的业务需求。