51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 6295|回复: 32
打印 上一主题 下一主题

[原创] 用winsok录制的C/S脚本如何实现输入的参数化

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-5-29 10:19:45 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
总共有buf数为从buf 0到buf 21,输入数据回车后会在buf 4中开始记录,并且在后面的每个buf中都有由该输入数据产生的相关数据。
请问这种情况该如何设置参数啊?是否所有出现和该输入数据相关的都要参数化么,但是如果输入的数据不同的化由其得到的后续数据也都不一样,但是在我录制的时候必须得输入一个实际的数据(然后在产生的脚本中对其参数化)。那么如果要对其参数化的话具体该如何做呢?


我有试过只对脚本里的第一次记录该输入的数据进行参数化(在参数化属性里设置了3个数据),但是在运行后在详细的日志里只显示调用了第一行的数据,后面的2个数据根本没有使用到
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

33#
发表于 2008-4-3 18:06:22 | 只看该作者
真是好文章啊,正好遇到这个问题

我是创建了几个socket
就关闭几个socket

好像就可以正常运行了
回复 支持 反对

使用道具 举报

该用户从未签到

32#
发表于 2007-5-31 09:23:24 | 只看该作者
看一下于脚本里socket2有关的send和recv的内容,请教一下开发人员这里的通讯流程是怎样的。看一下操作手册里关于socket录制时的设置,有一个服务器到客户端或客户端到服务器的选择的,各录制一份,看看data.ws中的内容,不知你们的通讯协议是什么格式的,你录一下看看吧,和开发人员沟通一下。

