负载测试随机化:如何设置WCAT以便为每个虚拟客户端使用不同的方案?

时间:2012-07-17 11:15:52

标签: performance load-testing performance-testing wcat

我想在我的Web应用程序中运行一个POST操作的负载测试。问题是只有在POST数据中收到唯一的电子邮件地址时才能完成操作。我生成了几千个请求的wcat脚本,每个请求都有唯一的电子邮件,例如:

 transaction                        
  {                                  
    id = "1";     
    weight = 1;
    request 
    { 
        verb = POST; postdata = "Email=test546546546546%40loadtest.com&..."; 
        setheader { name="Content-Length"; value="..."; 
    } 
    // more requests like that
  }

我的UBR设置文件如下:

settings
{
    counters
    {
        interval = 10;
        counter = "Processor(_Total)\\% Processor Time";
        counter = "Processor(_Total)\\% Privileged Time";
        counter = "Processor(_Total)\\% User Time";
        counter = "Processor(_Total)\\Interrupts/sec";
    }
    clientfile     = "<above-wcat-script>";
    server         = "<host name>";
    clients        = 3;
    virtualclients = 100;
}

当我运行测试时,3x100 = 300个客户端开始发送请求,但是它们以相同的顺序执行,因此处理来自第一个客户端的第一个请求,然后来自其他客户端的下一个299个请求不再是唯一的。然后处理来自某个客户端的第二个请求,来自其他客户端的299个相同请求不是唯一的。 我需要一种方法来随机化请求或以不同的顺序运行它们,或者为每个虚拟客户端设置单独的场景脚本,以便每个请求都带有唯一的电子邮件地址。 用WCAT可以做到吗?

或许还有其他工具可以做这样的测试?

1 个答案:

答案 0 :(得分:3)

您是否考虑过使用rand(x,y) WCAT内部函数将随机整数添加到电子邮件地址?通过这样做,您可以想象使用随机电子邮件地址的单个请求进行单个事务。因此,您可以使用单个随机化事务1000次,而不是使用唯一的电子邮件地址手动创建(比方说)1000个请求。

您的新随机交易可能如下所示:

transaction                        
  {                                  
    id = "1";     
    weight = 1;
    request 
    { 
        verb = POST;
        postdata = "Email=" + rand("100000", "1000000") + "@loadtest.com&...";
        setheader { name="Content-Length"; value="...";
    } 
  } 

如果使用rand(x,y)不能使其足够随机,那么您可以尝试使用其他函数来使数据更随机。也许是这样的:

postdata = "Email=" + rand("100000", "1000000") + "@loadtest" + clientindex() + vclientindex() + ".com&...";

您可以find the WCAT 6.3 documentation here,包括可用的内部功能列表。如果内置函数不够用,您甚至可以构建自己的函数。