• 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 in 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);

  • 相关阅读:
    360网盘书籍分享
    oracle11g字符集问题之一
    order by 的列名不能参数化,要拼sql
    oracle11g的冷热备份
    Spring 事务管理的使用
    Spring 事务管理的API
    事务总结
    Excel 单元格中内容的换行
    手动配置IP地址
    MyBatis 三剑客
  • 原文地址:https://www.cnblogs.com/zhengah/p/4272125.html
Copyright © 2020-2023  润新知