51Testing软件测试论坛

标题: 回答网友提问:关于参数化编程的问题 [打印本页]

作者: spartan    时间: 2007-8-9 14:54
标题: 回答网友提问:关于参数化编程的问题
前段时间有LR的网友提问如下的问题, 我将自己编写的代码贴出来,大家一起讨论。

问题:
我需要做参数化输入
假设有2个字段: customid和planid,一个customid下有多个planid,
我需要对customid和planid都做参数化输入,即顺序取一个customid,再随机在这个customid里取一个planid
但是planid要跟着customid变化
这是否是关联的问题?
怎么解决? 思路即可.

解决的代码:
Action()
{
   int i,j,k,rnum;
   char costomid[30];
   char combin_planid[30],planid_temp[30],planid[30];


   //先从costomid_single中顺序取一个costomid;
   strcpy(costomid,lr_eval_string("{costomid_single}"));
   lr_output_message("costomid=%s",&costomid);

   //在combinid.dat中寻找相同costomid的个数;
   j=0;
   strcpy(combin_planid,"#");
   for (i=1;i<10;i++) {
         if (strcmp("end",lr_eval_string("{costomid}"))==0)
           i=1000;
         else
      if (strcmp(costomid,lr_eval_string("{costomid}"))==0){
                 j=j+1;
         strcat(combin_planid,lr_eval_string("{planid}"));
         strcat(combin_planid,"#");
           }
     lr_advance_param("costomid");
   }
   lr_output_message("和%s相同的costomid的个数是=%d",&costomid,j);

   //处理字符串,找出随机的那个planid
   rnum = rand() % j;
   lr_output_message("随机数是:%d",rnum);
   k=0;
   strcpy(planid_temp,"");
   strcpy(planid,"");
   for (i=0;i<50;i++) {
     strncpy(planid_temp, &combin_planid, 1);
         if (strcmp("#",planid_temp)==0)
            k=k+1;
         if (k-rnum-1==0)
                strcat(planid,planid_temp);
   }
   strncpy(planid,&planid[1],10);

   lr_output_message("你要用的参数costomid=%s,planid=%s",costomid,&planid);


        return 0;
}
[attach]30806[/attach]
作者: wonew1228    时间: 2007-8-9 17:05
不错,顶一下
作者: suoyi    时间: 2007-8-9 17:12
顶一下~~

请问,对于由网页上的checkbox中取来的数据如何进行随机取数?
关键问题是有的数据内容中包含“XXX checked",如何将“checked”除去,使用字符串函数?效果不是很好~~
作者: spartan    时间: 2007-8-10 09:04
原帖由 suoyi 于 2007-8-9 17:12 发表
顶一下~~

请问,对于由网页上的checkbox中取来的数据如何进行随机取数?
关键问题是有的数据内容中包含“XXX checked",如何将“checked”除去,使用字符串函数?效果不是很好~~



例如:我有字符串是:"31 records checked", 现在要把”checked“除去,得到"31 records"。可以使用以下的代码实现:
char check_content[30]="31 records checked";
char check_wanted[30];
int  str_len;

str_len=strlen(check_content)-8;
strncpy(check_wanted,check_content,str_len);   //8为"checked"以及它之前的空格的长度
lr_output_message("the check_wanted is:%s",&check_wanted);
作者: suoyi    时间: 2007-8-10 09:16
谢谢,试试您的办法~~
作者: spartan    时间: 2007-8-10 09:24
标题: 回复 #5 suoyi 的帖子
LR中对于字符串的处理,我通常用两种方法:
利用数组处理字符串
利用指针处理字符串

不过在这里,我强烈推荐大家使用数组处理字符串。指针比较麻烦,比较容易出错!

可以详细看我的blog:
http://www.51testing.com/?120561 ... e_itemid_17561.html
作者: Sands    时间: 2007-8-10 09:50
标题: 回复 #3 suoyi 的帖子
我上次发了一个贴,里面有类似的代码,你可以参考一下
作者: suoyi    时间: 2007-8-10 15:06
我在strncpy()中使用strcspn(),得到"XXX checked"中checked前面的空格,解决的问题。
例:strncpy(toStr,fromStr,strcspn(fromStr)," "));

LZ的方法也很好,开始我只想着从前往后,没想过从后向前~~
对于字符串的问题要具体问题,具体分析~~

Sands,我的积分神秘失踪了~~sdlkfj9




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2