簡體   English   中英

在JMeter Java API中,如何在PreProcessor采樣器中設置POST表單值?

[英]In JMeter java api how to set POST Form values in a PreProcessor sampler?

我正在編寫一個預處理器,可以通過采樣器成功更新GET查詢字符串。

但是,如果我對POST使用相同的方法,盡管可以通過getArguments()列出FORM字段,但不會設置該值。

  Arguments arguments = sampler.getArguments();
  for (int i=0; i<arguments.getArgumentCount(); i++) {
      Argument argument = arguments.getArgument(i);
      if (argument.getName().equals("page_submission_id")) {
          String newVal = "8743718386872";                         
          argument.setValue(newVal);
          System.out.println("Setting arg["+argument.getName()+"] to["+newVal+"]");
      }
  }
  sampler.setArguments(arguments);  
  printArgs(arguments);  

此輸出顯示Arguments值不變。

Setting arg[page_submission_id] to[8743718386872]
Arguments After
   ...
   Found arg[page_submission_id] is[XXXXXXXXXXXXX]
   ...

在進一步深入jmeter代碼之后,有一個Attribute對象的“ runningVersion”屬性(通過isRunningVersion())設置為true。

我嘗試了幾種方法來解決這個問題:

  • 強制runningVersion為false-然后設置值,但發送GET消息
  • 創建一個新的Arguments對象,並向其添加帶有值的新Argument條目-這不會更改值

誰能指出在發送前設置POST FORM字段值的官方方法?

謝謝

好吧,您為參數分配了一個新值,但是我看不到在哪里使用具有新值的參數來更新采樣器的參數。

我堅信KISS原則,因此建議您像下面這樣簡化腳本,而不是添加更多內容:

import org.apache.jmeter.config.Argument;

sampler.getArguments().removeArgument("page_submission_id");
sampler.addArgument("page_submission_id","8743718386872"); 

另外,我希望您使用的是JSR223 PreProcessor和Groovy語言

我設法解決了這個問題:

  1. (最初)通過清理線程池,因為我的最初嘗試包括了許多諸如“正則表達式提取器”和“用戶定義的變量”之類的東西。 刪除這些參數后,我正在使用的方法成功更改了參數值,並且
  2. (在深入了解我的設置時,問題又回來了),方法是添加一個新的Argments對象的創建並插入(以相同的順序)具有我所需要的值的新Argument對象。 然后將采樣器設置為使用該新Arguments對象。

     Arguments newArgs = new Arguments(); Arguments arguments = sampler.getArguments(); for (int i=0; i<arguments.getArgumentCount(); i++) { Argument argument = arguments.getArgument(i); HTTPArgument newArg = new HTTPArgument(); newArg.setName(arguments.getName()); if (arguments.getName().equals("field_to_replace")) { newArg.setValue("new value"); } else { newArg.setValue(arguments.getValue()); } newArgs.addArgument(newArg); } sampler.setArguments(newArgs); 

我的看法是,這要歸結到我跳過的“ Argument.setValue()”所使用的setProperty()中的“ if(isRunningVersion())”測試。

盡管這似乎行得通(到目前為止,對於我的測試用例),但我很欣賞覆蓋它可能不是正確的正式方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM