Loadrunner学习---脚本编写(1)

中午看了两集《奋斗》发现越看越想看,但是想到好不容易没上班,在家还是赶紧学习下LR的知识吧。下面这个网页的文章原来也是看过的,但发现没几天就忘记了,为了加深学习的印象,特把它翻译出来。http://www.wilsonmar.com/1lrscrīpt.htm上是关于脚本编写的介绍.下面是第一部分,脚本的开发.

VuGen脚本文件的开发过程

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”。

为了避免重新编译,我使用命令行的变量和值得组合这样的批处理文件来调用控制器。例如:

REM LoadRun from LoadRunner 8.0 default installation location:
SET LR80=C:\Program Files\Mercury Interactive\Mercury LoadRunner\bin
cd %LR80%
wlrun.exe -TestRun c:\Temp\Scenario1.lrs-port 8080

脚本文件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代码块如下:

#includeas_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-Processoroptions 和1995 LCC-win32 Retargetable C Compiler/Linkerfrom 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);

Java语法:略

   OK,先到这里,休息一下,下期接着翻译LR脚本相关知识.

转自:http://www.51testing.com/html/66/34866-70001.html

Loadrunner学习---脚本编写(1)的更多相关文章

  1. LoadRunner学习---脚本编写(4)(比较重要)

    今天接着来翻译http://www.wilsonmar.com/中关于LoadRunner脚本编写部分,下面该翻译脚本编写中一些比较重要的部分了. Web用户Action 在VuGen中,脚本产生的默 ...

  2. Loadrunner之脚本编写

    先打开loadrunner的服务器(打开成功之后会出现一个绿色的X) 以订票系统为例(http://127.0.0.1:1080/WebTours/) 录制一个登陆的脚本. 利用C语言编写一个简单的脚 ...

  3. Loadrunner:脚本编写通用模板(Http协议类型)

    1. 背景 对于 Http协议,Loadrunner 脚本可以使用通用模板反复粘贴,只需要修改其中的 URL 和 传参,就可以完成一整个业务 2. Get 类型的接口 web_custom_reque ...

  4. LoadRunner接口脚本编写过程中遇到的问题及分享

    工作中需要接口测试,报文编辑器一条条手工发费时费力,因此考虑利用web_submit_data函数POST方法进行报文编辑.在报文编辑中主要遇到了三个问题,其中一个问题耗时两天查到问题所在,在这里与大 ...

  5. loadrunner学习系列---脚本编写(2)

    loadrunner学习系列---脚本编写(2) 今天接着翻译http://www.wilsonmar.com/1lrscrīpt.htm上面关于LR脚本编写部分. VUser_Init部分 这里是V ...

  6. Loadrunner之HTTP脚本编写

    Loadrunner之HTTP脚本编写 刚学习性能测试的时候还是建议以录制脚本为好,从录制的脚本中去了解脚本结构,各个函数的用法,慢慢再去尝试自己去编写脚本,如果想往技术方向发展,建议最好学习一门编程 ...

  7. LoadRunner脚本编写(转)

    性能测试工程师要懂代码么?答案是必须的.好多测试员认为在loadrunner中编写脚本很难很牛X ,主要是大多测试人员并未做过开发工作,大学的那点程序基础也忘记的差不多了.还有非计算机专业出身的测试员 ...

  8. Selenium2学习-018-WebUI自动化实战实例-016-自动化脚本编写过程中的登录验证码问题

    日常的 Web 网站开发的过程中,为提升登录安全或防止用户通过脚本进行黄牛操作(宇宙最贵铁皮天朝魔都的机动车牌照竞拍中),很多网站在登录的时候,添加了验证码验证,而且验证码的实现越来越复杂,对其进行脚 ...

  9. LoadRunner利用ODBC编写MySql脚本

    最近做了几周的LoadRunner测试,有一些心得,记录下来,以便以后查找. LoadRunner测试数据库是模拟客户端去连接数据库服务器,因此,需要协议(或者说驱动的支持).LoadRunner本身 ...

随机推荐

  1. 机械手相机9点坐标标定-基于C#+EmguCV

    很多初学者,都对标定概念模糊不清,分不清坐标系之间的关系,搞不清相机标定和机械手相机标定有什么关系,想当初自己也是一个人摸索了很久,本文将尽量给大家解释. 我们通常所说的相机标定分为两种,一种是相机参 ...

  2. webconfig节点值里的文字换行问题

    有时候会遇到在配置节点中配置文字的问题,比如: <add key="notice" value="温馨提示:1,感谢您访问; \n 2,谢谢来访"/> ...

  3. mdk keil 指定变量、函数存储位置,使用 Scatter-Loading Description File, __attribute__(("section“))

    0. 数据类型说明 主要包括4类: Code (inc. data) ,属于RO,也就是写的函数代码(包括代码中的变量) RO Data , 属于RO,使用const修饰的变量. RW Data, 属 ...

  4. Metasploit 模块和位置

    Metasploit Framework由许多的模块组成的. 一.Exploits(漏洞模块) 定义为使用“有效载荷(payloads)”的模块 没有“有效载荷”的攻击是辅助模块 二.Payloads ...

  5. Soci介绍

    soci是一个用C++封装的数据库访问库,目前通过 “前端(应用程序)/核心/后端(数据库适配)”模式支持firebird,mysql,sqlite3,oracle,postgresql,odbc多种 ...

  6. Java创建List、Map等集合对象的同时进行赋值操作

    title: Java创建List.Map等集合对象的同时进行赋值操作 date: 2019-11-28 23:25:47 tags: JavaSE categories: JavaSE 问题简介   ...

  7. redis config

    网络上抄袭过来的 然后顺序自己做点笔记 http://chembo.iteye.com/blog/2054021 这里有各个key 详细的描述 # redis 配置文件示例 # 当你需要为某个配置项指 ...

  8. 前端常用的库和实用技术之JavaScript面向切面编程

    Aspect Oriented Programming(AOP)面向切面编程是一个比较热门的话题. AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程 中的某个步骤或阶段,以 ...

  9. Java语言支持的变量类型有

    Java语言支持的变量类型有: 类变量:独立于方法之外的变量,用 static 修饰. 实例变量:独立于方法之外的变量,不过没有 static 修饰. 局部变量:类的方法中的变量.

  10. Android开发 string.xml资源添加参数

    挖坑:参考:https://www.cnblogs.com/leelugen/p/6685905.html