2012-02-08 6 views
7

html応答からテーブル行のセットを繰り返し処理したいとします(たとえば、各行に別の要求で使用したいデータが含まれています)。これを行うには、私はCOUNTERという変数を設定していると私はxpath抽出器でjmeter変数を使用する

//table//tr[${COUNTER}]/td[0] 

へのXPathクエリのフィールドセットでのXPath抽出は、しかし、これは関係なく、カウンタの値の結果を得るために失敗したセットアップを持っています。 $ {COUNTER}を数値で置き換えると、たとえば

//table//tr[4]/td[0] 

期待どおりに動作します。

次のバグは、この機能は2.5.1 https://issues.apache.org/bugzilla/show_bug.cgi?id=51885であるべきことを示しているが、それはJMeterのが、私に非常に有用であることが必要XPath式の変数を使用して2.5.1または2.6

に私のために動作しません。ウェブ上でこれを行う方法の話を見つけることができません。私は代わりの提案をすることができますが、正規表現はすぐに適切な解決策ではありません。

答えて

1

Beanshell PostProcessor beanshell/javaコードを使用して、xpath-queryからすべての値を抽出するようにしてください。

  1. HTML応答を返すサンプラーにBeanshell PostProcessorを子として添付します。
  2. は(外部ファイルからか「スクリプト」フィールドに挿入)ポストプロセッサに次のコードを使用して、キーを抽出して保存するには:

    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 = "//table//tr/td/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); 
        } 
    } catch (Exception ex) { 
        IsSuccess = false; 
        log.error(ex.getMessage()); 
        ex.printStackTrace(); 
    } 
    


xpathExpr = "//table//tr/td/text()"を使用すると、あなたのすべての列でを与えますすべての行例えば、XPathクエリを絞り込む

  • :あなたができるより具体的な選択を取得するには
    //table//tr/td[1]/text();
  • すべての値を抽出し、結果のリストを繰り返して、必要なものを正確に取得します。

これが役に立ちます。

関連する問題