51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3538|回复: 4
打印 上一主题 下一主题

[原创] loadrunner调用外部dll,不能正常退出的问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-2-28 16:02:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Hi:
最近在做一个性能测试项目,需要在脚本中进行base64编码。
我在网上找到了一个做base64编码的dll。调用dll的过程是正常的,但是发现Vugen或controller在执行脚本时,会遇到报错或者无法退出的情况。请各位高手帮忙看看。
脚本中的关键步骤:
int status;
char *encoderequest=(char *)malloc(4096 * sizeof(char));
char *samlrequest=(char *)malloc(2048 * sizeof(char));

strcpy(samlrequest,"<Request xmlns=\"urnasis:names:tc:SAML:1.0:protocol\" xmlns:saml=\"urnasis:names:tc:SAML:1.0:assertion\" ");
strcat(samlrequest,"xmlns:samlp=\"urnasis:names:tc:SAML:1.0:protocol\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" ");
......
lr_load_dll("MultiCoder.dll");
status=DoBASE64(samlrequest,strlen(samlrequest),encoderequest,4096,0);

lr_save_string(encoderequest,"encoderequest");

web_submit_data("AuthorizationDecisionServlet",
               "Action=http://10.11.11.55/jpassport-idp-web/servlet
               "Method=get",
               "RecContentType=text/xml",
               "Referer=",
               "Snapshot=",
               "Mode=HTTP",
               ITEMDATA,
                "Name=samlRequest", "Value={encoderequest}", ENDITEM,
               LAST);
...

free(encoderequest);
free(samlrequest);

其中DoBASE64是外部dll中的函数,声明为
extern "C" __declspec(dllexport) int DoBASE64(const unsigned char *idata, int idatalen, unsigned char *odata, int odatalen,int type);
//函数名:DoBASE64
//功能  :对输入字节流进行BASE64编码,得到可显示字符串
//参数  :idata 输入的需要进行BASE64编码的数据(指针)
//        idatalen 输入数据idata长度
//      :odata 存放经过BASE64编码的输出数据(指针)
//        odatalen 输出数据odata长度
//        type,加密/解密,整型,=EN0表示加密,DE1表示解密。

问题:
Vugen执行时偶尔脚本不能停止,除非手工杀mmdrv.exe进程,controller并发跑脚本的时候报错:
Error: Exception was raised when calling event-notify Vuser function in extension lrun50.dll: System Exceptions: EXCEPTION_ACCESS_VIOLATION
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2008-2-28 16:04:22 | 只看该作者

自己顶

另外,一个比较诡异的问题是:
DoBASE64之后,得到的encoderequest,在正常的base64编码后,多出很多其他字符。
请教大家:encoderequest是我定义的一个char*,开始的时候我并不知道encoderequest的长度是多少,所以给DoBASE64是一个比较大的4096,那么DoBASE64在返回了正常的base64编码后,会把其他后面的空间占满?
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2008-2-28 16:47:49 | 只看该作者
试了一下,使用多进程方式跑,controller也会报内存非法的错误。

恐怕是dll中相应函数内存使用的问题
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2008-2-28 16:56:10 | 只看该作者
有dll源代码么发上来看看
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2008-2-29 22:26:38 | 只看该作者
建议用c 先写main函数单进程LoadLibrary 调用测试功能是否OK

然后再检查你写DLL的函数是否为多线程安全的,
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-13 11:35 , Processed in 0.071835 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表