性能测试十二:jmeter进阶之java请求参数化

it2022-05-09  18

如项目中的ip、端口号之类的,都可以在此代码中定义

 

public Arguments getDefaultParameters() {// TODO Auto-generated method stubreturn null;}

此处注册两个参数到jmeter的变量池:

p_name,默认值设为abc

p_desc,默认值设为123

/*** 此函数里面可以人工注册一些参数,这些参数可以在java请求面板里展示或更改*/@Overridepublic Arguments getDefaultParameters() {Arguments arguments = new Arguments();arguments.addArgument("p_name", "abc");arguments.addArgument("p_desc", "123");

return arguments;}

由于改变了代码 ,需重新导出jar包,并在jmeter目录下替换原来的jar包

 

 

 重启jmeter

 

这样就可以在代码里面引用到参数了

当然,只要注册了过后,做什么参数都行

 

 

在代码中使用:

@Overridepublic SampleResult runTest(JavaSamplerContext arg0) {SampleResult result = new SampleResult();// 给事务起个名称result.setSampleLabel("insert");// 事务开始result.sampleStart();// 执行sql之前,先进行参数化try {String p_name = arg0.getParameter("p_name");String p_desc = arg0.getParameter("p_desc");statement.setString(1, p_name);statement.setString(2, p_desc);int rows = statement.executeUpdate();if (rows > 0){// 事务成功result.setSuccessful(true);}else{// 事务失败result.setSuccessful(false);}

} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}// 事务结束result.sampleEnd();return result;}

 

public static void main(String[] args) {MyJmeterTest test = new MyJmeterTest();// 创建一个JavaSamplerContext对象,该对象创建的时候需要传入一个Arguments对象JavaSamplerContext context = new JavaSamplerContext(test.getDefaultParameters());test.setupTest(context);test.runTest(context);test.teardownTest(context);}

此时需再次导出、替换、重启jmeter就可以运行了

 

 

jmeter java脚本调试最终版:

package cn.test.jmeter;

import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.SQLException;

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 MyJmeterTest implements JavaSamplerClient {// 全局变量PreparedStatement statement;Connection conn;/*** 此函数里面可以人工注册一些参数,这些参数可以在java请求面板里展示或更改*/@Overridepublic Arguments getDefaultParameters() {Arguments arguments = new Arguments();arguments.addArgument("p_name", "abc");arguments.addArgument("p_desc", "123");

return arguments;}

/*** 初始化的操作写在setup方法里,类似于LR里的init*/@Overridepublic void setupTest(JavaSamplerContext arg0) {// 注册驱动,告诉Java接下来要链接哪个数据库try {Class.forName("com.mysql.jdbc.Driver");// 建立mysql数据库链接conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/oa", "root", "123456");// 把sql进行编译statement = conn.prepareStatement("insert into itcast_role (name, description) values (?,?)");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** 真正多次操作的业务,放在runtest方法里,类似于LR里的action*/@Overridepublic SampleResult runTest(JavaSamplerContext arg0) {SampleResult result = new SampleResult();// 给事务起个名称result.setSampleLabel("insert");// 事务开始result.sampleStart();// 执行sql之前,先进行参数化try {String p_name = arg0.getParameter("p_name");String p_desc = arg0.getParameter("p_desc");statement.setString(1, p_name);statement.setString(2, p_desc);int rows = statement.executeUpdate();if (rows > 0){// 事务成功result.setSuccessful(true);}else{// 事务失败result.setSuccessful(false);}

} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}// 事务结束result.sampleEnd();return result;}

/*** 结束的操作放在teardown里,类似于LR里的end*/@Overridepublic void teardownTest(JavaSamplerContext arg0) {// 关闭链接try {conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}

}

public static void main(String[] args) {MyJmeterTest test = new MyJmeterTest();// 创建一个JavaSamplerContext对象,该对象创建的时候需要传入一个Arguments对象JavaSamplerContext context = new JavaSamplerContext(test.getDefaultParameters());test.setupTest(context);test.runTest(context);test.teardownTest(context);}

}

转载于:https://www.cnblogs.com/malinalian/p/10582989.html

相关资源:《jmeter:菜鸟入门到进阶系列》

最新回复(0)