shipin_beanshell_讲解

beanshell 小工具—可以在里面练习

还可以配置到classpath里然后敲命令java bsh.Interpreter   在cmd里操作

Beanshell

请求beanshell请求

① 勾选每次调用前重置,里面定义的变量就会被重置。

② 脚本文件可以导入beanshell脚本

注意:在idea写错误有提示写完了在拷贝到beanshell里运行

脚本—运行结果在cmd里显示—print

 

jmeter日志里显示—log.info(变量名);

 

Jmeter添加变量—beanshell添加变量后面请求用${变量}

启动jartest-json-1.0-SNAPSHOT-fan  cmd执行命令切换到jar的目录,然后执行命令

java  -jar  test-json-1.0-SNAPSHOT-fan.jar

启动后输入网址:http://localhost:8090/test_json

 

下面举例写展示当前日期:开发给个接口需要传递当前时间格式为yyyy-MM-dd HH:mm:ss

Beanshell写代码

import java.util.*;

import java.text.*;

Date d = new Date();

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String dateStr = df.format(d);

vars.put("current_date",dateStr);  //jmeter添加一个变量,内置变量

查看结果:

添加一个请求(上面启动的jar包)—查看结果

 

 

添加变量后跨请求取值 —Date传值成功

jmeter两种变量

1、函数助手

2、变相的自定义函数

第一种:

import java.util.*;
import java.text.*;

getDateStr(String format)
{
DateFormat df = new SimpleDateFormat(format);
return df.format(new Date());
}
dateStr = getDateStr("yyyy-MM-dd");
vars.put("date",dateStr);

第二种:

import java.util.*;
import java.text.*;

Date d = new Date();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = df.format(d);

vars.put("current_date",dateStr); //给jmeter添加一个变量,内置变量

在Debug Sampler里查看结果

 jmeter引用java文件,记事本编辑一段java代码  ,要在控制面板文件夹选项—查看—把隐藏已知文件扩展名得选项勾选,然后就可以改txt文件为java文件了

 

source("C:\\Users\\Administrator\\Desktop\\Test.java");  //引进java文件只能引用java文件不能引用jar包

 beanshell代码

source("C://Users//Administrator//Desktop//Test.java");

Test test = new Test();
String str = test.hello("jiajia");

vars.put("hi",str)

 结果:

 

 Jmeter-导入外部jar包

步骤为:
·在eclipse写好代码,然后把该类打成jar包(在类上点击右键-
>Export->jar file)
·把jar包放到jmeter目录\apache-jmeter-2.13\lib\ext下
·打开jmeter,添加一个http sampler,在sampler下添加一个
BeanShell Sampler。
·在BeanShell中的头文件中导入该jar包,例
import testmail.src.hyq.utils.*

Jmeter-常用内置变量

1、log:写入信息到jmeber.log文件,使用方法:log.info(“This is log info!”);

打印日志

2、ctx(JMeterContext):该变量引用了当前线程的上下文。

3、vars(JMeterVariables) :操作jmeter变量,常用方法:

a) vars.get(String key):从jmeter中获得变量值
b) vars.put(String key,String value):数据存到jmeter变量中

vars.get()--从上一个http请求里正则提取器变量,用这个方法在获取到_定义个全局变量,下面引用他

 props - (JMeterProperties):解决两个线程组传递参数

开发返回接口json方式—如何写断言、和提取值

http://www.bejson.com/jsoneditoronline/  在线json格式工具  把下面内容拷贝进去

{"result":{"birthday":{"month":"12","year":"1654","day":"20"},"side":"front","address":"北京市东城区景山前街4号紫禁城敬事房","race":"汉","gender":"男","legality":{"Temporary ID Photo":0,"Screen":0,"Edited":0.991,"Photocopy":0,"ID Photo":0.009},"head_rect":{"rb":{"x":0.93333334,"y":0.7379679},"rt":{"x":0.93333334,"y":0.16042781},"lb":{"x":0.62,"y":0.7379679},"lt":{"x":0.62,"y":0.15508021}},"name":"韦小宝","id_card_number":"11204116541220243*","request_id":"1504184189,7d75096e-f9bb-49ee-83e2-f4070ca7e14c","time_used":425},"bizNo":"123456","serviceCode":"000082"}

提取json $.result.name[0]第一个值json $.result.name[1]第二个值  在上面获取值。

练习:

查看结果树里的形式—在这里也可以测试提取

 

添加JSON Extractor—json提取值方式写JsonPath

取值后传递给下一个线程组

1、先改一下属性,改成True

2、写脚本赋值

3、查看结果

添加一个Beanshell前置处理器用props获取值

 

可能存在的问题:多线程时取当前系统日期,日期不一致。测试计划设置独立运行每个线程组、时间就一一致了。

 5、prev - (SampleResult):获取前面的sample返回的信息,常用方法:

a) getResponseDataAsString():获取响应信息
b) getResponseCode() :获取响应code
c) setDataEncoding(String dataEncoding) :设置响应结果的编码

prev.setDataEncoding("utf-8") ;

http请求后面添加Beanshell后置处理器—解决乱码问题

BeanShell PreProcessor—一般是用户请求要用到这个参数,用前置处理器,处理好了传递参数,提前处理请求参数,如:图片处理,加密解密
举例子

1、http://www.vgot.net/test/image2base64.php?

2、图片和jar包:axis-1.4.jar放到jmeter安装目录里lib下ext文夹里,导入jar包后一定要重新启动。

beanshell前置处理器

import util.*;
import org.apache.axis.encoding.Base64;
import org.apache.commons.io.IOUtils;

InputStream input = new FileInputStream("E:\\image-0082.jpg");
ByteArrayOutputStream output = new ByteArrayOutputStream();
IOUtils.copy(input, output);
byte[] array = output.toByteArray();
String post_image = Base64.encode(array);
vars.put("image",post_image);

 

查看运行结果—把运行结果进行解析出来的就是image-0082.jpg图片本次主要就是验证图片

把get请求里面的内容复制了,放到解析网站进行解码。

 BeanShell PostProcessor —对http的结果进行处理

举例子:

网址  http://localhost:8090/test_gzip,

网站乱码—解决乱码问题

 

 

后置处理器—把解压缩的文件进行处理—解压缩zip的代码

import java.io.*;
import java.util.zip.*;

//获取上一个结果
byte[] bytes = prev.getResponseData();
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
try {
GZIPInputStream ungzip = new GZIPInputStream(in);
byte[] buffer = new byte[256];
int n;
while ((n = ungzip.read(buffer)) >= 0) {
out.write(buffer, 0, n);
}
gzip_str = out.toString("utf-8");
log.info("result-ungzip:"+gzip_str);
} catch (Exception e) {
e.printStackTrace();
log.info(e.getMessage());
}

运行后的结果—日志里出现result就可以了

加检查点、加断言

添加断言—根据变量查找结果

动态验证点—beanshell断言

BeanShell断言_写好请求后运行—在查看结果树里选择JSON Path Tester里面查找$.result.time_used的值

在JSON Extractor 里面提取值

添加个debug sampler 验证是否正确

 

beanshell断言  如果接口返回<500的算成功

添加beanshell断言

int time = Integer.parseInt(vars.get("time"));
log.info("time:>>>"+time);
if(time>1000) {
Failure = true;
FailureMessage = "验证失败,time:"+time;
}else{
FailureMessage = "验证成功";
}

运行查看结果

如果开发说想知道错误率是多少如何操作

添加一个聚合报告—查看错误率

 

转载于:https://www.cnblogs.com/njq666/p/10893374.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值