2016-03-24 10 views
3

JMeterのカスタムサンプラーを作成しています。 jarをライブラリにインポートできます。サンプラーはGUI内で表示されますが、フィールドは正しく表示されません。ここでJmeterサンプラーにリソースファイルが表示されない

Project structure

私のコードです。

Custom.java

public class Custom extends AbstractSampler implements TestBean { 

    private String email = ""; 

    public Custom() { 
    super(); 
    } 

    public SampleResult sample(Entry entry) { 
    SampleResult res = new SampleResult(); 
    res.setSampleLabel(getName()); 
    res.setResponseData(("Hello " + getEmail()).getBytes()); 
    res.setSuccessful(Boolean.TRUE); 
    return res; 
    } 

    public void setEmail(String email){ this.email = email; } 
    public String getEmail(){ return email; } 
} 

CustomBeanInfo.java

public class CustomBeanInfo extends BeanInfoSupport { 

    protected CustomBeanInfo() { 
    super(Custom.class); 

    createPropertyGroup("contact", new String[]{ 
     "email" 
    }); 

    PropertyDescriptor p = property("email"); 
    p.setValue(NOT_UNDEFINED, Boolean.TRUE); 
    p.setValue(DEFAULT, "asd"); 
    } 
} 

CustomResources.properties

displayName=Custom Sampler 
email.displayName=Email Address 
email.shortDescription=User Email Address 
contact.displayName=Contact 

そして、これは、それがJMeterのGUIでどのように見えるかです。私の推測では、プロパティファイルがサンプラーに正しく接続されていないか、コンストラクターが実行されていないということです。

JMeter Gui

EDIT 1:追加pom.xmlファイルコンテンツEDIT 2

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>org.apache.jmeter</groupId> 
    <artifactId>custom-sampler</artifactId> 
    <version>0.2.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 
    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
    <dependencies> 
    <dependency> 
     <groupId>org.apache.jmeter</groupId> 
     <artifactId>ApacheJMeter_core</artifactId> 
     <version>2.10</version> 
     <scope>provided</scope> 
    </dependency> 
    </dependencies> 
    <build> 
    <resources> 
     <resource> 
     <directory>src/main/resources</directory> 
     <filtering>true</filtering> 
     </resource> 
    </resources> 
    </build> 
</project> 

:サンプラーを使用する場合(それはグループのスレッドに加え)エラーを以下がログに表示され

2016/03/25 09:28:23 WARN - jmeter.testbeans.gui.GenericTestBeanCustomizer: org.apache.jmeter.protocol.java.sampler.Custom#email(java.lang.String) does not appear to have been configured 
+0

本当にBeans/resourcesが必要ですか?一般的には、jmeter-plugins.orgやJMeter自身のサンプラーを見ても、ほとんどが豆やリソースを使用しません。 –

答えて

0

:おそらく間違っている。コメントを参照してください。

あなたはプロパティファイルの名前を誤ってしまったと思います。 JavaDoc for BeanInfoSupport読み取り:

でも任意のそのような修正の前に、(xxxは完全修飾 Beanクラス名) xxxResourcesという名前のリソースバンドルが 利用可能な場合に得られると次のように局在化するために使用される。

ファイル名には完全修飾名が必要です。例のソースコードの周りに掘る私は良いものを見つけることができませんでしたが、私は、このファイルを見つけた、notes_on_extending.txt

  1. パッケージを選択し、三つのファイルにする:
    • [コンポーネント名]を.java(org.apache.jmeter.config.CSVDataSet.java)
    • [コンポーネント名] BeanInfo.java(org.apache.jmeter.config.CSVDataSetBeanInfo.java)
    • [コンポーネント名] Resources.properties(ORG。 apache.jmeter.config.CSVDataSetResources.properti ES)

私はあなたのプロパティファイルがorg.apache.jmeter.custom.CustomResources.properties命名されなければならないと思います。COM /日/豆/ファインダー/ InstanceFinder.classはメッセージを表示せずに例外をキャッチなぜ

+0

これは私がhttps://github.com/yciabaud/jmeter-ssh-samplerに基づいているページです – user2847238

+0

私は間違っていると思います。 [公式リポジトリミラー](https://github.com/apache/jmeter)(例:[KeystoreConfig.properties](https://github.com/apache/jmeter/blob/trunk/src/))でいくつかの例を見つけました。 components/org/apache/jmeter/config/KeystoreConfigResources.properties))、あなたが持っているのと同じプロパティファイルに名前を付けました。私はここで私の答えを残すので、他の人があなたを助けようとするとこの道を下って行くことはありません。 – DavidS

0

問題はコンストラクタ

protected CustomBeanInfo() { 

の修飾子は

public CustomBeanInfo() { 

でなければなりません聞きません。

protected T instantiate(Class<?> var1, String var2) { 
    if (var1 != null) {// 90 
     try { 
      if (var2 != null) {// 92 
       var1 = ClassFinder.findClass(var2, var1.getClassLoader());// 93 
      } 

      if (this.type.isAssignableFrom(var1)) {// 95 
       return var1.newInstance();// 96 
      } 
     } catch (Exception var4) {// 99 
      ; 
     } 
    } 

    return null;// 103 
} 
関連する問題