[ 本帖最后由 guxingyun 于 2007-5-31 09:47 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

31#
 楼主| 发表于 2007-5-31 08:56:04 | 只看该作者
数据数据应该数输入数据,打错了。
就是你说理解的意思,输入数据回车就相当如开始进行查询操作了。

好像不能屏蔽的吧,如果屏蔽了的话会报no exist socket 0或1的错误(第一次可以顺利执行,第二次会报错。参数表的第一个数据是我录制时输入的数据,第二个是新加的);因为输入数据的不同(数据的格式都是一样的)会创建不同数量的socket,所以可能不能用参数化对其执行循环测试,但是如果参数表的值是相同的话,就可以顺利的执行而没有任何错误

[ 本帖最后由 weiwei555 于 2007-5-31 09:16 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

30#
发表于 2007-5-30 19:45:10 | 只看该作者
就使用你之前录制的那段代码 然后现在开始进行一些小小的修改
我看了一下 socket0和socket2应该是要做相同的工作 可以将与socket0相关的语句屏蔽掉 socket2的位置暂时保持不便
问一下“socket是实现什么的我也看不懂,录制时做的操作就是:输入帐号密码登陆,进入程序后数据数据回车,然后等着弹出结果对话框,录制完毕。”之中“数据数据”的意思是这个操作是在一个对话框中填入,点击一下确定或查询按钮就会出结果了是吗?

[ 本帖最后由 guxingyun 于 2007-5-30 20:18 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

29#
 楼主| 发表于 2007-5-30 18:05:48 | 只看该作者
好,我去改一下。socket 0,1,2,3的内容都是一样的,。

要是把socket 0,1也移到init里的话会报not exist socket 0,1的错误。所以我把他移会录制时的地方了;但是移回后又报出了Action.c(36): Error : socket2 - Invalid argument. Error code : 10022.这个错

socket是实现什么的我也看不懂,录制时做的操作就是:输入帐号密码登陆,进入程序后数据数据回车,然后等着弹出结果对话框,录制完毕。

但是由于输入数据的不同需要创建的socket数也不尽相同,是否不能实现参数化的性能测试啊?

[ 本帖最后由 weiwei555 于 2007-5-30 19:08 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

28#
发表于 2007-5-30 17:36:20 | 只看该作者

回复 #27 weiwei555 的帖子

把lrs_create_socket("socket2", "TCP", "LocalHost=0", "RemoteHost=192.168.0.54:9080",  LrsLastArg)及之前的都移到初始化里面,暂时先将lr_start_transaction("pop");屏蔽掉,等脚本可以正常运行后再添加事务之类的。还有socket1实现的是什么?
回复 支持 反对

使用道具 举报

该用户从未签到

27#
 楼主| 发表于 2007-5-30 17:23:25 | 只看该作者
sdlkfj7 把参数表的数据设成2个一样的可以运行成功,没有任何错误

但是如果设成2个不同的数据,第一个运行成功没有任何错误,第二个会报出Action.c(53): Error : socket2 - Software caused connection abort. Error code : 10053.
Action()
{
    lr_think_time(63);
    lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=192.168.0.54:9080",  LrsLastArg);
    lrs_send("socket0", "buf0", LrsLastArg);
    lrs_receive("socket0", "buf1", LrsLastArg);
    lrs_send("socket0", "buf2", LrsLastArg);
    lrs_receive("socket0", "buf3", LrsLastArg);
    lr_think_time(24);
    lrs_create_socket("socket1", "TCP", "RemoteHost=192.168.0.54:9080",  LrsLastArg);

lr_start_transaction("pop");
    lrs_send("socket1", "buf4", LrsLastArg);
    lrs_receive("socket1", "buf5", LrsLastArg);
    lrs_close_socket("socket0");

这行是录制时存放lrs_create_socket("socket2", "TCP", "LocalHost=0", "RemoteHost=192.168.0.54:9080",  LrsLastArg)的,现在被切到init里了,报错会出现在下面的某行里,但是好像不会出现在buf 6, buf 7,这2行

    lrs_send("socket2", "buf6", LrsLastArg);
    lrs_receive("socket2", "buf7", LrsLastArg);
    lrs_send("socket2", "buf8", LrsLastArg);
    lrs_receive("socket2", "buf9", LrsLastArg);
    lrs_send("socket2", "buf10", LrsLastArg);
    lrs_receive("socket2", "buf11", LrsLastArg);
    lrs_send("socket2", "buf12", LrsLastArg);
    lrs_receive("socket2", "buf13", LrsLastArg);

注:如果输入的数据不同,录制时产生的socket数也不尽相同,不知该错误和这有关系没

[ 本帖最后由 weiwei555 于 2007-5-30 17:34 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

26#
发表于 2007-5-30 17:21:21 | 只看该作者
不是高手,只是我这段时间也在学习作这方面的测试,所以遇到过类似的问题。c/s的通信方式也不是很理解呢,如果理解的再深入一下的话,还会有更深刻的认识的。可以请教开发人员,脚本还是可以继续优化的。继续学习中....
回复 支持 反对

使用道具 举报

该用户从未签到

25#
 楼主| 发表于 2007-5-30 17:13:24 | 只看该作者

回复 #24 guxingyun 的帖子

高手啊,按你说的把lrs_create_socket放在init里面运行成功了。谢谢谢谢

只是这个录制的脚本总共创建了4个socket(0,1,2,3),但是只有0,1有close socket;socket2和3均只有创建socket而没有close,但是运行还是成功了,没有任何错误。

再次谢谢你的热心的帮促。没有你这些问题是不能解决的,我已经查了几天资料了,但是都停滞不前。谢谢你啊guxingyun
回复 支持 反对

使用道具 举报

该用户从未签到

24#
发表于 2007-5-30 16:58:55 | 只看该作者
了解,可以采取这样的方式,既然你的脚本现在的操错是在buf4时才输入数据,那么现在将lrs_create_socket放在初始化vuser_init里,将lrs_close_socket放在vuser_end里,然后再次运行迭代试一下。如果迭代可以成功,再细说我对 socket2 - Invalid argument. Error code : 10022.的理解。
回复 支持 反对

使用道具 举报

该用户从未签到

23#
 楼主| 发表于 2007-5-30 16:48:52 | 只看该作者
恩,就是你说的那样。
但是循环还是不能进行下去,第一次能顺利运行,但是第二次总是报错Action.c(37): Error : socket2 - Invalid argument. Error code : 10022.

我把参数表里的2个数据改成一样的还是会出现这个错误,为什么总是只能顺利执行一次。搞不懂


忘了说了,我这只是在demo状态下的测试。

我online测试的时候,录制的在线脚本,没有参数化,就是直接用录制的脚本run,如果连续run(就是运行结束后马上有点run开始运行)的话可以多次顺利运行(但也最多只能运行3-4次),如果不连续run的话,会出现找不到locahhost的10052错误(但是第一次总是能顺利运行完成)。不知道是程序问题还是LR问题,LR我是录制完就run,没有该任何参数

[ 本帖最后由 weiwei555 于 2007-5-30 16:57 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

22#
发表于 2007-5-30 16:24:44 | 只看该作者

回复 #21 weiwei555 的帖子

这样子就好理解了,因为录制时使用的是9991112307,而回放时第一次的取值是9991172301,录制和回放的值不同,所以except receive里出现9991112307这个值是提示两次(录制和回放)的差异。
回复 支持 反对

使用道具 举报

该用户从未签到

21#
 楼主| 发表于 2007-5-30 16:21:07 | 只看该作者

回复 #19 guxingyun 的帖子

恩,录制的时候输入的是9991112307,在参数表里数据的顺序是9991172301,然后是9991112307;脚本被编辑了很多次了,自己都糊涂了,我重新录制下
回复 支持 反对

使用道具 举报

该用户从未签到

20#
发表于 2007-5-30 16:19:56 | 只看该作者

回复 #18 weiwei555 的帖子

报错指出socket是无效的,应该是在Action的结尾没有关闭的原因,在return 0;;语句之前添加lrs_close_socket("socket0"); 然后再试一下。
还有#16楼的设置方式应该不会出错才对,unique ,once。

[ 本帖最后由 guxingyun 于 2007-5-30 16:26 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

19#
发表于 2007-5-30 16:15:55 | 只看该作者

回复 #14 weiwei555 的帖子

脚本在录制时使用的数值是多少,应该不是9991172301吧?是9991112307吗?那样的话#14楼提到的“except receive里还是出现了9991112307这个值。”会好理解一些。
回复 支持 反对

使用道具 举报

该用户从未签到

18#
 楼主| 发表于 2007-5-30 16:15:33 | 只看该作者
按你的建议现在可以了,可是循环在执行第二次的时候报错
Starting iteration 2.
Starting action Action.
Action.c(14): lrs_create_socket(socket0, TCP, ...)
Action.c(14): callBind: socket: socket0 (264), local host: (null), local port: 0
Action.c(14): Error : socket0 - Invalid argument. Error code : 10022.

action中的脚本如下:
#include "lrs.h"

Action()
{
   
    lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=192.168.0.56:9080",  LrsLastArg);
    lrs_send("socket0", "buf0", LrsLastArg);
    lrs_receive("socket0", "buf1", LrsLastArg);
    lrs_send("socket0", "buf2", LrsLastArg);
。。。
}

查看了以前的帖子,据说是参数设置有问题,再检查检查

[ 本帖最后由 weiwei555 于 2007-5-30 16:18 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

17#
 楼主| 发表于 2007-5-30 16:06:45 | 只看该作者

回复 #16 guxingyun 的帖子

好,我设置的是unique,update value=once
谢谢你啊guxingyun。。。这么热心sdlkfj2

[ 本帖最后由 weiwei555 于 2007-5-30 16:08 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

16#
发表于 2007-5-30 15:59:10 | 只看该作者

回复 #13 和 #14 weiwei555 的帖子

关于#13" 主要是运行时并没有循环执行脚本,我参数表里设置了2个数,可是总是只会取第一个数。"有点疑问,第一,没有循环执行脚本,也就是说你这次的操作脚本只执行了一次,也就是Runtime Setting里的Pacing设置的是1;第二,参数表里设置了2个数,那么对于出现参数取值的设置是什么,也就是右键菜单下的参数的属性设置是什么样的,应该是sequential,each interation,这样的设置可以保证在这个循环中的取值是一样的。
关于#14,简单验证结果是否正确可以在正常的情况下使用9991172301看一下结果,然后再运行脚本看一下结果,两个比较一下就可以了。运行脚本的前提是保证#13的运行时设置是正确的。

[ 本帖最后由 guxingyun 于 2007-5-30 16:25 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

15#
发表于 2007-5-30 15:19:03 | 只看该作者
好,,支持问题1`
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-15 09:25 , Processed in 0.079031 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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