1

JMeterのXML応答に次のデータがあります。

<details>
<srNo>1</srNo>
<key>123</key>
<Name>Inspector</piName>
<age>89</age>
<country>India</country>
</details>
....................................
...................................
<details>
<srNo>1</srNo>
<key>123</key>
<Name>Inspector</piName>
<age>89</age>
<country>America</country>
</details>

XMLファイルの応答から、そのようなデータがn個あるとします。「鍵」の値を読みたい。たとえば。1「1」を読み取って変数に格納する必要があります。そのような応答の1つについて、XPathエクストラクターで読み取り、正しい値を取得していますが、変数で指定された量のキー値を取得するには、ループする必要があります。1000個のそのようなキーが必要な場合、変数のすべての値を取得するために1000回までループする必要があるとします。

変数でその値を取得した後、別のサンプラーでその値を使用する必要があります。例:$ {key1}

4

4 に答える 4

4

beanshell/Java コードでBeanshell PostProcessorを使用して、xml-response からすべての値を抽出し、それらを変数に格納するか、ファイルに書き込むようにしてください。

  1. 上記の xml 応答を返すサンプラーに Beanshell PostProcessor を子としてアタッチします。
  2. PostProcessor で次のコードを使用して (外部ファイルから、または「スクリプト」フィールドに挿入)、キーを抽出して保存します。
import java.io.*;
import javax.xml.parsers.*;
import javax.xml.xpath.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;

import org.apache.jmeter.samplers.SampleResult;

// set here your xpath expression (to extract EVERY key, not any separate one)
String xpathExpr = "//serviceResponse/details/key/text()";

try {
    DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
    domFactory.setNamespaceAware(true);
    DocumentBuilder builder = domFactory.newDocumentBuilder();

    // access result of parent sampler via "ctx" BeanShell variable        
    SampleResult result = ctx.getPreviousResult();
    InputSource is = new InputSource(new StringReader(result.getResponseDataAsString()));
    Document doc = builder.parse(is);

    XPath xpath = XPathFactory.newInstance().newXPath();
    XPathExpression expr = xpath.compile(xpathExpr);
    NodeList nodes = (NodeList)expr.evaluate(doc, XPathConstants.NODESET);

    // extract all the keys in loop
    for (int i = 0; i < nodes.getLength(); i++) {
        String key = nodes.item(i).getNodeValue();

        System.out.println(key);

        // save extracted key as separate jmeter variables        
        String keyName = "key_" + Integer.toString(i);
        vars.put(keyName,key);
    }
} catch (Exception ex) {
    IsSuccess = false;
    log.error(ex.getMessage());
    ex.printStackTrace();
}

抽出されたすべてのキーをファイルに保存し、 CSV Data Set Configを介して読み取ることもできます。

同様に、スクリプトの実装で問題が発生した場合に備えて、Java XPath API に関する良い記事と例を調べることができます。

お役に立てれば。

于 2012-04-10T16:40:53.613 に答える
0

データを取得したら、BeanShell PostProcessor 要素を追加します。以下のコードを使用して、変数をファイルに書き込みます。

name = vars.get("name");
email = vars.get("email");

log.info(email);  // if you want to log something to jmeter.log file

// Pass true if you want to append to existing file
// If you want to overwrite, then don't pass the second argument
f = new FileOutputStream("/my/file/path/result.csv", true);
p = new PrintStream(f); 
this.interpreter.setOut(p); 
print(name + "," + email);
f.close();
于 2013-03-01T14:10:37.733 に答える
0

選択された答えは、次を使用して xpath 抽出を行う複雑な方法のようです。

//serviceResponse/details/key/text()

独自の xpath とほぼ同じですが、最初の要素だけでなく、すべての要素を検索します (単に配列参照 [] を削除するだけです)。

これにより、見つかったすべてのキーが key_? という変数に配置されます。どこ ?key_1 から増加する整数です。

変数 key_matchNr から抽出された変数の数を確認できます。

上記の複雑なバージョンは、key_0 から開始するという点で異なります。

このリストを反復する方法は別の問題です。それが必要な場合です。

于 2014-10-08T00:40:13.473 に答える