2012-07-17 38 views
2

我想在我的web应用程序中运行一个POST动作的负载测试。问题是,只有在POST数据中收到唯一的电子邮件地址时,才能完成操作。我产生有几千WCAT脚本要求每个都有唯一的电子邮件,如:加载测试随机:如何设置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; 
} 

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

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

回答

3

您是否考虑过使用WCAT内部函数rand(x,y)将随机整数添加到电子邮件地址?通过这样做,您可以设想使用随机电子邮件地址进行单个请求的单个请求。因此,而不是手动创建(例如)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,其中包括可用的内部功能列表。如果内置函数不够用,你甚至可以自己构建。

+1

这就是我正在寻找的。 – PanJanek 2013-11-28 12:18:09

+1

使用rand(),clientindex()和vclientindex也做了一些小改动, rand()中的数字应该是这样的字符串:“rand(”100000“,”1000000“)'。出于某种原因,我花了一个小时才弄明白这一点。 – 2014-03-27 14:00:45

+0

@DJvanWyk,感谢您在rand()函数中注意到缺少的引号。我已经纠正了我答案中的错误。 – 2014-03-27 17:22:40

相关问题