2016-12-01 63 views
2

我的方案是我在循環內發送HTTP請求,其中參數值基於JMeter變量。當第一次進入循環時,我可能會有變量在這一點上沒有設置,所以他們是空的,因此我想從HTTP請求中刪除參數。我可以用下面的代碼成功地做到這一點。然而,在稍後的循環迭代中,這個變量現在可以有一個值,我想包括我之前刪除的參數。所以我的問題是,我如何暫時從我的HTTP請求中刪除參數?暫時從JMeter HTTP請求中移除參數

我具有根據JMeter的測試計劃提取物:

  • 雖然控制器
    • 一些邏輯
    • HTTP請求
      • JSR223預處理器(常規)

我的HTTP請求具有以下參數:

名稱值

inputA $ {A}

inputB $ {B}

我的預處理器腳本的樣子:

for (Iterator iterator = sampler.getArguments().iterator(); 
     prop = iterator.next(); 
     String value = prop.getStringValue(); 
     if (value.contains('\${')) { 
      iterator.remove(); 
     } 
    } 
+0

我正在嘗試使用一個簡單的郵政調用您的解決方案,它並沒有爲我工作。我錯過了什麼嗎?我實際上使用CSV參數運行api測試,我的目標是當它的值爲空字符串和刪除參數時提供空字符串參數,當我提供一個字符串像'nullValue'。 的JSON體 { 「ID」: 「NullValue屬性」 } 腳本: 爲(迭代迭代= sampler.getArguments()迭代(); 丙= iterator.next(); 字符串值=道具。如果(value.contains('nullValue')){ iterator.remove(); } } – Razkar

回答

0

解決這個問題可能是使採樣變元的克隆ts對象並將其設置爲採樣器。

import org.apache.jmeter.config.Arguments; 
    Arguments arguments = sampler.getArguments().clone(); 
    sampler.setArguments(arguments); 
    for (Iterator iterator = sampler.getArguments().iterator(); 
     prop = iterator.next(); 
     String value = prop.getStringValue(); 
     if (value.contains('\${')) { 
      iterator.remove(); 
     } 
    } 
0
  1. 最快,最簡單,恕我直言,正確的解決辦法是使用__evalVar() JMeter的功能,如:

    JMeter EvalVar Function

    所以在情況下,如果${A}變量沒有定義 - inputA參數將用空值來發送和這些參數被性能良好的應用程序忽略。參見系列的How to Use JMeter Functions導遊開始使用JMeter的功能

  2. 我記得在回答類似here的東西,它承擔檢查,如果該變量爲null使用Beanshell

  3. 如果由於某種原因點1和2是不適用的,這裏是正確的代碼完全刪除參數:

    import org.apache.jmeter.config.Arguments; 
    
    Arguments args = sampler.getArguments(); 
    Iterator it = args.iterator(); 
    
    while (it.hasNext()) { 
        def argument = it.next(); 
        if (argument.getStringValue().contains('${')) { 
         args.removeArgument(argument.getName()); 
        } 
    } 
    
+0

不幸的是,對於(1),應用程序實際上不會忽略空白值。 )和(3),問題依然存在,一旦我刪除了參數,我不能在循環的後面使用它,假設我將遍歷循環2次第一次vars.get(「A」)= null,I將刪除參數。第二次vars.get(「A」)= foo,現在我c不適用這個值。 至於(3),使用這段代碼,我會遇到java.util.ConcurrentModificationException。 也許我可以在修改它們之前將參數保存在bsh.shared中,然後將它們放回到後處理器中。我會接下來嘗試。 – SBGX

+0

然後轉到另一種方式:先創建沒有參數的空請求,並在存在相關變量值的情況下有條件地添加參數。 –