jmeter应用---测试元件介绍(三)
来源:互联网 发布:二叉树遍历递归算法 编辑:程序博客网 时间:2024/05/21 19:49
Java Request
使用比较频繁的一个取样器,一般接口测试,用这个足够(特殊要求除外)。
此取样器允许操作实现了org.apache.jmeter.protocol.java.sampler.JavaSamplerClient接口或者继承AbstractJavaSamplerClient抽象类的java类。通过接口的实现,可以使用jmeter控制多线程、输入参数、数据收集。
注意
实现JavaSamplerClient接口,需要复写的方法:
public SampleResult runTest(JavaSamplerContext context) {}
public void setupTest(JavaSamplerContext context) {}
public void teardownTest(JavaSamplerContext context) {}
public Arguments getDefaultParameters() {}
继承AbstractJavaSamplerClient这个抽象类,那么只需要复写你需要的方法即可。
1、先来UI看看长啥样
2、写一个java请求
public class JmeterAcceptGOODetailList extends AbstractJavaSamplerClient { ClassPathXmlApplicationContext context = null; GuestOrderOutboundFacade guestOrderOutboundFacade =null; JmeterAcceptGOODetailList jmeterAcceptGOODetailList = null; public Arguments getDefaultParameters() { Arguments params = new Arguments(); params.addArgument("khddid", ""); params.addArgument("bz", ""); params.addArgument("khddmxid", ""); params.addArgument("mxbz", ""); return params; } public void setupTest(JavaSamplerContext arg0) { context = new ClassPathXmlApplicationContext(new String[] { "classpath:META-INF/dd-frame/spring/master-service-consumer.xml" }); context.start(); guestOrderOutboundFacade = (GuestOrderOutboundFacade) context.getBean("guestOrderOutboundFacade"); // 获取远程服务代理 jmeterAcceptGOODetailList = new JmeterAcceptGOODetailList(); } public SampleResult runTest(JavaSamplerContext javaSamplerContext) { SampleResult sr = new SampleResult(); sr.setSampleLabel( "GuestOrderOutboundFacade.acceptGOODetailList"); try { List<MainChildListBean<DdglKhdd,List<DdglKhddmx>>> mainChildListBeanList = new ArrayList<MainChildListBean<DdglKhdd,List<DdglKhddmx>>>(); sr.sampleStart();jmeterAcceptGOODetailList.fitTogether(mainChildListBeanList,javaSamplerContext); ResponseInfo responseInfo =(ResponseInfo)guestOrderOutboundFacade.acceptGOODetailList(mainChildListBeanList); sr.setResponseData("from provider:"+responseInfo.getResultMsg(), null); sr.setDataType(SampleResult.TEXT); if(responseInfo.errcode==0){ sr.setSuccessful(true); }else{ sr.setSuccessful(false); } } catch (Exception e) { e.printStackTrace(); }finally { sr.sampleEnd();// jmeter 结束统计响应时间标记 } return sr; } //测试结束时调用; public void teardownTest(JavaSamplerContext arg0) { //context.destroy(); } private void fitTogether(List<MainChildListBean<DdglKhdd,List<DdglKhddmx>>> mainChildListBeanList,JavaSamplerContext javaSamplerContext){ //组织入参参数,此处略…… }}
实现JavaSamplerClient接口,看看长啥样就行了,不写实际的例子了
package com.dangdang.dubbo.util;import org.apache.jmeter.config.Arguments;import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;import org.apache.jmeter.samplers.SampleResult;public class JavaSamplerClientTest implements JavaSamplerClient { @Override public Arguments getDefaultParameters() { // TODO Auto-generated method stub return null; } @Override public SampleResult runTest(JavaSamplerContext arg0) { // TODO Auto-generated method stub return null; } @Override public void setupTest(JavaSamplerContext arg0) { // TODO Auto-generated method stub } @Override public void teardownTest(JavaSamplerContext arg0) { // TODO Auto-generated method stub }}
然后导出可执行jar,放入$jmeter_home/lib/ext/中(默认情况下,若配置了userlibpath,可以放在指定位置)
注意:为什么是可执行jar而不用普通jar?
可执行jar,会把依赖的jar包同时导出,运行程序时关联一下jar包,组成一个完整的运行环境;普通jar包,如果需要运行写的程序,需要手工配置依赖jar,你说那个简单~
3、在测试计划中导入依赖jar包
4、创建java请求
5、剩下的就是配置运行了~
配置线程组、配置参数化、配置负载机…… action!
BeanShell Sampler
beahshell是一个轻量级的脚本语言,具体教程可以参考 beanshell docs
根据官网的描述,大致可以总结为
BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;一种松散类型的脚本语言;用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性;执行标准Java语句和表达式,另外包括一些脚本命令和语法
beanshell提供了内置变量,通过这些变量与JMeter进行交互 BeanShell Listener
- log:写入信息到jmeber.log文件
- ctx:该变量引用了当前线程的上下文
- vars - JMeterVariables操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁
- vars.get(String key):从jmeter中获得变量值
- vars.put(String key,String value):数据存到jmeter变量中
- vars.putObject(“OBJ1”,new Object());
- props - JMeterProperties - class java.util.Properties操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。
- props.get(“START.HMS”) START.HMS为属性名,在文件jmeter.properties中定义
- props.put(“PROP1”,”1234”);
- SampleResult - Sampler:提供对前一个取样器结果的访问
- Label - 取样器标签
- FileName - 文件名称
- Parameters - 入参列表
- bsh.args - 入参变量数组类似java main中的args
- SampleResult - SampleResult
- ResponseCode:默认是200
- ResponseMessage:默认是ok
- IsSuccess:默认是true
vars.put("secondParam","我是后来加入的");source("c:\\A.java");A aInstance = new A();int result=aInstance.add(1,1);vars.put("thirdExp","我是调用外部类的结果:"+result);vars.put("var","我是调用入参:"+bsh.args[0]);vars.put("var1","我是调用入参:"+bsh.args[1]);vars.put("var2","我是调用入参:"+bsh.args[2]);log.info("我是log测试");log.info("SampleResult.ResponseCode:"+SampleResult.ResponseCode);log.info("SampleResult.ResponseMessage:"+SampleResult.ResponseMessage);log.info("Parameters:"+Parameters);log.info("Lable:"+Label);log.info("START.HMS:"+props.get("START.HMS"));log.info("ctx.getThreadNum():"+ctx.getThreadNum());
复杂一点的例子,浏览器例子
import javax.swing.*;import javax.swing.event.*;import javax.swing.text.*;import java.awt.event.*;import java.awt.*;JFrame browser( startingUrl ) { invoke( method, args ) {} windowClosing(WindowEvent we) { we.getWindow().setVisible(false); } setPage( url ) { try { pane.setPage( url ); } catch(Exception e) { statusBar.setText("Error opening page: "+url); } } hyperlinkUpdate( HyperlinkEvent he ) { type = he.getEventType(); if (type == HyperlinkEvent.EventType.ENTERED) { pane.setCursor( Cursor.getPredefinedCursor( Cursor.HAND_CURSOR) ); statusBar.setText(he.getURL().toString()); } else if (type == HyperlinkEvent.EventType.EXITED) { pane.setCursor( Cursor.getDefaultCursor() ); statusBar.setText(" "); } else { setPage( he.getURL() ); if (urlField != null) urlField.setText(he.getURL().toString()); } } frame = new JFrame("Browser"); frame.setSize(400,300); frame.addWindowListener( this ); urlPanel = new JPanel(); urlPanel.setLayout(new BorderLayout()); urlField = new JTextField(startingUrl); urlPanel.add(new JLabel("Site: "), BorderLayout.WEST); urlPanel.add(urlField, BorderLayout.CENTER); statusBar = new JLabel(" "); pane = new JEditorPane(); pane.setEditable(false); setPage( startingUrl ); jsp = new JScrollPane(pane); frame.getContentPane().add(jsp, BorderLayout.CENTER); frame.getContentPane().add(urlPanel, BorderLayout.SOUTH); frame.getContentPane().add(statusBar, BorderLayout.NORTH); // This is the equivalent of an inner class in bsh. urlTextHandler() { actionPerformed(ActionEvent ae) { setPage( ae.getActionCommand() ); } return this; } urlField.addActionListener( urlTextHandler() ); pane.addHyperlinkListener( (HyperlinkListener)this ); return frame;}browser = browser("http://www.baidu.com/");browser.show();
jmeter应用—测试元件介绍(一)
jmeter应用—测试元件介绍(二)
jmeter应用—测试元件介绍(三)
jmeter应用—测试元件介绍(四)
原文链接 http://blog.csdn.net/yue530tomtom/article/details/78626187
- jmeter应用---测试元件介绍(三)
- jmeter应用---测试元件介绍(一)
- jmeter应用---测试元件介绍(二)
- jmeter应用---测试元件介绍(四)
- Jmeter测试元件介绍
- Jmeter学习(三)——常用测试元件
- JMeter压力测试案例大全 之(邮件服务器测试和元件介绍)
- JMeter压力测试案例大全 之(邮件服务器测试和元件介绍)
- JMeter常用测试元件
- JMeter常用测试元件
- JMeter常用测试元件
- JMeter常用测试元件
- jmeter学习记录(三):web测试的常用配置元件
- JMeter基础--测试计划元件
- JMeter工具的元件介绍
- Jmeter—测试计划里的元件(续)
- badboy+jMeter+jProfile软件测试工具介绍(三)
- (Jmeter 三)JMETER+WEBSERVICE性能测试
- C++中的inline用法
- Spring @Configuration用annotation装配spring
- PHP获得本周、本月、上周、上月起始时间戳
- 23种设计模式全解析
- <学习html>第八天笔记-HTML5文档类型和字符集、HTML5新标签与特性(常用新标签、新增input type属性值、常用新属性、多媒体标签)
- jmeter应用---测试元件介绍(三)
- 用go的goroutine和channel实现一个简单的“生产、消费”(带有超时控制)小例子
- Java程序员们最常犯的10个错误
- ceph (luminous 版) journal disk 故障测试
- 正则表达式常用对象方法整理
- Linux中进程间通信——共享内存
- Android Studio 启动项目报错 Warning:Uninstalling will remove the application data!
- main函数一定要有返回值吗?
- linux rsync 使用说明