Jmeter Sampler (取样器插件开发) 制定自己的 Sampler
来源:互联网 发布:美宝莲淘宝官方旗舰店 编辑:程序博客网 时间:2024/05/03 05:54
Jmeter可以帮助我们做性能测试、接口测试,然而Jmeter支持常用的HTTP等协议,如果某个公司采用自由协议那么Jmeter要采用实现【JavaSamplerClient】接口,这种方式当然是比较好的,但是有些东西和Jmeter自身的参数化等等功能,不太好结合,有的还有BUG,当然这个最灵活的,当然也可以采取做一个协议插件,嵌入到Jmeter中,那么怎么做呢?
1. 首先第一个做一个测试的GUI,要实现AbstractSamplerGui 类做才能被Jmeter加载
<code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">DemoSampleGui</span> <span class="kd">extends</span> <span class="n">AbstractSamplerGui</span> <span class="kd">implements</span> <span class="n">ItemListener</span> <span class="o">{</span> <span class="kd">private</span> <span class="n">DemoParamConfigGui</span> <span class="n">demoParamConfigGui</span><span class="o">;</span> <span class="kd">public</span> <span class="n">DemoSampleGui</span><span class="o">()</span> <span class="o">{</span> <span class="c1">//构造方法初始化</span> <span class="n">init</span><span class="o">();</span> <span class="o">}</span> <span class="cm">/** * @Descrition初始化 * */</span> <span class="kd">private</span> <span class="kt">void</span> <span class="n">init</span><span class="o">()</span> <span class="o">{</span> <span class="n">setLayout</span><span class="o">(</span><span class="k">new</span> <span class="n">BorderLayout</span><span class="o">(</span><span class="mi">0</span><span class="o">,</span> <span class="mi">5</span><span class="o">));</span> <span class="n">setBorder</span><span class="o">(</span><span class="n">makeBorder</span><span class="o">());</span> <span class="n">add</span><span class="o">(</span><span class="n">makeTitlePanel</span><span class="o">(),</span> <span class="n">BorderLayout</span><span class="o">.</span><span class="na">NORTH</span><span class="o">);</span> <span class="c1">//设置布局</span> <span class="n">demoParamConfigGui</span> <span class="o">=</span> <span class="k">new</span> <span class="n">DemoParamConfigGui</span><span class="o">();</span> <span class="c1">//这里是另外一个面板类,抽出去了,一会单独说</span> <span class="n">add</span><span class="o">(</span><span class="n">demoParamConfigGui</span><span class="o">,</span> <span class="n">BorderLayout</span><span class="o">.</span><span class="na">CENTER</span><span class="o">);</span> <span class="o">}</span> <span class="cm">/** * @Descrition清除页面数据信息 * */</span> <span class="nd">@Override</span> <span class="kd">public</span> <span class="kt">void</span> <span class="n">clearGui</span><span class="o">()</span> <span class="o">{</span> <span class="kd">super</span><span class="o">.</span><span class="na">clearGui</span><span class="o">();</span> <span class="n">demoParamConfigGui</span><span class="o">.</span><span class="na">clear</span><span class="o">();</span> <span class="o">}</span> <span class="cm">/** * @Descrition:配置组装元素信息 * */</span> <span class="nd">@Override</span> <span class="kd">public</span> <span class="kt">void</span> <span class="n">configure</span><span class="o">(</span><span class="n">TestElement</span> <span class="n">element</span><span class="o">)</span> <span class="o">{</span> <span class="kd">super</span><span class="o">.</span><span class="na">configure</span><span class="o">(</span><span class="n">element</span><span class="o">);</span> <span class="kd">final</span> <span class="n">MySamplerSamplerBase</span> <span class="n">samplerBase</span> <span class="o">=</span> <span class="o">(</span><span class="n">MySamplerSamplerBase</span><span class="o">)</span> <span class="n">element</span><span class="o">;</span> <span class="n">safParamConfigGui</span><span class="o">.</span><span class="na">configure</span><span class="o">(</span><span class="n">element</span><span class="o">);</span> <span class="o">}</span> <span class="cm">/** * @Descrition:创建新的元素 * */</span> <span class="nd">@Override</span> <span class="kd">public</span> <span class="n">TestElement</span> <span class="n">createTestElement</span><span class="o">()</span> <span class="o">{</span> <span class="n">MySamplerSamplerBase</span> <span class="n">sampler</span> <span class="o">=</span> <span class="k">new</span> <span class="n">MySamplerSamplerBase</span><span class="o">();</span> <span class="n">modifyTestElement</span><span class="o">(</span><span class="n">sampler</span><span class="o">);</span> <span class="k">return</span> <span class="n">sampler</span><span class="o">;</span> <span class="o">}</span> <span class="cm">/** * @Descrition:清除旧的组件,从新创建 * */</span> <span class="nd">@Override</span> <span class="kd">public</span> <span class="kt">void</span> <span class="n">modifyTestElement</span><span class="o">(</span><span class="n">TestElement</span> <span class="n">sampler</span><span class="o">)</span> <span class="o">{</span> <span class="n">sampler</span><span class="o">.</span><span class="na">clear</span><span class="o">();</span> <span class="n">safParamConfigGui</span><span class="o">.</span><span class="na">modifyTestElement</span><span class="o">(</span><span class="n">sampler</span><span class="o">);</span> <span class="k">this</span><span class="o">.</span><span class="na">configureTestElement</span><span class="o">(</span><span class="n">sampler</span><span class="o">);</span> <span class="o">}</span> <span class="cm">/** * @Descrition:label信息,也就是创建HTTP请求、JAVA请求 * */</span> <span class="nd">@Override</span> <span class="kd">public</span> <span class="n">String</span> <span class="n">getLabelResource</span><span class="o">()</span> <span class="o">{</span> <span class="k">return</span> <span class="s">"mySampler_title"</span><span class="o">;</span> <span class="o">}</span><span class="o">}</span></code><p>Label那个由于Jmeter实现国际化,所以在配置文件里,通过mySampler_title去资源文件里面找的,如果我们想添加自己的需要修改CORE里面的配置文件,增加自己对应的UICODE编码</p><div class="fluidbox-wrap" style="z-index:990"><a target=_blank target="_blank" href="https://testerhome.com/photo/2016/95e4c91917f8601e96ecf49f8feddad7.png" class="zoom-image fluidbox"><img src="https://testerhome.com/photo/2016/95e4c91917f8601e96ecf49f8feddad7.png" alt="" style="" /></a></div><strong>2.DemoParamConfigGui 类,这个类主要是初始化面板信息,和修改信息用的,我简单列几行代码,下面给最终的截图,这里可以根据自己的要求更改</strong><pre name="code" class="highlight java"><code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">MySamplerParamConfigGui</span> <span class="kd">extends</span> <span class="n">JPanel</span><span class="o">{</span> <span class="kd">public</span> <span class="n">JTextField</span> <span class="n">interfaceName</span><span class="o">;</span> <span class="kd">public</span> <span class="n">JTextField</span> <span class="n">interfaceAddress</span><span class="o">;</span> <span class="kd">public</span> <span class="n">JTextField</span> <span class="n">interfaceGroup</span><span class="o">;</span> <span class="kd">public</span> <span class="n">JTextField</span> <span class="n">interfaceVersion</span><span class="o">;</span> <span class="kd">public</span> <span class="n">JTextField</span> <span class="n">interfaceMethod</span><span class="o">;</span> <span class="c1">//定义几个页面输入框,这个根据自身需要开发哈,我这个是简单的例子</span> <span class="cm">/** * @Descrition:初始化面板 * */</span> <span class="kd">private</span> <span class="kt">void</span> <span class="n">init</span><span class="o">()</span> <span class="o">{</span> <span class="n">setLayout</span><span class="o">(</span><span class="k">new</span> <span class="n">BorderLayout</span><span class="o">(</span><span class="mi">0</span><span class="o">,</span> <span class="mi">5</span><span class="o">));</span> <span class="k">if</span> <span class="o">(</span><span class="n">displayName</span><span class="o">)</span> <span class="o">{</span> <span class="n">setBorder</span><span class="o">(</span><span class="n">makeBorder</span><span class="o">());</span> <span class="n">add</span><span class="o">(</span><span class="n">makeTitlePanel</span><span class="o">(),</span> <span class="n">BorderLayout</span><span class="o">.</span><span class="na">NORTH</span><span class="o">);</span> <span class="o">}</span> <span class="c1">// MAIN PANEL</span> <span class="n">VerticalPanel</span> <span class="n">mainPanel</span> <span class="o">=</span> <span class="k">new</span> <span class="n">VerticalPanel</span><span class="o">();</span> <span class="n">JPanel</span> <span class="n">serverPanel</span> <span class="o">=</span> <span class="k">new</span> <span class="n">HorizontalPanel</span><span class="o">();</span> <span class="n">serverPanel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">createInterfaceAddressPanel</span><span class="o">(),</span> <span class="n">BorderLayout</span><span class="o">.</span><span class="na">CENTER</span><span class="o">);</span> <span class="n">mainPanel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">serverPanel</span><span class="o">);</span> <span class="n">mainPanel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">createInterfaceNamePanel</span><span class="o">());</span> <span class="n">mainPanel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">getInterfaceGroupPanel</span><span class="o">());</span> <span class="n">mainPanel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">createInterfaceVersionPanel</span><span class="o">());</span> <span class="n">mainPanel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">createInterfaceMethodPanel</span><span class="o">());</span> <span class="n">mainPanel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">createJarFilePathPanel</span><span class="o">());</span> <span class="n">add</span><span class="o">(</span><span class="n">mainPanel</span><span class="o">,</span> <span class="n">BorderLayout</span><span class="o">.</span><span class="na">CENTER</span><span class="o">);</span> <span class="o">}</span> <span class="cm">/** * @Descrition:创建文本框信息 * */</span><span class="kd">private</span> <span class="n">JPanel</span> <span class="nf">createInterfaceMethodPanel</span><span class="p">(</span><span class="o">)</span> <span class="o">{</span> <span class="c1">//初始化上面文本对象,这里我列举一个例子,剩下都一下就是信息和布局的区别</span> <span class="n">interfaceMethod</span> <span class="o">=</span> <span class="k">new</span> <span class="n">JTextField</span><span class="o">(</span><span class="mi">15</span><span class="o">);</span> <span class="n">JLabel</span> <span class="n">label</span> <span class="o">=</span> <span class="k">new</span> <span class="n">JLabel</span><span class="o">(</span><span class="s">"调用方法:"</span><span class="o">);</span> <span class="c1">// $NON-NLS-1$</span> <span class="n">label</span><span class="o">.</span><span class="na">setLabelFor</span><span class="o">(</span><span class="n">interfaceMethod</span><span class="o">);</span> <span class="n">JPanel</span> <span class="n">panel</span> <span class="o">=</span> <span class="k">new</span> <span class="n">JPanel</span><span class="o">(</span><span class="k">new</span> <span class="n">BorderLayout</span><span class="o">(</span><span class="mi">5</span><span class="o">,</span> <span class="mi">0</span><span class="o">));</span> <span class="n">panel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">label</span><span class="o">,</span> <span class="n">BorderLayout</span><span class="o">.</span><span class="na">WEST</span><span class="o">);</span> <span class="n">panel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">interfaceMethod</span><span class="o">,</span> <span class="n">BorderLayout</span><span class="o">.</span><span class="na">CENTER</span><span class="o">);</span> <span class="k">return</span> <span class="n">panel</span><span class="o">;</span> <span class="o">}</span></code>
3.Sampler相关的类
<code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">MySamplerSamplerBase</span> <span class="kd">extends</span> <span class="n">AbstractSampler</span> <span class="kd">implements</span> <span class="n">TestStateListener</span><span class="o">,</span> <span class="n">TestIterationListener</span><span class="o">,</span> <span class="n">ThreadListener</span><span class="o">,</span> <span class="n">Interruptible</span> <span class="o">{</span><span class="c1">////////////////////// Code ///////////////////////////</span> <span class="kd">public</span> <span class="n">MySamplerSamplerBase</span><span class="o">()</span> <span class="o">{</span> <span class="n">setArguments</span><span class="o">(</span><span class="k">new</span> <span class="n">Arguments</span><span class="o">());</span> <span class="o">}</span> <span class="kd">public</span> <span class="kt">void</span> <span class="n">setInterfaceName</span><span class="o">(</span><span class="n">String</span> <span class="n">newInterfaceName</span><span class="o">)</span> <span class="o">{</span> <span class="k">this</span><span class="o">.</span><span class="na">setProperty</span><span class="o">(</span><span class="n">InterfaceName</span><span class="o">,</span> <span class="n">newInterfaceName</span><span class="o">);</span> <span class="o">}</span> <span class="kd">public</span> <span class="n">String</span> <span class="n">getInterfaceAddress</span><span class="o">()</span> <span class="o">{</span> <span class="k">return</span> <span class="n">getPropertyAsString</span><span class="o">(</span><span class="n">InterfaceAddress</span><span class="o">);</span> <span class="o">}</span> <span class="kd">public</span> <span class="n">String</span> <span class="n">getInterfaceName</span><span class="o">()</span> <span class="o">{</span> <span class="k">return</span> <span class="n">getPropertyAsString</span><span class="o">(</span><span class="n">InterfaceName</span><span class="o">);</span> <span class="o">}</span> <span class="kd">public</span> <span class="kt">void</span> <span class="n">setInterfaceGroup</span><span class="o">(</span><span class="n">String</span> <span class="n">newInterfaceGroup</span><span class="o">)</span> <span class="o">{</span> <span class="k">this</span><span class="o">.</span><span class="na">setProperty</span><span class="o">(</span><span class="n">InterfaceGroup</span><span class="o">,</span> <span class="n">newInterfaceGroup</span><span class="o">,</span> <span class="s">""</span><span class="o">);</span> <span class="o">}</span> <span class="kd">public</span> <span class="n">String</span> <span class="n">getInterfaceGroup</span><span class="o">()</span> <span class="o">{</span> <span class="k">return</span> <span class="n">getPropertyAsString</span><span class="o">(</span><span class="n">InterfaceGroup</span><span class="o">,</span> <span class="s">""</span><span class="o">);</span> <span class="o">}</span> <span class="kd">public</span> <span class="n">String</span> <span class="n">getInterfaceVersion</span><span class="o">()</span> <span class="o">{</span> <span class="k">return</span> <span class="n">getPropertyAsString</span><span class="o">(</span><span class="n">InterfaceVersion</span><span class="o">);</span> <span class="o">}</span> <span class="kd">public</span> <span class="n">String</span> <span class="n">getInterfaceMethod</span><span class="o">()</span> <span class="o">{</span> <span class="k">return</span> <span class="n">getPropertyAsString</span><span class="o">(</span><span class="n">InterfaceMethod</span><span class="o">);</span> <span class="o">}</span> <span class="c1">//这些都是从界面获取数据</span> <span class="cm">/** * @Descrition:设置参数 * */</span> <span class="kd">public</span> <span class="kt">void</span> <span class="n">setArguments</span><span class="o">(</span><span class="n">Arguments</span> <span class="n">value</span><span class="o">)</span> <span class="o">{</span> <span class="c1">//设置和获取参数</span> <span class="n">setProperty</span><span class="o">(</span><span class="k">new</span> <span class="n">TestElementProperty</span><span class="o">(</span><span class="n">ARGUMENTS</span><span class="o">,</span> <span class="n">value</span><span class="o">));</span> <span class="o">}</span> <span class="cm">/** * @Descrition:获取参数 * */</span> <span class="kd">public</span> <span class="n">Arguments</span> <span class="n">getArguments</span><span class="o">()</span> <span class="o">{</span> <span class="k">return</span> <span class="o">(</span><span class="n">Arguments</span><span class="o">)</span> <span class="n">getProperty</span><span class="o">(</span><span class="n">ARGUMENTS</span><span class="o">).</span><span class="na">getObjectValue</span><span class="o">();</span> <span class="o">}</span><span class="cm">/** * @Descrition:执行sampler这个非常重要了,是执行sampler的地方 * */</span> <span class="nd">@Override</span> <span class="kd">public</span> <span class="n">SampleResult</span> <span class="n">sample</span><span class="o">(</span><span class="n">Entry</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span> <span class="k">return</span> <span class="n">sample</span><span class="o">();</span> <span class="o">}</span> <span class="kd">private</span> <span class="kd">transient</span> <span class="n">MySamplerAbstractImpl</span> <span class="n">impl</span><span class="o">;</span> <span class="c1">//sampler执行类的抽象类,</span> <span class="cm">/** * @Descrition:执行sampler * */</span> <span class="kd">public</span> <span class="n">SampleResult</span> <span class="n">sample</span><span class="o">()</span> <span class="o">{</span> <span class="n">SampleResult</span> <span class="n">res</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span> <span class="k">try</span> <span class="o">{</span> <span class="k">if</span> <span class="o">(</span><span class="n">impl</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span> <span class="c1">//这里面可以做工厂模式,处理不同的协议sampler</span> <span class="n">impl</span> <span class="o">=</span> <span class="k">new</span> <span class="n">MySamplerTestSampler</span><span class="o">(</span><span class="k">this</span><span class="o">);</span> <span class="n">List</span> <span class="n">argumentList</span><span class="o">=</span><span class="n">getArgumentList</span><span class="o">();</span> <span class="c1">//获取参数数据,默认的HTTP请求就是在这里组装带参数的URL,传入不同的client的</span> <span class="n">res</span> <span class="o">=</span> <span class="n">impl</span><span class="o">.</span><span class="na">sample</span><span class="o">(</span><span class="n">argumentList</span><span class="o">);</span> <span class="n">res</span><span class="o">.</span><span class="na">setSampleLabel</span><span class="o">(</span><span class="n">getName</span><span class="o">());</span> <span class="o">}</span> <span class="k">return</span> <span class="n">res</span><span class="o">;</span> <span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">Exception</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span> <span class="k">return</span> <span class="n">errorResult</span><span class="o">(</span><span class="n">e</span><span class="o">,</span> <span class="k">new</span> <span class="n">SampleResult</span><span class="o">());</span> <span class="o">}</span> <span class="o">}</span> <span class="cm">/** * @Descrition: 这里面组装表格传过来的数据,传LIST过去 ,这里可以任意自己处理数据格式 * */</span> <span class="kd">public</span> <span class="n">List</span> <span class="n">getArgumentList</span><span class="o">()</span> <span class="o">{</span> <span class="n">List</span><span class="o"><</span><span class="n">MySamplerArgument</span><span class="o">></span> <span class="n">list</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ArrayList</span><span class="o">();</span> <span class="n">PropertyIterator</span> <span class="n">iter</span> <span class="o">=</span> <span class="n">getArguments</span><span class="o">().</span><span class="na">iterator</span><span class="o">();</span> <span class="k">while</span> <span class="o">(</span><span class="n">iter</span><span class="o">.</span><span class="na">hasNext</span><span class="o">())</span> <span class="o">{</span> <span class="n">MySamplerArgument</span> <span class="n">item</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span> <span class="n">Object</span> <span class="n">objectValue</span> <span class="o">=</span> <span class="n">iter</span><span class="o">.</span><span class="na">next</span><span class="o">().</span><span class="na">getObjectValue</span><span class="o">();</span> <span class="k">try</span> <span class="o">{</span> <span class="n">item</span> <span class="o">=</span> <span class="o">(</span><span class="n">MySamplerArgument</span><span class="o">)</span> <span class="n">objectValue</span><span class="o">;</span> <span class="n">list</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">item</span><span class="o">);</span> <span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">ClassCastException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span> <span class="n">log</span><span class="o">.</span><span class="na">warn</span><span class="o">(</span><span class="s">"Unexpected argument type: "</span> <span class="o">+</span> <span class="n">objectValue</span><span class="o">.</span><span class="na">getClass</span><span class="o">().</span><span class="na">getName</span><span class="o">());</span> <span class="n">item</span> <span class="o">=</span> <span class="k">new</span> <span class="n">MySamplerArgument</span><span class="o">((</span><span class="n">Argument</span><span class="o">)</span> <span class="n">objectValue</span><span class="o">);</span> <span class="o">}</span> <span class="o">}</span> <span class="k">return</span> <span class="n">list</span><span class="o">;</span> <span class="o">}</span><span class="o">}</span></code>
*4.具体sampler执行类,具体的协议请求发起客户端要你自己定义了,集成到Jar包里就行,所有的类编写完成打JAR包扔到Jmeter/lib/ext下
*
<code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">MySamplerTestSampler</span> <span class="kd">extends</span> <span class="n">MySamplerAbstractImpl</span> <span class="o">{</span><span class="nd">@Override</span> <span class="kd">protected</span> <span class="n">SampleResult</span> <span class="n">sample</span><span class="o">(</span><span class="n">List</span> <span class="n">list</span><span class="o">)</span> <span class="o">{</span> <span class="c1">//因为我定时的是list类型 所以这里面是list</span> <span class="n">SampleResult</span> <span class="n">res</span> <span class="o">=</span> <span class="k">new</span> <span class="n">SampleResult</span><span class="o">();</span> <span class="n">SampleResult</span> <span class="n">res</span> <span class="o">=</span> <span class="k">new</span> <span class="n">SampleResult</span><span class="o">();</span> <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"list:"</span><span class="o">+</span><span class="n">list</span><span class="o">.</span><span class="na">toString</span><span class="o">());</span> <span class="k">try</span> <span class="o">{</span> <span class="n">String</span> <span class="n">interfaceAddress</span> <span class="o">=</span> <span class="n">getInterfaceAddress</span><span class="o">();</span> <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"interfaceAddress:"</span><span class="o">+</span><span class="n">interfaceAddress</span><span class="o">);</span> <span class="n">String</span> <span class="n">interfaceName</span> <span class="o">=</span> <span class="n">getInterfaceName</span><span class="o">();</span> <span class="n">res</span><span class="o">.</span><span class="na">setSamplerData</span><span class="o">(</span><span class="s">"interfaceAddress:"</span><span class="o">+</span><span class="n">interfaceAddress</span><span class="o">+</span><span class="s">"interfaceName:"</span><span class="o">+</span><span class="n">interfaceName</span><span class="o">);</span> <span class="n">res</span><span class="o">.</span><span class="na">sampleStart</span><span class="o">();</span> <span class="n">res</span><span class="o">.</span><span class="na">setResponseData</span><span class="o">(</span><span class="s">"list参数:"</span><span class="o">+</span><span class="n">list</span><span class="o">.</span><span class="na">toString</span><span class="o">(),</span><span class="s">"UTF-8"</span><span class="o">);</span> <span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">RuntimeException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span> <span class="n">res</span><span class="o">.</span><span class="na">setResponseCode</span><span class="o">(</span><span class="s">"500"</span><span class="o">);</span> <span class="n">res</span><span class="o">.</span><span class="na">setSuccessful</span><span class="o">(</span><span class="kc">false</span><span class="o">);</span> <span class="n">res</span><span class="o">.</span><span class="na">setResponseMessage</span><span class="o">(</span><span class="n">e</span><span class="o">.</span><span class="na">toString</span><span class="o">());</span> <span class="n">e</span><span class="o">.</span><span class="na">printStackTrace</span><span class="o">();</span> <span class="k">return</span> <span class="n">res</span><span class="o">;</span> <span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">Exception</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span> <span class="n">res</span><span class="o">.</span><span class="na">setResponseCode</span><span class="o">(</span><span class="s">"500"</span><span class="o">);</span> <span class="n">res</span><span class="o">.</span><span class="na">setSuccessful</span><span class="o">(</span><span class="kc">false</span><span class="o">);</span> <span class="n">res</span><span class="o">.</span><span class="na">setResponseMessage</span><span class="o">(</span><span class="n">e</span><span class="o">.</span><span class="na">toString</span><span class="o">());</span> <span class="n">e</span><span class="o">.</span><span class="na">printStackTrace</span><span class="o">();</span> <span class="k">return</span> <span class="n">res</span><span class="o">;</span> <span class="o">}</span> <span class="k">finally</span> <span class="o">{</span> <span class="n">res</span><span class="o">.</span><span class="na">sampleEnd</span><span class="o">();</span> <span class="o">}</span> <span class="k">return</span> <span class="n">res</span><span class="o">;</span> <span class="o">}</span><span class="o">}</span></code>
5.演示
0 0
- Jmeter Sampler (取样器插件开发) 制定自己的 Sampler
- Jmeter Sampler (取样器插件开发) 制定自己的 Sampler
- Jmeter Sampler (取样器插件开发) 制定自己的 Sampler
- JMeter-----TCP Sampler(TCP 取样器)
- Jmeter开发Sampler测试插件
- JMeter-Sampler-Debug Sampler
- 调试JMeter的JAVA sampler
- 如何为Apache JMeter开发插件(四)——几种类型的Sampler
- JMeter开发插件之一(JMeter开发Java Request Sampler测试mongodb)
- 使用TestBean框架开发一个简单的sampler插件
- jmeter之BeanShell Sampler
- JMeter-Sampler-HTTP请求
- JMeter-Sampler-JDBC Request
- JMeter-Sampler_BeanShell Sampler
- jmeter之HTTP取样器、Webserivce采样器、Debug Sampler、Cookie、header、授权、jdbc连接、用户自定义属性和变量
- 实战:使用JMeter的Java Sampler轻松定制自己的benchmark
- jmeter使用BeanShell Sampler测试自己写的java接口(一)
- jmeter使用BeanShell Sampler测试自己写的java接口(二)
- 迁移 SQL Server 数据库到 Azure SQL 实战
- Libev源码分析06:异步信号同步化--sigwait、sigwaitinfo、sigtimedwait和signalfd
- 封装SDK时用到的脚本
- 广州网警开展应急处置攻防演练 模拟“黑客”真实攻击
- AndroidStudio 更新后,项目没有错误,点击运行报错。Instant Run requires 'Tools | Android | Enable ADB integration' to b
- Jmeter Sampler (取样器插件开发) 制定自己的 Sampler
- AngularJS的四大特性
- linux线程通信:sigwait和pthread_kill
- 如何在HTML5浪潮中拥有自己的一片天地
- 图结构练习——BFS——从起始点到目标点的最短步数
- R语言学习杂记
- android--jenkins+gradle+android自动化构建apk步骤
- 为什么 Android 中 Toolbar.setTitle() 没有效果
- android studio 多渠道打包之gradle