Loadrunner脚本编程(2)-VuGen脚本文件的开发过程
http://www.360doc.com/content/10/0806/13/1698198_44076570.shtml
1。定义测试项目的目标,环境,脚本,测试数据,硬件等。脚本应该符合编码规范或编码习惯。
2。创建一个版本文件夹来保存被测应用程序相关的各种不同资源,例如截获的.png/.gif图形文件,录制过程保存的html文件,录制中的所有html源文件和VuGen的录制日志。
3。列出(在表里)每一个手动操作业务过程需要的实际步骤
1)截取每一个屏幕图像(screen image )。
2)为每一个屏幕(screen)分配一个唯一的事务名称。
3)为处理的每一个步骤使用的技术组件(URL或者方法和函数)做注释。
4。创建一个版本文件夹。
注:我不喜欢使用默认位置,我喜欢把所有脚本相关的文件放到一个相同的文件夹中。不幸的是,这意味着如果我在不同的测试间互相交换录制,那我每次都得记住修改默认的设置。
注:当录制一个新的脚本时,我喜欢选择多协议而不是单个协议。。。
5。根据你的业务处理列表上指定的用户使用步骤和screen的顺序来使用VuGen录制程序,产生一系列脚本代码。在“开始录制”对话框中
* 使用COM/DCOM 协议时,选择“Win32应用程序“
* 使用Web(HTTP/HTML)时,选择“Internet Application“
6。根据改进脚本方法和脚本语言规则来修改脚本。
改进脚本的方法:
1)为每一个GUI的screen添加事务语句来获得事务时间。
2)添加显示数据来帮助调试。
3)添加验证点来验证是否期望的文本或者图片在每个脚本执行后显示。
4)通过插入新参数和动态获得整个文件的方式对硬编码的URL,用户id,用户密码和其他的变量数据进行参数化。这样脚本中的参数就可以被动态的替换,以此来模拟运行时不同数据的使用。
5)添加重试逻辑(retry logic)来处理不可见的错误。
6)添加随机函数发生器变化脚本来模拟真实的负载。
7)添加if/else逻辑来检查结果,或者来进行合适的操作,或者来在合适的时候退出脚本。
8)在一个screen中添加语句来捕获需要在其他命令中使用的数据。当使用Microsoft .NET的web form技术的时候,需要避免习惯性的“脚本超时“错误。
9)添加语句来调用外部库函数,以便保存和检索在内存Virtual Table Server中的数据。
10)处理XML.
11)添加语句来模仿客户端的Javascrīpt问题。
12)添加语句来管理超时。
13)从事务计时器中计算和减去无效的时间。
14)输出日志。
15)添加集合点。
16)添加时间(Timing)。
脚本语言规则:
把cookie代码标注出来(因为脚本运行的时候他们被再次执行)。
7。通过在VuGen中运行来调试和调整脚本(单个用户),同时运行时设置的日志能够显示如下信息:
辨别和解决脚本编辑错误。
决定timing.
设置初始运行设置的场景。
8。在控制器中使用full test Runtime Settings来运行脚本。
脚本录制和产生:
建立一个新脚本的第一步是选择一个单协议或多协议。
* 一些协议可能在多协议模式下不能用。
* 只有在多协议的GUI下你才能重新排列action
在使用Java协议之前,确保你在环境变量的路径下有JDK,否则你可能会遇到这个错误:
Error: Failed to find javac.exe Java Compiler in Path and JDK installation folder in registry. [MsgId: MERR-22981]
Error: Failed to get JRE version. Check that your PATH environment variable contains \bin directory. [MsgId: MERR-22986]
当选择Java协议的时候:
* 只有选择了“RMI Java”才能录制。
* 如果选择“Java user”,“开始录制”图标或菜单是灰色的。
当你打开一个新的脚本时,默认的脚本名称为“noname1”。下一个新的脚本名称为“noname2”,以此类推。
注:有顺序的录制多个动作(而不是录制一个动作,然后停止开始另一个动作)。这样能使你识别出在你脚本中需要关联的序列码(在例如PeopleSoft的程序中)。
注:每次修改脚本后,脚本都需要重新编译。
Java:略
脚本文件的调用:
VuGen是默认在你双击.usr后缀文件的时候被调用。
在这个文件里,Javascrīpt被指定为“Type=General-Js”。
为了避免重新编译,我使用命令行的变量和值得组合这样的批处理文件来调用控制器。例如:
脚本文件Action
主机上的代理发送的到服务器的请求是由虚拟用户生成器创建的(VuGen.exe)action的回放实现的。
Loadrunner创建的脚本有三部分:
* vuser_init 来初始化 Vuser。执行在这部分的虚拟用户的状态是"Init"
* Action 用来重复多次迭代 执行到这部分的虚拟用户的状态是"Running"
* vuser_end 推出虚拟用户。 执行到这部分的虚拟用户的状态是"Exiting"
如果你的脚本只需要执行一次,你仍然需要把这些脚本写到Action部分,因为在其他部分(vuser_init 和vuser_end)有些命令是不合法的或者会忽略掉。
VuGen允许脚本包含多个action。所以我为每一个screen创建一个新的action。
注:如果你想使用不同的用户登陆,就不要把登陆操作放到vuser_init中,而是放到action部分。
VuGen根据选择脚本选择协议的不同来添加不用的引用到“.h”头文件。
C的.h头文件
对于Web(HTTP/HTML)协议,
创建globals.h,包含内容:
#ifndef _GLOBALS_H
#define _GLOBALS_H
//--------------------------
// Include Files
#include "lrun.h"
#include "web_api.h"
#include "lrw_custom_body.h"
// recorded for web_custom_request functions.
//--------------------------
// Global Variables
#endif // _GLOBALS_H
对于COM/DCOM协议:略
C脚本语言的格式:
LoadRunner使用的没有进行微软扩展的ANSI C语法。任意最小的action代码块如下:
#include as_web.h // from LoadRunner's include folder.
Action1()
{
/* comment block
*/
// comment line
return 0;
}
C脚本编译/类库
当VuGen编译脚本时,产生一个"pre_cci.ci"文件,这个文件包含了所有action的代码和包含文件。这就是为什么会有语法错误“not writing pre_cci.ci”的原因。
控制器编译这些.ci文件为机器目标码。
VuGen在每一个脚本文件中自动创建一个lib文件夹,这个文件夹中包含了combined_lib.c文件。该文件包含了所有引用文件。
#include "lrun.h" 来定义 UNIX或者Windows的函数。
#include "globals.h" LoadRunner'的模版文件夹的其中一个。
#include "vuser_init.c"
#include "Action.c"
#include "vuser_end.c"
警告:当你使用类库中的函数却没有正确包含该类库的时候,你会收到一条错误信息:
Error -- Unresolved symbol
C类库
LoadRunner 使用 1994 GNU C Pre-Processor options 和 1995 LCC-win32
Retargetable C Compiler/Linker from the Free Software Foundation via
Chris Fraser of AT&T and Dave Hanson of Princeton.
附加的函数定义在 ANSI C library中。
外部的没有返回整型数的C函数需要在脚本的开头进行显式声明。例如,string函数中的 string tokenizer:
extern char* strtok(char *token, const char *delimiter);
Loadrunner脚本编程(2)-VuGen脚本文件的开发过程的更多相关文章
- [linux] shell脚本编程-xunsearch安装脚本学习
安装脚本setup.sh #!/bin/sh # FULL fast install/upgrade script # See help message via `--help' # $Id$ # s ...
- linux命令行与shell脚本编程 -----15控制脚本
常见的Linux系统信号 信号 值 描述 1 SIGHUP 挂起进程 2 SIGINT 终止进程 3 SIGQUIT 停止进程 9 SIGKILL 无条件终止进程 15 SIGTERM 可能的话终止进 ...
- 《Linux命令行与shell脚本编程大全》 第二十二章 学习笔记
第二十二章:使用其他shell 什么是dash shell Debian的dash shell是ash shell的直系后代,ash shell是Unix系统上原来地Bourne shell的简化版本 ...
- SVG脚本编程简介
本文主要介绍SVG的脚本编程,并分别给出放大.缩小,查询,鼠标事件等实例. 一. SVG简介 SVG,全称为Scalable Vector Graphics(可伸缩矢量图形).它是W3C制定的.用矢量 ...
- centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课
centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件.目录属性 shell数组简单用法 $( ) 和$ ...
- loadrunner脚本中写入脚本输出log到外部文件,分析参数取值方式
loadrunner脚本中写入脚本输出log到外部文件,分析参数取值方式 分类: 心得 loadrunner 我的测试 2012-04-01 12:52 2340人阅读 评论(0) 收藏 举报 脚本l ...
- ? 原创: 铲子哥 搜狗测试 今天 shell编程的时候,往往不会把所有功能都写在一个脚本中,这样不太好维护,需要多个脚本文件协同工作。那么问题来了,在一个脚本中怎么调用其他的脚本呢?有三种方式,分别是fork、source和exec。 1. fork 即通过sh 脚本名进行执行脚本的方式。下面通过一个简单的例子来讲解下它的特性。 创建father.sh,内容如下: #!/bin/bas
? 原创: 铲子哥 搜狗测试 今天 shell编程的时候,往往不会把所有功能都写在一个脚本中,这样不太好维护,需要多个脚本文件协同工作.那么问题来了,在一个脚本中怎么调用其他的脚本呢?有三种方式,分别 ...
- Linux-Shell脚本编程-学习-6-Shell编程-使用结构化命令-文件比较-case编程
这一片主要说test文件的比较,文件比较在日常使用的频率比较高,这里重点把每个部分都试着说说看 1. 检车目录 -d -d测试会检查指定的文件名是否在系统上以目录的形式存在,当我们要写文件到某个目录之 ...
- 深刻剖析VuGen脚本录制原理
扩展:深刻剖析VuGen脚本录制原理 LR中的VuGen组件,主要扮演一个proxy server的角色,在录制脚本时,记录下用户和服务器交互,然后自动生成脚本语言.在接下来的重放,或者大批量地加压时 ...
- Shell脚本编程30分钟入门
Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...
随机推荐
- MVC使用TempData跨控制器传递信息而无需记住key的名称
通常情况下,使用TempData需要记住key的名称,本篇体验:通过帮助类,实现对TempData的设置.获取.删除. 关于传递信息的类: namespace MvcApplication1.Mode ...
- xcode4 语法高亮和自动补全失效的解决办法
xcode4 语法高亮和自动补全失效的解决办法xcode4有一个bug,某些时候会造成类名的着色显示不出来,还有就是代码补全不能完全显示,而且没有参数. 解决方法: 首先关闭项目窗口,然后到Organ ...
- VirtualBox虚拟机内的系统时间无法调整的解决方法
VirtualBox虚拟机内的系统时间无法调整的解决方法 因试用某软件要求将系统时间设置在特定的日期,利用windows自带的调整日期/时间功能进行设置,发现过几秒钟就又恢复到和主机相同的时间了, ...
- GNU GRUB
Introduction GNU GRUB is a Multiboot boot loader. It was derived from GRUB, the GRand Unified Bootlo ...
- 我所遭遇过的游戏中间件--Scaleform
我所遭遇过的游戏中间件---Scaleform Scaleform帮助开发人员利用现代系统的三维硬件加速性能创建电影品质的菜单.游戏内HUD,动画纹理.迷你游戏以及移动游戏与应用.Scaleform作 ...
- 第一章 Java工具类目录
在这一系列博客中,主要是记录在实际开发中会常用的一些Java工具类,方便后续开发中使用. 以下的目录会随着后边具体工具类的添加而改变. 浮点数精确计算 第二章 Java浮点数精确计算 crc32将任意 ...
- VMware与Cisco DRAC中的virtual disk的对应关系
笔者面临的问题如下: 笔者有一台Cisco C240的服务器, 其中有十块容量一样大的SAS的local disk, 一块SSD. 其中的两块SAS盘组成了一个RAID 1的virtual drive ...
- Substring with Concatenation of All Words leetcode java
题目: You are given a string, S, and a list of words, L, that are all of the same length. Find all sta ...
- java读取某个目录是否有新增文件(轮询)
使用 commons-io 中的文件监控 jar包: package org.demo.file; import java.util.concurrent.TimeUnit; import org.a ...
- 如何配置Ubuntu 16.04 GRUB 2引导加载程序
正如你所知,GRUB 2 是大多数 Linux 操作系统的默认引导加载程序.GRUB 是 GRand Unified Bootloader 的缩写,它是 Linux 启动时首先要加载的一个程序,此后它 ...