2016-06-16 4 views
1

JSR223サンプラーから、変数samplerを使用して現在のテストエレメントにアクセスできます。サンプラースクリプト内からJMeterテストエレメントツリーをナビゲートする方法

そこから、TestElementオブジェクトのツリーをナビゲートするにはどうすればよいですか?たとえば、親テストエレメント(親の親など)にアクセスするにはどうすればよいですか、またはTestPlanテストエレメントにアクセスするにはどうすればよいですか?

背景:

私は動的なGroovyを使ってJSR223サンプラーからJDBCコネクション構成要素を作成したい

他の質問(例:here)やウェブ検索(例:here)から、私はトップダウンからテストプラン要素を作成する方法を知っています(例えば、テスト計画を作成してそこからツリーを作成する方法) 。だから私はTestElementnew DataSourceElement()を実行する方法を知っていますが、その新しい要素をテスト計画に追加する方法はわかりません。サンプラースクリプトでは、samplerSampler)とctxJMeterContext)の変数にアクセスできますが、テストエレメントツリーをナビゲートする方法はわかりません。

私はちょうどsampler.addTestElementを使ってみましたが、config要素はsampler要素の下で本当に有効ではありません。それでも、私は試してみましたが、JDBCリクエストで使用しようとしたときにconfig要素が見つかりませんでした(エラー: "プール名が見つかりません: 'myDatabaseThreadPool'、変数名がJDBC接続コンフィグレーション変数名と一致していることを確認してください)。

TestPlan要素を取得してconfig要素を追加すればうまくいくと思っています。

FWIWは、私のテスト計画は、次のようになります。

  • テスト計画
    • スレッドグループ1これは私が欲しいところです
      • JSR223サンプラー((セットアップスレッドグループすることができます)動的設定を作成する)
    • スレッドグループ2(複数スレッド)
      • JDBCリクエスト(動的な設定で指定されたプールの変数名を使用しています)
    • ビューは私が動的に作成したい理由について、さらに詳細に行くことができますツリー

結果JDBC接続の設定ですが、私のサンプラースクリプトの内部からテストエレメントツリーをナビゲートする方法についての簡単な答えがある場合は、とにかくそれを知りたいです

答えて

0

JMeterContextからctxへのアクセスがあります。したがって、ctx.getEngine();メソッドを使用してStandardJMeterEngineクラスインスタンスにアクセスできます。StandardJMeterEngine sourceを見ると

あなたはそのテスト計画がHashTree構造として格納されて見ることができます。

private HashTree test; 

だから、選択肢は:

  • 変更アクセス修飾子publicへとソース
  • からのJMeterを再コンパイル
  • Trail - Java Reflection APIをアクセスするにはtestの値

リファレンスコード:

import org.apache.jmeter.engine.StandardJMeterEngine; 
import org.apache.jmeter.testelement.TestPlan; 
import org.apache.jorphan.collections.HashTree; 
import org.apache.jorphan.collections.SearchByClass; 

import java.lang.reflect.Field; 
import java.util.Collection; 

StandardJMeterEngine engine = ctx.getEngine(); 
Field test = engine.getClass().getDeclaredField("test"); 
test.setAccessible(true); 
HashTree testPlanTree = (HashTree) test.get(engine); 

SearchByClass testPlans = new SearchByClass(TestPlan.class); 
testPlanTree.traverse(testPlans); 
Collection testPlansRes = testPlans.getSearchResults(); 

TestPlan testPlan = (TestPlan)testPlansRes.toArray()[0]; 
//do what you need with "testPlanTree" and/or "testPlan" 

スクリプトテスト要素からのJMeterとJava APIを使用して詳細については、How to Use BeanShell: JMeter's Favorite Built-in Componentガイドをご覧ください。