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

今天接着翻译http://www.wilsonmar.com/1lrscrīpt.htm上面关于LR脚本编写部分.

VUser_Init部分

这里是Vuser_init部分的一些例子:

操作系统的User ID

下面显示了使用advapi32.dll的GetUserNameA函数获得的操作系统的用户ID

char	sUserID[1024]; // Maximum possible UserID length.
long lUserIDSize = sizeof(sUserID)-1;
int rc; rc=lr_load_dll("advapi32.dll");
if( rc != 0 ){
lr_error_message("lr_load_dll of advapi32.dll failed. Aborted for rc=%d",rc);
lr_abort();
}else{
GetUserNameA(sUserID, &lUserIDSize);
lr_message("UserID='%s'", sUserID);
}
所有的变量声明需要一块放到最上方。在vuser_init 部分创建的本地C变量(如 int或char)对其他部分的脚本是不可见的。所以使用lr_save_string函数来创建对所有脚本可用的全局参数。例子:
char *itoa ( int value, char *str, int radix );
vuser_init(){
int x = 10;
char buffer[10];lr_save_string(itoa( x, buffer, 10) , "pX" );
lr_message ( "int x = %s", lr_eval_string("{pX}" ));
return 0;
}
 
 
运行时设置的附加属性(Additional Attribute)
8.0版本引进了一个非常有价值的特性:在运行时设置中指定属性,这个属性可以对不同的虚拟用户组设置不同的值。

 
下面的代码是从运行时设置的附加属性中读取名为“usertype”的参数。然后使用参数值来对应的设置全局的"thinktime1"变量。
int thinktime1=0;
vuser_init()
{

      LPCSTR strUsertype; // Define *str.
      strUsertype =

lr_get_attrib_string

      ("usertype");
      if (strUsertype==NULL){

        lr_output_message("### Run-time Settings Additional Attribute usertype not specified. Cannot continue.");
        lr_abort();

      }else{

        lr_message("### Run-time Settings Additional Attribute usertype=\"%s\"", strUsertype );
        if( strcmp( strUsertype,"advanced") == 0 ){ thinktime1=2; }
        else
        if( strcmp( strUsertype,"intermediate") == 0 ){ thinktime1=4; }
        else
        if( strcmp( strUsertype,"basic") == 0 ){ thinktime1=8; }
        else{
          lr_error_message("### ERROR: Value not recognized. Aborting run." );
          lr_abort();

        }

      }

    return 0;

}

 
Time Structure Fix(不知道怎么翻译,呵呵,“时间结构的解决“?)
根据知识库34195的文章,默认当前时间戳的毫秒部分不被更新,除非ftime使用的时间结构被重新定义:
 
 
typedef long time_t;
struct _timeb {
time_t time;unsigned short millitm;short timezone;
short dstflag;
};
struct _timeb t;
_tzset(); \\ 使用ftime设置变量
_ftime( &t );
lr_message( "Plus milliseconds: %u", t.millitm );
控制信息的显示:
在运行时,当脚本的事务失败后继续,你怎么知道哪个用户失败了?

在每个失败的事务之后,发出一个能够唯一确定该用户的信息。
Loadrunner提供了一些函数来在运行时显示信息:
  • // 往输出日志上发送消息,这个消息前边会带有action 的名称和行数
    lr_output_message("an output message");

    例子:

  • Actions.c (4): an output message
  • // 往输出日志和虚拟用户日志上发消息:
  • lr_message("*** a message"
      +"\r"+"A new line."

        );

把");"放到另一行,这样可以容易的在命令上添加或者删除代码项。

UNIX/Linux机器上,使用 "\n"来添加一个换行。

Windows机器上,使用"\r"来添加一个换行。

// 往输出日志上发送不带action名称和行数的信息
lr_log_message("number\t"+ numvar +"\t");

// 只给控制器上的虚拟用户状态区域发送信息(当在VuGen中运行时,只是简单的显示):
lr_vuser_status_message("a vuser status message");

// 给LoadRunner控制器或者Tuning模块的控制台输出窗口显示一个红色高亮度显示的-17999 信息。
lr_error_message("an error message");

使用lr_error_message将会使日志信息堆栈在每个新的action开始时被自动清空。如果选择了"当错误发生时才发送消息", 这些信息仍然被创建在"日志信息堆栈"里, 但是被压缩了(没有显示),直到监测到一个错误。

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

