guxingyun 发表于 2007-5-15 16:13:19

如何将web_reg_save_param获得的参数保存在文本中(问题已解决)

“如何将web_reg_save_param获得的参数保存在文本中”这个想法的提出在zee的blog中看到一篇关于“Zee的LR脚本练习一:写随机数到文本里”的帖子后想到的。原文链接地址为:http://www.51testing.com/?17369/action_viewspace_itemid_5531.html#xspace-itemform我将具体的代码转载到这里,希望zee能同意。sdlkfj1

typedef long time_t;
Action()
{

int i,k;
time_t t;
char *filename="c:\\test.txt";
long file;
srand((unsigned) time(&t));
lr_output_message("Ten random numbers from 0 to 99\n\n");

if ((file = fopen(filename, "w+" )) == NULL) {

   lr_output_message("Unable to create %s", filename);

   return -1;
}

for (i=0; i<10; i++)   {
lr_output_message("%d\n", rand()%100);
k= rand()%100;
   fprintf(file,"%d \n ",k);
}

   fclose(file);
return 0;

}

在学习这段代码的时候发现设置pacing次数对于写入文本的数据条数没有影响,我想问一下,如果我将pacing设置为2或者更大,可否能让记录的条数也相应增加而不是覆盖之前的记录呢?请教如何实现?

[ 本帖最后由 guxingyun 于 2007-5-23 15:19 编辑 ]

shanxi 发表于 2007-5-15 16:22:23

这个跟pacing无关

跟写入c:\\test.txt是Append写入 还是 覆盖写入有关

另外你看那个循环是10次,你增加它可能有你想要的效果吧

guxingyun 发表于 2007-5-15 16:56:41

回复 #2 shanxi 的帖子

谢谢 shanxi 的回复,sdlkfj2 我将其中的 w 改为 a 就可以了 if ((file = fopen(filename, "a+" )) == NULL)
r(read): 读w(write): 写a(append): 追加t(text)

guxingyun 发表于 2007-5-22 21:53:15

如何保存web_reg_save_param获得的多个相似参数

前面的疑问是在查询一条记录时产生的,并且对于获得一条记录中的参数并保存的过程已经在上述回复中实现。今天需要将web_reg_save_param获得的多个相似参数保存在文本中,比如这样的一个例子(html页面),查询包含某个字母的用户名,搜索的结果有50条,在vgen录制的用户名页面的body中可以看到这50个用户的信息,也就是服务器发送给客户端的信息。在web_reg_save_param的用法中提到这50个用户名会保存在array中,但是我如何将之保存在文本中呢?难道要使用lr_eval_string("{name_1}"),lr_eval_string("{name_2}")等将获得的数据一条一条地保存吗?可否使用一个循环语句来实现或者其它的方法?

[ 本帖最后由 guxingyun 于 2007-5-22 22:19 编辑 ]

rickyzhu 发表于 2007-5-22 22:09:49

肯定是要用循环啊,只是你的参数是要规律的。

guxingyun 发表于 2007-5-22 23:32:40

回复 #5 rickyzhu 的帖子

查询的用户名列表的html的body中的相关内容形式如下(将不必要的内容做了删除):
<name>
        <username>liming</username>
</name>
<name>
        <username>lijun</username>
</name>
……
web_reg_save_param将username保存在array中,那么我如何将array中的数据保存呢?或者是实现lr_output_message?

[ 本帖最后由 guxingyun 于 2007-5-22 23:37 编辑 ]

duola1119 发表于 2007-5-23 08:43:46

web_reg_save_param("username",
"LB=<username>",
"RB=</username>",
"Ord=ALL",
LAST);
这样username保存的就是所有的出现在<username>和</username>的值了.
Ord=ALL表示此时的username是一个数组.

guxingyun 发表于 2007-5-23 08:47:43

回复 #7 duola1119 的帖子

是保存在数组中了,但是我想将这个数组中的信息保存在文件中,将如何实现呢?

duola1119 发表于 2007-5-23 08:49:24

如果要输出的话可以使用一个for循环
---
count=atoi(lr_eval_string("{username_count}"));/*计算所有的username的个数*/
for(i=1;i<count;i++)
{
sprintf(username,"{username_%d}",i);/*输出username_1.username_2....*/
}

duola1119 发表于 2007-5-23 08:53:13

原帖由 guxingyun 于 2007-5-23 08:47 发表 http://bbs.51testing.com/images/common/back.gif
是保存在数组中了,但是我想将这个数组中的信息保存在文件中,将如何实现呢?
不知道LR是否提供了该功能.目前还不知道有什么方法实现.关注.

guxingyun 发表于 2007-5-23 09:18:10

实现了数组数据的保存

看了zee的“循环打印web_reg_save_param保存的参数”的帖子,问题得到解决。方法稍候附上。
http://www.51testing.com/?17369

guxingyun 发表于 2007-5-23 10:44:35

如果name中有汉字和数字的话,保存的只有数字,汉字就是空格。应该和录制脚本时的设置有关,将之前录制的可以保存汉字的脚本编辑后可以正确实现汉字的保存。

[ 本帖最后由 guxingyun 于 2007-5-23 11:32 编辑 ]

bingbingyang11 发表于 2007-5-23 11:52:10

记号

guxingyun 发表于 2007-5-23 15:15:39

具体实现时使用的代码

现在将具体的实现方法附上,如果查询的列表存在多页的情况,我现在的方法是将保存第一页参数的代码复制一遍,然后将 web_url 的链接稍作些修改,比如将page=1改为page=2。应该还有其他的方法,代码也可以优化,共同学习。
Action()
{
        char sname;       //写入文件时使用
        char buffername;       //在执行窗口输出时使用
int i;
        long file;
        char *filename="c:\\name.txt";
       
        web_set_max_html_param_len("1024");

//因为查询列表有好几页,这是保存第一个页面获得的参数
        web_reg_save_param("name",
                "LB=<name>",
                "RB=</name>",
                "Ord=All",
                "Search=Body",
                LAST);

        web_url("UserResult.jsp",
                "URL={url}query/User/UserResult.jsp?enterpriseid=10&username=&page=1",
                "TargetFrame=",
                "Resource=0",
                "RecContentType=text/html",
                "Referer={url}query/User/Userquery1.jsp?nodeid=23",
                "Snapshot=t8.inf",
                "Mode=HTML",
                EXTRARES,
                "Url=/widgets/datagrid/styles/xp/grid.png", "Referer={url}query/User/UserResult.jsp?enterpriseid=10&Username=&page=1", ENDITEM,
                LAST);

    if ((file = fopen(filename, "a+" )) == NULL) {
       lr_output_message("Unable to create %s", filename);
       return -1;
   }

    for(i=1;i<=atoi(lr_eval_string("{name_count}"));i++) {
         sprintf(buffernum, "{name_%d}", i);
                               strcpy(sname,lr_eval_string(buffernum));
                             fprintf(file,"%s\n ", sname);
   }
   fclose(file);
               
                return 0;
}

[ 本帖最后由 guxingyun 于 2007-5-23 15:19 编辑 ]

guxingyun 发表于 2007-6-10 09:46:24

通过返回值检查,思路值得借鉴

一篇介绍web_reg_save_param函数的日志,举例说明使用此函数检查文本,看后很受启发。原帖地址 :http://qiguojieshare.spaces.live.com/blog/cns!A788E2C2F486E0!545.entry

msnshow 发表于 2008-7-14 11:39:10

不错不错,又学习了
页: [1]
查看完整版本: 如何将web_reg_save_param获得的参数保存在文本中(问题已解决)