51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3230|回复: 0
打印 上一主题 下一主题

[求助] webService并发处理 web_service_wait_for_event

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2013-8-29 10:25:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近做webservice性能测试,系统是用C#开发,支持后台线程,通过事件委托实现了webservice调用的异步处理。

性能测试需求,在一个Vuser中,将调用webservice的web_service_call函数和处理web Service返回结果分开,能够让多个webservice调用并发进行。而不是串行的。

我的现在的代码如下,能够进一步优化吗?  此代码解决了webservice返回值为xml文件的问题,有需要的可以看一下。
  1. action()
  2. {


  3.         int Num ,i;
  4.         char po[64],pt[64],vt[64],ptime[64];


  5.         typedef long time_t;
  6.     time_t t;
  7.         lr_message ("Time in seconds since 1/1/70: %ld\n", time(&t));

  8.         lr_save_int((time(&t)-604800),"begintime");
  9.         lr_save_int(time(&t),"endtime");

  10.         web_service_call( "StepName=getFisheriesSchema_101",
  11.                 "SOAPMethod=DataService|DataServiceSoap|getFisheriesSchema",
  12.                 "ResponseParam=response",
  13.                 "Service=DataService",
  14.                 "ExpectedResponse=SoapResult",
  15.                 "Snapshot=t1377561681.inf",
  16.                 BEGIN_ARGUMENTS,
  17.                 "userName=IDP",
  18.                 "password=IDP",
  19.                 "reqSn=1",
  20.                 "beginTime={begintime}",
  21.                 "endTime={endtime}",
  22.                 END_ARGUMENTS,
  23.                 BEGIN_RESULT,
  24.                 "getFisheriesSchemaResult=Param_getFisheriesSchemaResult",
  25.                 END_RESULT,
  26.                 LAST);

  27.                 lr_output_message(lr_eval_string("{Param_getFisheriesSchemaResult}"));

  28.                 lr_convert_string_encoding(lr_eval_string("{Param_getFisheriesSchemaResult}"),LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"str");

  29.                 Num = lr_xml_get_values("XML={str}",
  30.                                                 "valueParam=ProdOrg",
  31.                                                 "Query=/getFisheriesSchemaResult/ProductSchema/ProdOrg",
  32.                                                 "SelectAll=yes",
  33.                                                 LAST);
  34.                 lr_xml_get_values("XML={str}",
  35.                                                 "valueParam=PostTime",
  36.                                                 "Query=/getFisheriesSchemaResult/ProductSchema/Post_Time",
  37.                                                 "SelectAll=yes",
  38.                                                 LAST);

  39.                 lr_xml_get_values("XML={str}",
  40.                                                 "valueParam=VType",
  41.                                                 "Query=/getFisheriesSchemaResult/ProductSchema/VType",
  42.                                                 "SelectAll=yes",
  43.                                                 LAST);
  44.                 lr_xml_get_values("XML={str}",
  45.                                                 "valueParam=ProdType",
  46.                                                 "Query=/getFisheriesSchemaResult/ProductSchema/ProdType",
  47.                                                 "SelectAll=yes",
  48.                                                 LAST);

  49.                 for ( i = 0; i < Num; i++) { /* Print multiple values of OutputParam */
  50.            sprintf (po, "{ProdOrg_%d}", i+1, i+1);
  51.                    sprintf (ptime,"{PostTime_%d}", i+1, i+1);
  52.                    sprintf (vt, "{VType_%d}", i+1, i+1);
  53.                    sprintf (pt, "{ProdType_%d}", i+1, i+1);

  54.                    lr_save_var(lr_eval_string(pt),1,0,"temp1");
  55.                    lr_save_var(lr_eval_string(po),8,0,"temp2");
  56.                    lr_save_var(lr_eval_string(ptime),17,0,"temp3");
  57.                    lr_save_var(lr_eval_string(vt),1,0,"temp4");
  58.                   

  59.         web_service_call( "StepName=getFisheries_101",
  60.                 "SOAPMethod=DataService|DataServiceSoap|getFisheries",
  61.                 "ResponseParam=response",
  62.                 "Service=DataService",
  63.                 "ExpectedResponse=SoapResult",
  64.                 "Snapshot=t1377562576.inf",
  65.                 BEGIN_ARGUMENTS,
  66.                 "userName=IDP",
  67.                 "password=IDP",
  68.                 "reqSn=1",
  69.                 "xml:ps="
  70.                         "<ps>"
  71.                                 "<ProdType>{temp1}</ProdType>"
  72.                                 "<ProdOrg>{temp2}</ProdOrg>"
  73.                                 "<Post_Time>{temp3}</Post_Time>"
  74.                                 "<VType>{temp4}</VType>"
  75.                         "</ps>",
  76.                 END_ARGUMENTS,
  77.                 BEGIN_RESULT,
  78.                 "getFisheriesResult/Result=Param_Result",
  79.                 "getFisheriesResult/Resource=Param_Resource",
  80.                 END_RESULT,
  81.                 LAST);

  82.                 lr_output_message(lr_eval_string("{Param_Resource}"));


  83.        
  84.        
  85.                 lr_save_var(lr_eval_string("{Param_Resource}")+24,29,0,"result");

  86.                 FtpLoading(lr_eval_string("{result}"));

  87.                 }

  88.                 return TRUE;
  89. }
复制代码
在LoadRunner函数库中看到了这么一个函数 web_service_wait_for_event。实例如下:
  1. web_service_call( "StepName=EchoString_101",

  2.     "SOAPMethod=

  3. ExtendedECHO_rpc_encoded|ExtendedECHO_rpc_encodedSoap|EchoString",

  4.     "ResponseParam=response",

  5.     "Service=ExtendedECHO_rpc_encoded",

  6.     "AsyncEvent=first_event",

  7.     BEGIN_ARGUMENTS,

  8.     "sec=7",

  9.     "strString=jabberwocky",

  10.     END_ARGUMENTS,

  11.     BEGIN_RESULT,

  12.     "EchoStringResult=first_call",

  13.     END_RESULT,

  14.     LAST );

  15. web_service_call( "StepName=EchoString_102",

  16.     "SOAPMethod=

  17. ExtendedECHO_rpc_encoded|ExtendedECHO_rpc_encodedSoap|EchoString",

  18.     "ResponseParam=response",

  19.     "Service=ExtendedECHO_rpc_encoded",

  20.     "AsyncEvent=second_event",

  21.     BEGIN_ARGUMENTS,

  22.     "sec=2",

  23.     "strString=borogoves",

  24.     END_ARGUMENTS,

  25.     BEGIN_RESULT,

  26.     "EchoStringResult=second_call",

  27.     END_RESULT,

  28.     LAST );

  29. lr_output_message("got event %s",

  30.     web_service_wait_for_event("StepName=WaitHere",

  31.         "Quantifier=ALL",

  32.         "Timeout=10000",

  33.         BEGIN_EVENTS,

  34.         "first_event",

  35.         "second_event",

  36.         END_EVENTS,

  37.         LAST)

  38.     );

复制代码
求助大神讲讲这个函数能够实现我的需求吗?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-26 09:46 , Processed in 0.061836 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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