zoukankan      html  css  js  c++  java
  • LoadRunner使用动态链接库技术

    什么是动态库?

      动态库一般又叫动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL 副本的内容。DLL 是一个包含可由多个程序同时使用的代码和数据的库。

     

      我们都知道,我们在编程时会调外部库函数,因为程序的中许多代码都是可以复用的,调用外部函数就大大的简化了我们的工作量。代码编写完成后,需要编译才能运行,在编译的过程中,会把程序中调用的函数库加载到内存里。这就是静态链接方式。

      假如有一个函数库,A程序要使用它,然后把函数库的内容全部加载自己的程序中。B程序也要使用这个函数库,B程序也把函数库的内容也全都加载到自己的程序中;这样同样一个东西重复出现在多个程序中,就会造成是种内存的浪费。所以,我们把被多个程序调用的函数放在一个公其的地方,就这一份。谁需要谁调用。这就是动态链接方式。

     

    Loadrunner为什么要使用动态库? 

      DLL最重要的一个特点就扩展应用程序的特性。 再强大的工具也有不是万能的,通过调用动态库的方法极大地增强loadrunner的功能。当你在用loadrunner对于某些需求的测试感鞭长莫及时,这也是一种思路或方式。

     

    使用动态库方法                                                                       

     

    创建一个动态库

      动态连接库支持所有windows下的编程。 VBDephiC#C/C++等。我们这里用VC++进行演示。

    下面通过VC++ 6.0中文版来创建一个动态函数。

    打开VC++ 6.0,新建一个工程,这里先择工程类型为“Win32 Dynamic-link Library”,起一个工程名称,并选择好存方位置。

     

     

    点击“确定”按钮,会询问你希望创建什么类型的DLL

    我们选择第三项一个可以导出某些符号的DLL工程(D

    点击确定,系统会给我们创建两个文件MyDLL.hMyDLL.cpp

     

    分别对两个文件进行编写代码

    MyDLL.h

    extern "C" MYDLL_API int lr_demo(int,int);

    因为我们的loadrunner VuGen是一个C语言的解释器与编译器,只支持纯的C语言,不支持C++ ,所以,我们要在前面加“extern "C"”将函数转义成纯的C语言。

     

    MyDLL.cpp

    复制代码
    MYDLL_API int lr_demo(int x ,int y)
    {
        int sum;
        sum = x + y;
    
        return sum;
    }
    复制代码

      

    选择“工具”菜单---组建[MyDLL.dll] 或直接按F7程序进行编译。

    编译完成后,提示没有错误与警告,说明我们成功了!

    复制代码
    --------------------Configuration: MyDLL - Win32 Debug--------------------
    Compiling...
    MyDLL.cpp
    Linking...
       Creating library Debug/MyDLL.lib and object Debug/MyDLL.exp
    
    MyDLL.dll - 0 error(s), 0 warning(s)
    复制代码

     

    在loadrunnre中调用动态库

      下面打开我们的loadrunner VuGen ,写入下面代码。

    Vuser_init 部分

    复制代码
    vuser_init()
    {
    
        int ret;
    
        ret=lr_load_dll("C:\Users\Administrator\Desktop\loadrunner\MyDLL\Debug\MyDLL.dll");   //调用我们本地的函数文件,因为单斜杠()会被C语言转义,所以要用两个斜杠(\)来表示路径。
    
        if(ret!=0) return -1;
    
        return 0;
    }
    复制代码

     Action部分

    复制代码
    Action()
    {
    
        int sum;
    
        sum=lr_demo(1,2);   //lr_demo 与我们vc++中的函数名一致
    
        lr_output_message("this sume is :%d
    ",sum);  //输出运算结果
    
        return 0;
    }
    复制代码

    运行结果:

    Starting iteration 1.
    Starting action Action.
    Action.c(8): this sume is :3
    Ending action Action.
    Ending iteration 1. 

     

      从上面的代码看出。我们的loadrunner中并没有对数据进行计算,真正计算的代码是调用DLL函数库的代码。这样就大大增强了loadrunner的能力,而这种方式也使我们测试结果更加准确。虽然上面代码简单。但这无疑是一种扩展思路。

     

    转载:http://www.cnblogs.com/fnng/archive/2012/07/23/2602557.html

    路漫漫其修远兮,吾将上下而求索。
  • 相关阅读:
    自定义Toast
    kafka概念扫盲
    ZooKeeper面试题
    写给程序员儿子的一封信
    hashCode() 和 equals()的问题解答及重写示范
    git下载安装、配置及idea初始化
    配置 git公钥报错:unknown key type -rsa
    Java中的各种锁
    Kafka 基本原理
    MySQL 索引总结
  • 原文地址:https://www.cnblogs.com/zhangyublogs/p/4955262.html
Copyright © 2011-2022 走看看