jmeter应用---测试元件介绍(三)

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看看长啥样

java_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请求

demo

5、剩下的就是配置运行了~

配置线程组、配置参数化、配置负载机…… action!

BeanShell Sampler

beanshell是一个轻量级的脚本语言,具体教程可以参考 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());

这里写图片描述

这里写图片描述

这里写图片描述

复杂一点的例子,浏览器例子

simple web browse

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值