51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 3321|回复: 8
打印 上一主题 下一主题

[求助] 用loadrunner编写tuxedo脚本,使用 lrt_Fname32()报错

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2013-1-25 11:16:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ares444 于 2013-1-25 12:17 编辑

各位,最近由于工作需要,要测试一个C/S架构的系统性能。要编写tuxedo的性能测试脚本。采用的FML32格式。
     本来,我准备使用录制回放的方式来搞定脚本,但是很不幸,客户端是在unix上的,无法直接使用loadrunner进行录制。我在网上也找了个方案《多机代理方式录制》,但是没有能够成功。
     于是,我想试着手工编写tuxedo脚本。【第一步】:我定义了一个front.fml32,内容如下:
#name         rel_number   type  flags comments

*base       2000
CHANNELID   1   string  -   channel id
MSGTYPE     2   long    -   message type
MESSAGE     3   carray  -   transaction message
SNODEID     4   string  -   send node
RNODEID     5   string  -   recv node
【第二步】:
编译生成对应的*.h文件,front.fml32.h如下:
/*
fname
fldid            */

/*
-----
-----            */

#define
CHANNELID
((FLDID32)167774161)
/* number: 2001
type: string */

#define
MSGTYPE
((FLDID32)33556434)
/* number: 2002
type: long */

#define
MESSAGE
((FLDID32)201328595)
/* number: 2003
type: carray */

#define
SNODEID
((FLDID32)167774164)
/* number: 2004
type: string */

#define
RNODEID
((FLDID32)167774165)
/* number: 2005
type: string */


【第三步】:编写脚本,这里卡住了。
     在编写脚本中我发现了个问题,脚本好像根本就没有读我的fml32描述文件“front.fml32”,我做了个试验,代码如下:
action.c:

#include "lrt.h"#include "front.fml32.h"
//我把front.fml32.h放到的了loadrunner的include目录
Action()
{

/*****************************************************************************
设定环境变量,其中FLDTBLDIR32用于指定fml文件存放路径,FIELDTBLS32指定FML文件名称。
/*****************************************************************************/

static char *env_allow_array[] = {

"WSNADDR=",

"FLDTBLDIR32=",

"FIELDTBLS32=",

NULL

};


lrt_set_env_list(env_allow_array);


lrt_tuxputenv("WSNADDR=//192.168.21.1:15010");

lrt_tuxputenv("FLDTBLDIR32=E:\bea\tuxedo8.1\etc");   //我把front.fml32放在了这个目录

lrt_tuxputenv("FIELDTBLS32=front.fml32");


lrt_abort_on_error();



lr_output_message("name is %s", lrt_Fname32(33556434));
lr_output_message("id is %d", lrt_Fldid32("CHANNELID"));



rc = lrt_getFerror32();

lr_output_message("error code is %d", rc);

lr_output_message("error message is %s", lrt_Fstrerror(rc));



return 0;
}




预期输出:name is MSGTYPE

id is 167774161


实际报错:
Action.c(10): lrt_Fname32
Action.c(10):    fieldid = 33556434
Action.c(10):    Fname = (null)
Action.c(10): 错误:   lrt_Fname:
Action.c(10): name is (null)
Action.c(11): lrt_Fldid32
Action.c(11):   name = "CHANNELID"
Action.c(11):    Fldid = 0
Action.c(11): 错误:   lrt_Fldid32:
Action.c(11): id is 0
Action.c(14): lrt_getFerror32()
Action.c(14):    getFerror32 = 11
Action.c(16): error code is 11
Action.c(18): lrt_Fstrerror
Action.c(18):    err = 11
Action.c(18):    Ferror = LIBFML_CAT:11: ERROR: Cannot find or open field table
Action.c(18): 确定
Action.c(18): error message is LIBFML_CAT:11: ERROR: Cannot find or open field table

请问,这个是什么原因啊?我在网上找了半天,没找到原因。。。。请赐教。。这个问题解决以后,我在继续往下摸索。。解决不了再继续请假
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2013-1-25 11:30:10 | 只看该作者
如果写成这样:
lr_output_message("name is %s", lrt_Fname(33556434));
返回结果是:
Action.c(10): lrt_Fname
Action.c(10):    fieldid = 2002
Action.c(10):    Fname = (null)

这就证明了,应该是能读到我的头文件front.fml32.h了。
有朋友说,是没有读到front.fml32。我觉得也是,但是哪里写错了呢?
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2013-1-25 11:37:56 | 只看该作者
lr应用要把.h文件丢到脚本目录下或者lr自己的Include目录下吧?个人猜测
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2013-1-25 13:45:29 | 只看该作者
回复 3# 云层

我丢到LR的include下面去了。

刚重点研究了下那行报错。
在tuxedo的官方文档中看到这行报错的解释:
ERROR: Cannot find or open field table
Description:When processing the field tables, one of the field tables was not found.
Action:Check that the environment variables are set correctly for the field table files and that the files have read permission.

意思是说我环境变量没设置或者没有可读权限,但是我在windows的环境变量里设置了啊。。。
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2013-1-28 09:46:36 | 只看该作者
自己顶一下。。。。谁能帮帮忙
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2013-1-28 14:29:39 | 只看该作者
汗,这个问题解决了。。。
估计是环境变量的问题。我多设置几次,重新生成了几次frontfml,然后居然好了。。
下面还有个问题就是怎么将报文加解密了~!

嘿嘿。好高兴
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2013-1-29 09:16:06 | 只看该作者
恭喜恭喜,具体问题还是得靠你自己解决啊
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2013-1-29 15:28:56 | 只看该作者
回复 7# 云层


    呵呵,谢谢。。
现在在研究如何将报文通过安全节点加密后发出去呢。
遇到问题还是得多和人交流,可能马上就会有茅塞顿开的感觉出现
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2013-2-5 15:32:02 | 只看该作者
fml32格式的报文连上服务后,通过
lrt_Fadd32_fld((FBFR32*)sSendBuf    //就可以根据id来发送
lrt_save32_fld_val((FBFR32*)sRecvBuf    //可以抓取返回字段验证是否成功。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-4-19 12:53 , Processed in 0.172540 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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