loadrunner学习系列---脚本编写(2)的更多相关文章

  1. Loadrunner之HTTP脚本编写

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

  2. loadrunner 接口性能脚本编写(Get请求和Post请求)

    前段时间接触了一下loadrunner的接口性能测试,然后尝试了一下手动编写脚本,毕竟录制这种东西,不是每次都能通的,而且录制下来的脚本,通常是有很多其他杂七杂八的请求夹杂在中间,没有达到真正的压测接 ...

  3. shell 学习之脚本编写1

    脚本要求: 执行脚本后 接受输入1,显示当前时间,并提示是否继续选择. 接受输入2,显示CPU负载,并提示是否继续选择.  接受输入3,显示剩余内存,并提示是否继续选择. 接受输入0,退出脚本. ·· ...

  4. jmeter系列-------脚本编写格式

    1.通常会将用户和服务器的一次交互(页面访问或者提交)请求放在一个简单控制器或者事务控制器,例如微课首页里面包含4个接口都放到简单控制器里 或者一个提交可能,会触发3个接口,那么这3个接口放到一个简单 ...

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

    Loadrunner学习---脚本编写(1) 中午看了两集<奋斗>发现越看越想看,但是想到好不容易没上班,在家还是赶紧学习下LR的知识吧.下面这个网页的文章原来也是看过的,但发现没几天就忘 ...

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

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

  7. Python大法之告别脚本小子系列—信息资产收集类脚本编写(下)

    作者:阿甫哥哥 原文来自:https://bbs.ichunqiu.com/article-1618-1.html 系列文章专辑:Python大法之告别脚本小子系列目录: 0×05 高精度字典生成脚本 ...

  8. LoadRunner脚本编写(转)

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

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

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

随机推荐

  1. Unity NGUI 粒子的排序

    Unity NGUI系统中是没有对粒子进行排序的,如: 怎么解决这个问题呢? 思路是把粒子的渲染层级,相对于UI组件的层级进行一个偏移. 解决后的效果如下: 代码如下: using System.Co ...

  2. 使用QSlider

    1.当绘制的线性图等需要水平拖动的时候(不用qwt里面的函数),可以用QSlider,代码如下 ui.horizontalSlider->setMaximum(); //需要拖动的越缓慢,平滑它 ...

  3. CSS代码命名惯例语义化的方法

    CSS代码的命名惯例一直是大家热门讨论的话题.今天暴风彬彬想通过分析一个流行三栏布局中的必要元素,来为大家讲解关于使用语义化方法替代结构化方法来命名CSS类的建议和指导. 您还可以参考彬Go的相关文章 ...

  4. 【笔记篇】斜率优化dp(三) APIO2010特别行动队

    旁听了一波给舒老师和学弟的pkuwc面试讲座... 这里有一段隐身的吐槽, 想看的请自己想办法观看. 不想看的跳过这一段看似空白的东西就好了... 刚开始ATP学姐给我们讲了自己面试的时候的事情..描 ...

  5. CF475F meta-universe

    题意:给你一个无限大矩形中有一些planet,每次可以选择某一没有planet的行或列分割开矩形(分割开以后要求矩形不为空).问最后能分割成几个矩形? 标程: #include<bits/std ...

  6. 微信小程序传递URL中含有特殊字符

    小程序传递URL中含有特殊字符"="时,解决办法:先encodeURIComponent,取到值以后再decodeURIComponent 首先在A页面 var urls = en ...

  7. phonegap 开发指南系列----开始之前(1)

    在基于任何平台(安卓.ios等phonegap支持的平台)上做phonegap开发之前,需要安装 cordova 的 command-line interface (CLI) .CLI详细:http: ...

  8. xkl的各种沙雕低错

    13,特判判掉20分算不算? 12,linux用c++11编译: g++ -std=c++11 -o a a.cpp g++ a.cpp -std=c++11 -o a //g++ a.cpp -st ...

  9. docker-compose安装及docker-compose.yml详解

    1.下载安装 [root@cx-- ~]# curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-comp ...

  10. C++ 中vector数组的使用

    (1)头文件:#include<vector>.(2)创建vector对象: vector < 类型 > 名字;     例:vector<int> vec;(3) ...