测试要求:
  在本次测试中,我需要并发50个User,每一个User占用一个独立的IP,并且只执行一次脚本。脚本中发起两个请求,其中第一次请求返回200后才执行第二个请求。使用win7 OS。
  前置及Generator设置:
  我的Run-time Settings这样设定:
  Run Logic: Number of Iterations: 1 (保证只执行一次脚本)
  Log: Enable Log. Always send messages.(不是只在出错时发送log。我需要通过log来验证我的测试要求是否达到)
  Think Time: Ignore think time (我不要思考时间,我想第二个请求紧跟第一个请求后执行)
  其他不变。
  为了在同一台机器上跑50个IP,我使用IP Spoofing
  在开始菜单,找到Loadruner所在文件夹,进去找到Tools,里面有一个IP Wizard(IP欺骗)
  在创建新的IP之前,可以CMD查看ipconfig, 查看自己所在IP区间。使用IP欺骗时,需要使用空闲IP,为确保不影响公司网络,建议使用一个路由器搭建独立的IP区间。
  我使用的IP区间为:
  LAN Subnet : 192.168.32.0 / 23 (空闲IP区段:192.168.32.4 ~ 192.168.33.254)
  Gateway : 192.168.32.1
  到增加IP地址对话框时,注意配置是否正确。我的配置如下图。

  完成之后可以将刚才的IP地址保存为“IP Address File(*.ips)”文件。(这一操作我没有做,还好Loadrunner已经非常智能,在Load Generators只增加localhost可以搞定)
  好了,在CMD查看ipconfig /all 是不是多了50个IP。
  注意,IP Wizard不支持DHCP,需要本机配置为固定IP地址。
  接下来写脚本。
  我的脚本如下:
1 Action()
2 {
3
4     int status;
5     int HttpRetCode;
6     char *ip;
7     ip = lr_get_vuser_ip();
8 //检查Loadrunner Controller有没有Enable IP Spoofing
9     if(ip)
10         lr_output_message("The IP address is %s", ip);
11     else
12         lr_output_message("IP spoofing disabled");
13 //设置集合点,让50个vuser一起发起第一个请求
14     lr_rendezvous("letusgo");
15 //开始第一个事务(请求)
16     lr_start_transaction("1stReq");
17
18     web_url("RCS_Initial_HTTP_Req",
19 //这里有一个参数化,我要每一次传递给该参数一个的msisdn号码,并且只执行一次。
20 //我在参数属性对话框里设置:Select next row -> Unique
21 //                                          Update value on -> Once
22         "URL= http://xxx.yyy.com/self?x-forwarding-msisdn={NewParam}",
23         "TargetFrame=Main",
24         "Resource=0",
25         "RecContentType=text/html",
26         "Mode=http",
27         LAST );
28 //打印第一个请求的返回码
29     HttpRetCode = web_get_int_property(HTTP_INFO_RETURN_CODE);
30     lr_output_message("Response code:%d",HttpRetCode);
31 //检查返回码是否是200
32       if(HttpRetCode == 200){
33         lr_end_transaction("1stReq", LR_PASS);
34         sleep(2000);
35 //开始第二个事务(请求)
36         lr_start_transaction("2ndReq");
37         web_url("RCS_Initial_HTTP_Req",
38         "URL= https://xxx.yyy.com/self?vers=1&IMSI=1&rcs_version=1&rcs_profile=1&client_vendor=1&client_version=1&terminal_vendor=1&terminal_model=1&terminal_sw_version=1&IMEI=1&mock_scheme=HTTPS",
39         "TargetFrame=Main",
40         "Resource=0",
41         "RecContentType=text/html",
42         "Mode=http",
43         LAST );
44 //打印第二个请求的返回码
45          HttpRetCode = web_get_int_property(HTTP_INFO_RETURN_CODE);
46          lr_output_message("Response code:%d",HttpRetCode);
47 //检查返回码是否是200
48 //结束第二个事务(请求)
49         if(HttpRetCode == 200){
50             lr_end_transaction("2ndReq", LR_PASS);
51          }else{
52              lr_end_transaction("2ndReq", LR_FAIL);
53         }
54
55      return 0;  }else{
56 //结束第一个事务(请求)
57      lr_end_transaction("1stReq", LR_FAIL);
58      return 0;
59      }
60 }
61