LoadRunner使用动态链接库技术-阿里云开发者社区

开发者社区> 虫师2016> 正文

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\n",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的能力,而这种方式也使我们测试结果更加准确。虽然上面代码简单。但这无疑是一种扩展思路。



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
mac系统使用技巧链接汇总
1.在 Mac OS X 下修改 Hosts 的四种方法 http://blog.csdn.net/kylinbl/article/details/8905333
751 0
自己在linux上编译、链接、动态库和静态库的学习笔记
在平常的项目中,我们都是使用公司要求的makefile、makedebug一类的文件,因此,在编译、链接、生成和链接动态库与静态库的时候,我们只是简单的使用一些已经设置的变量,只是简单的修改、添加一些文件名,或许这次我们编译通过了,但是,在某一个时候,可能出现了一个问题,无论简单与否,因为平常没有留意,导致的结果可能是花了好长时间才能解决。
871 0
wordpress 使用固定链接
官方文档 无插件移除url中category 目录前缀 设置 >> 固定链接,设置固定链接为自定义为: /%category%/%postname%/或者/%category%/%post_id%/ 在可选 >> 分类目录前缀 设置为 :.
566 0
SQL使用链接服务器执行远程数据库上的存储过程
原文:SQL使用链接服务器执行远程数据库上的存储过程   --创建链接服务器 exec sp_addlinkedserver'server_tmp','','SQLOLEDB','远程服务器名或ip地址' exec sp_addlinkedsrvlogin'server_tmp','fa...
1181 0
使用opencv后 runtime error! R6025-pure virtual function call 的解决方法
今天写了一段用到opencv的代码,最后主函数(main)返回时产生了runtime error! R6025-pure virtual function call 的错误提示。
856 0
使用SSL安全链接Mysql数据库
一、使用SSL安全连接 To use SSL connections between the MySQL server and client programs, your system must support either OpenSSL or ...
8271 0
+关注
虫师2016
专注于软件测试技术的分享与推广
204
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载