如何在Jmeter中的Recycle中从CSV更改一个变量值

时间:2017-03-17 05:39:40

标签: jmeter

我有CSV(Users.CSV),其中包含10000个唯一的用户名,名字,姓氏和电子邮件ID。在我的测试计划中的一个POST请求中,我需要传递日期。我可以在同一日期只发布一次数据。我如何使用CSV或任何其他方式处理此问题?

我可以想到两个选择: 1.在同一Users.CSV中为所有10000条目拖动相同的日期。然后在同一CSV中再次复制粘贴用户名,名字,姓氏和电子邮件ID,然后拖动下一个日期。 2.维护两个CSV文件,一个用于用户,一个用于日期。 Date.csv将有相同日期的10000个条目,而10001之后将包含下一个日期。

在这两个解决方案中,我将需要维护样本计数,因为我将需要从CSV中删除那些许多条目以供下次运行。

有人可以分享任何更好的选择来实现这一目标吗?

2 个答案:

答案 0 :(得分:2)

如果您需要过去/未来的时间戳,请使用__time() function生成当前日期(或将其与__longSum() function合并)

默认情况下,__time()函数返回自Unix epoch开始以来的当前时间(以毫秒为单位),但您可以使用SimpleDateFormat模式控制格式。

JMeter Time Function Examples

有关上述两个和其他JMeter函数的更多信息,请参阅How to Use JMeter Functions帖子系列

答案 1 :(得分:1)

您可以使用两个组件来解决此问题: -

  1. User Defined Variables
  2. BeanShell-PreProcessor
  3. 步骤1:使用用户定义的变量在脚本中定义一个vraible以保持日期计数器,以便在发出特定的POST请求时不应使用相同的日期。

    UDV example

    步骤2:使用步骤1中定义的变量,并编写脚本以在预处理器中获取唯一日期。应将此预处理器作为子项添加到该特定POST请求中。

    预处理器的示例代码: -

    import java.text.SimpleDateFormat;
    import java.util.Date;
    
       int dateCounter=Integer.parseInt(vars.get("dateCounter")); 
    
       Date currentDate = new Date();
       SimpleDateFormat date = new SimpleDateFormat("dd/MMM/yyyy");
    
    
       long milliseconds = (long) dateCounter * 24 * 60 * 60 * 1000;
       Date previousDate = new Date(currentDate.getTime() - milliseconds);
       String strDate = date.format(previousDate);
       vars.put("date",strDate);
    
    
       dateCounter  = dateCounter - 1;
       vars.put("dateCounter",Integer.toString(dateCounter));
    

    请注意,我们在示例中使用了过去1000天,您可以根据需要进行更改。现在这个date -a Jmeter变量可以在整个线程组中使用,一旦你使用partilculare POST采样器生成一个日期,就会为下一个请求生成一个新的日期。