1019 发表于 2008-10-14 09:17:29

使用LR录制socket协议的问题

最近我正测试一个文件上传下载的功能,上传录制是没有问题的(不过如果我想换一个不同大小的文件时,必须得重新录制脚本,不知道怎么才能只修改脚本就可以实现不同文件名或大小的上传录制)
上个问题还好说点,也就多录制一次,下载功能是这样的,我下载从一个指定的盘符下存在的文件,点击下载后,此文件被保存到我本地的路径下(已设置好的路径),然而我重新运行脚本后,此文件根本就没有下载下来。

不知道为什么会这样,我在录制的时候是可以的直载保存的,重新运行脚本又没有保存,纳闷:Q

tiancaim 发表于 2008-10-14 15:11:28

111

上传的问题,把文件名用参数代替,然后只要修改参数就可以换不同的文件了吧,这样就不需要每次都再录制脚本了吧。下载的问题没有搞明白,不知道到底你问题出哪里了

1019 发表于 2008-10-15 11:45:28

回复 2# 的帖子

下面是我的脚本,根本就没有能参数化的地方。
#include "lrs.h"


Action()
{
        lr_rendezvous("upload");

        lr_start_transaction("upload");

    lr_think_time(15);

    lrs_send("socket0", "buf18", LrsLastArg);

    lrs_create_socket("socket1", "TCP", "RemoteHost=QA-SERVER:67",LrsLastArg);

    lrs_send("socket1", "buf19", LrsLastArg);

    lrs_receive("socket1", "buf20", LrsLastArg);

    lrs_close_socket("socket1");

    lr_end_transaction("upload", LR_AUTO);

    return 0;
}

27361984 发表于 2008-10-15 11:51:53

在data.ws里

shuixin128 发表于 2008-10-15 15:27:08

关于后面下载那个问题我也有疑惑。。。。我想楼主的意思是录制下载后,进行回放,文件根本就没有下载下来,也可以说是下载失败了!有人解决吗?关注。。。

mli@dtri.com 发表于 2008-10-15 15:50:25

lz解决了把脚本传上来啊,一直不知道cs结构怎么参数化

aks5201314 发表于 2008-10-15 16:26:56

C/S结构的脚本的参数化和WEB协议脚本中的参数化操作没什么不同,只不过要在data.ws里操作.选择你需要参数化的内容直接做参数化操作就可以了.但被已经被编码了的数据需要用其他工具处理一下.如果要使用LR模拟文件下载,需要自己写代码来实现下载文件的过程.

xingqing205 发表于 2008-10-16 09:33:26

录制时选择socket协议,LR只会记录传输的数据包,而把数据包生成文件的操作是由被测的程序完成的,跟LR没有关系,所以看不到生成的文件

1019 发表于 2008-10-17 11:30:49

原帖由 xingqing205 于 2008-10-16 09:33 发表 http://bbs.51testing.com/images/common/back.gif
录制时选择socket协议,LR只会记录传输的数据包,而把数据包生成文件的操作是由被测的程序完成的,跟LR没有关系,所以看不到生成的文件

跟LR没有关系,是需要我修改脚本,还是就这样执行场景,那结果会不会有问题呢?

1019 发表于 2008-10-17 11:33:10

回复 7# 的帖子

参数这一问题还冒解决呢。

程序不停的再改动,把传输速度改到了16K,46,128等等,我一直都用16K的程序来测试,现在又要改到64K,我又得重新测一次,郁闷啦,有没有更好的办法。如果说我直接把现在的程序与之前的那个程序替换能够达到减少重新录制脚本的过程呢?

Lemon_s 发表于 2008-10-17 12:04:41

其实,在HTTP协议中,本来就没有任何一个方法或是动作能够标识“下载文件”这个动作,对HTTP协议来说,下载文件或是请求页面,都只是一个GET方法,至于说我们下载文件时看到的那个提示我们给出用户名的对话框,那完全是客户端自身判断到我们请求的是一个文件而自行处理的。

那么,究竟该如何才能让LoadRunner完成这个工作呢?

通过上面的分析,我们已经知道了这样一些事实:

1、文件请求是通过GET方法请求的;

2、LoadRunner已经记录了客户端发出的对文件的请求,并能够收到文件内容;

因此,我们完全可以通过关联的方法,从LoadRunner发出的请求的响应中获取到文件的内容,然后通过LoadRunner的文件操作方法,自行生成文件。

从LoadRunner录制时的记录(Recording Log)中,我们可以看到具体的请求和请求的响应信息:

从这里可以看到,我们只需要对以下语句进行关联,就能获得文件的内容。

web_url("viewfile.asp",
      "URL=http://www.testage.net/bbs/viewFile.asp?BoardID=25&ID=217",
      "Resource=0",
      "RecContentType=text/html",
      "Referer=http://www.testage.net/bbs/dispbbs.asp?boardID=25&ID=5187&page=1",
      "Snapshot=t16.inf",
      "Mode=HTML",
      EXTRARES,
      "Url=viewFile.asp?BoardID=25&ID=217", "Referer=http://www.testage.net/bbs/dispbbs.asp?boardID=25&ID=5187&page=1", ENDITEM,
      LAST);
获得文件内容后,通过LoadRunner的fopen,fwrite,fclose函数,就可以将这部分内容保存成本地文件了。


    //获取响应中的文件长度
    flen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);

    if(flen > 0)   
    {
      //以写方式打开文件
      if((filedes = fopen("c:\\test.rar", "wb")) == NULL)
      {
            lr_output_message("Open File Failed!");
            return -1;
      }
      //写入文件内容
      fwrite(lr_eval_string("{fcontent}"), flen, 1, filedes);
      //关闭文件
      fclose(filedes);
    }

请参考
http://www.51testing.com/?128655/action_viewspace_itemid_92709.html

1019 发表于 2008-10-17 14:33:10

原帖由 aks5201314 于 2008-10-15 16:26 发表 http://bbs.51testing.com/images/common/back.gif
C/S结构的脚本的参数化和WEB协议脚本中的参数化操作没什么不同,只不过要在data.ws里操作.选择你需要参数化的内容直接做参数化操作就可以了.但被已经被编码了的数据需要用其他工具处理一下.如果要使用LR模拟文件下载, ...


找了半天还是不晓得怎么参数化 :funk:

xingqing205 发表于 2008-10-22 15:53:11

我认为没有必要生成文件,只要LR模拟的客户端有接收到服务器端的数据就可以了,只要判断收到的数据包的大小跟录制时候的大小是不是一样,我们测的是服务器端的性能,客户端有收到数据就行了,不知道我说的对不对.

xingqing205 发表于 2008-10-22 15:54:14

我认为没有必要生成文件,只要LR模拟的客户端有接收到服务器端的数据就可以了,只要判断收到的数据包的大小跟录制时候的大小是不是一样,我们测的是服务器端的性能,客户端有收到数据就行了,不知道我说的对不对.

csscff 发表于 2009-5-21 17:26:08

为什么内容是0K呢??
页: [1]
查看完整版本: 使用LR录制socket协议的问题