一、JMeter 内置函数
以两个下划线开头。
函数区分大小写。
${__char(ascii1,ascii2,...)}
返回指定ascii 的字符
${__machineIP(存入变量名)}
返回本机IP
若省略变量名,则直接输出IP
${__threadNum}
返回当前线程号
函数后的括号可以省略
${__time(格式,存入变量)}
直接使用返回1970/1/1 至今的秒数
获取日期时间,Y 年,MM 月,dd 日,hh,mm,ss
格式不必加引号
${__UUID}
生成一个唯一的字符串
${__Random(初值,终值,存入变量名)}
生成随机数
${__RandomString(length,seed,variable)}
用于生成随机字符串。
length
指定字符串长度。
seed
字符串种子(基于这些字符自由组合成将来的字符串)。
variable
生成的字符串存入此变量。
二、Jmeter 访问MySQL 数据库
加载数据库驱动包
点击测试计划-->点击中间底部"浏览"-->选中mysql 驱动jar 包-->打开
配置数据库连接参数
配置元件→JDBC Connection Configuration
通常加到线程组前面
Variable Name
输入数据库连接名
Validation Query
Select 1
表示检查select 语法
Database URL
jdbc:mysql://localhost:3306/数据库名
JDBC Driver class
com.mysql.jdbc.Driver
不同数据库的URL 和驱动程序不同。
添加JDBC Request
Variable Name
即前面的数据库连接名
Query Type
select 用于查询,update 用于插入和更新(含删除)
其它设置保持默认
Prepared(预编译查询)
在sql 语句中使用“?”代替实际数据,将来使用参数数据替换“?”
Parameter values
参数值,多个用逗号间隔,将来替换sql 语句中的“?”
Parameter types
参数的类型
必填,且与参数值个数要一致
Variables names
省略时,与表中列名相同
后续若要使用参数名,则不能省略,以后可以使用${变量名_1}、${变量名_2}
等访问,数字表示行号,不需要记录集的名字
Result variable name
结果集的名字
访问:vars.getObject("rs").get(0).get("uname")
rs 表示记录集名称
0 表示第1 行
uname 表示列名
三、测试Java 程序
1 编译软件
Jmeter 没有自带编译器,需要借助第三方编译器才能实现。
Eclipse 导入包
apache-jmeter-3.0lib
avalon-framework-4.1.4.jar
jorphan.jar
logkit-2.0.jar
apache-jmeter-3.0libext
ApacheJMeter_core.jar
ApacheJMeter_java.jar
以上包需要全部导入
2 被测程序
public class Add{
public int sum(int a,int b)
{
return a+b; r
}
public static void main(String args[]){
Add math = new Add();
System.out.println(math.sum(1, 2));
}
}
3 测试程序
public class JavaTest extends AbstractJavaSamplerClient {
private Add test=null;
private String a;
private String b;
private String result;
//定义参数
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("num1", "");//参数num1,初值为空,jmeter 可更改此值
params.addArgument("num2", "");
return params;
}
//每个线程测试前执行一次,做一些初始化工作,取参数值
public void setupTest(JavaSamplerContext arg0) {
test = new Add();
a = arg0.getParameter("num1");//获取参数值
b = arg0.getParameter("num2");
}
//开始测试,从arg0 参数可以获得参数值
public SampleResult runTest(JavaSamplerContext arg0) {
SampleResult sr = new SampleResult();//取样器
sr.setSamplerData("请求参数num1:"+a+"
请求参数num2:"+b);//发送请求
try {
sr.sampleStart();//类似于事务,开始统计响应时间
result = String.valueOf(test.sum(Integer.parseInt(a), Integer.parseInt(b)));
if (result != null && result.length() > 0) {
//下面的操作将响应数据输出到Jmeter 的察看结果树中
sr.setResponseData("结果是:"+result, "utf-8");
sr.setDataType(SampleResult.TEXT);
sr.setResponseCode("200");
sr.setResponseOK();
}
sr.setSuccessful(true);
} catch (Throwable e) {
sr.setSuccessful(false);
e.printStackTrace();
} finally {
sr.sampleEnd(); //结束统计响应时间标记
}
return sr;
}
//测试结束时调用,只执行一次
//public void teardownTest(JavaSamplerContext arg0) {
//}
//必须加入下面的main 方法编译,导出代码时,必须禁用main
public static void main(String[] args) {
Arguments pms = new Arguments();
pms.addArgument("num1", "1");//设置参数,赋值1
pms.addArgument("num2", "2");//设置参数,赋值2
JavaSamplerContext arg0 = new JavaSamplerContext(pms);
JavaTest test = new JavaTest();
test.setupTest(arg0);
test.runTest(arg0);
test.teardownTest(arg0);
}
}
4 导出包
在测试程序中加入main 方法,然后运行正确,否则不能导出包。
务必禁用测试程序中的main 方法,然后保存代码。
右击项目→导出→Java→可运行的JAR 文件(导出时要关JMeter)
启动配置
选择测试的类名
导出目标
必须放在apache-jmeter-3.0libext 目录中,名字可与类名不同
忽略错误
找不到main 方法
Jmeter 操作
导入包
测试计划→Add directory or jar to classpath 处:浏览
添加线程组
添加Java 请求
在类名称中选择上面导出的包
为参数赋值
添加查看结果树并运行
四、测试BeanShell 请求
添加BeanShell Sampler
public static String test(){
vars.put("username","zhsan"); //保存参数
vars.put("password","123456");
return "success";
}
test(); //必须调用函数
添加Debug Sampler
可以尾部添加${usernameusername} 查看到变量
在Debug Sampler 的响应数据中可以看到BeanShell 中的变量名与值
添加结果树看结果