Jmeter

Jmeter踩坑指北。
Jmeter中使用javaScript截取所需字符串并直接引用在变量中
Jmeter

Jmeter中使用javaScript截取所需字符串并直接引用在变量中

1.说明 我的使用场景是,使用正则表达式获取了一串字符串(自定义变量名为session) 拿到的session如下: SESSION=c9d7e012-dd99-40da-88a2-c9d62ef3d987 但实际使用中只需要SESSION的值 c9d7e012-dd99-40da-88a2-c9d62ef3d987 所以需要截取,截取的方法很多,这里给出使用javaScript的方案,也是相对省事儿的方案(Jmeter以及基于Jmeter的自动化测试平台比如metersphere都直接支持JavaScript,可以直接填在变量里) 2.实现 方法 __javaScript:javaScript函数执行一段JavaScript代码并返回其值 __substring:取字符串中的字串 举个例子: //截取从位置为8开始到最后的字符串(注意字符串起点位置是0,不是1 !!!) ${__javaScript("${session}".substring(8),)} //截取从位置为0开始,不包含8的字符串 ${__javaScr
1 min read
WebKitFormBoundary导致Jmeter Post表单后端收不到数据,原因分析
Jmeter

WebKitFormBoundary导致Jmeter Post表单后端收不到数据,原因分析

现象 使用Jmeter模拟浏览器构造Post请求时,在header中有如下字段 content-type: multipart/form-data; boundary=----WebKitFormBoundary6UAvXfMl62j1mySR 如果照着浏览器的header复制粘贴进jmeter的http请求头管理器中,会导致后端接受不到请求数据。 解决 解决很简单,去掉这行content-type这一行即可 原因 原因要追溯到 RFC1867协议 HTTP file upload这一部分。 1. 在1995年,ietf 发布了 rfc1867,也就是《RFC 1867 -Form-based File Upload in HTML》,用以支持文件上传。Content-Type 的类型扩充了multipart/form-data 用以支持向服务器发送二进制或者非ASCALL(no-ascll)数据。 2. multipart/form-data重要规范特征: * 必须post方式发送数据; * Content-Type格式为multip
2 min read
Jmeter用XPath提取器获取html页面元素的值
Jmeter

Jmeter用XPath提取器获取html页面元素的值

本文参考: https://blog.csdn.net/caohongxing/article/details/83010401 1. XPath是什么 XPath全名XML Path Language,是W3C的一个标准。XPath是一种表达式语言,它使用路径表达式来选取 XML 文档中的节点或节点集。 而Jmeter中XPath提取器的作用就是从xml、html文档中是提取符合路径表达式条件的节点信息。 2. 在请求上右键添加XPath提取器 提取器配置的各个字段的意义如下图标注所示: 3. XPath路径的获取方式 在想要抓取的页面上F12,在元素标签中找到想拿取的值。右键复制,如下图所示:
1 min read
Jmeter用beanshell脚本将数据写入txt文件
Jmeter

Jmeter用beanshell脚本将数据写入txt文件

直接上代码 直接看注释 //定义文件路径和名称 注意斜杠方向 String fileAddr = "D://projects/study/results3.txt"; //注意初始化方法的第二个参数 true,设置为true不会每次都重新创建,而是从文件末尾继续编辑 FileWriter writer = new FileWriter(fileAddr,true); //写入要写的东西,我这里相当于每行用逗号分隔了四个字段然后换行 writer.write(ori+","); writer.write(result+","); writer.write(status+","); writer.write(ans); writer.write("\r\n"); //最后关闭 writer.close();
1 min read
Jmeter 使用自带V函数进行带变量的字符串参数拼接
自动化测试

Jmeter 使用自带V函数进行带变量的字符串参数拼接

需求 JWT标准中请求头中需要加上authorization参数,该参数是由固定字符串和从上个接口返回的token字段一起拼接而成 如下文所示: authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxODUxNjAxNzc0NCIsImNsaWVudFR5cGUiOiIxMCIsImN1c3RJZCI6IjIxMzM4NjciLCJpc3888888889kLWJ1c2kteGR0LWNzdC13ZWIiLCJleHAiOjE2NTcxODA2NDAsImlhdCI6MTY1NzE4MDQ2MH0.ZoACgiB43RMqZLJ4hcEmskae1w8-Wnjrf-bqUYvIAfY 所以在接口自动化脚本编写时,要进行字符串的拼接 步骤: 1. 打开jmeter上的函数助手,选择—V功能,按下图步骤输入想拼接的字段组合,点击生成: 2. 粘贴到使用该函数结果的位置,如无其他参数,要去掉最后面的逗号,最
1 min read
Jmeter

Jmeter解决返回值中文乱码

本文参考:https://www.cnblogs.com/rslai/p/11661003.html 对于返回中文乱码又分两种: 1. 返回UTF-8中文字符 2. 返回unicode编码信息 1. 返回UTF-8乱码的情况 如下图返回的就是utf-8的中文字符显示一堆花码。 解决方案1(推荐) 1. 添加BeanShell PostProcessor 2. 加入如下代码 prev.setDataEncoding("utf-8") 3. 重新请求,结果如下图所示 解决方案2(不推荐) 另外一个解决方法,修改 jmeter.properties 配置文件 1. 打开 jmeter.properties 配置文件 vi jmeter.properties 2. 找到 sampleresult.default.encoding,
3 min read
Jmeter 使用Beanshell PostProcessor处理json返回值
自动化测试

Jmeter 使用Beanshell PostProcessor处理json返回值

摘要 工作中遇到接口的返回值需要经过解密之后才能看到真正的value,这就给接口自动化带来了不少麻烦。而使用Jmeter中的Beanshell postprocessor(Beanshell后置处理器),可以通过调用内部函数与对象,获取请求返回值,并再次加工。 引入合适的包 这里我使用alibaba的fastjson包,引用之前需要将对应的jar包放在 D:\apache-jmeter-5.3\lib\ext 目录下,如下图所示: 放好文件后,跟普通java文件一样import引入即可。 上代码 import com.alibaba.fastjson.JSONObject; //1.获取请求返回值,prev是Jmeter内置的对象,可以直接拿到返回值 String response = prev.getResponseDataAsString(); //2.将拿到的str转json JSONObject obj = JSONObject.parseObject(response); JSONObject data = (JSONObject) obj.get("data")
1 min read
Jmeter使用过程中的坑之Beanshell Map问题
自动化测试

Jmeter使用过程中的坑之Beanshell Map问题

报错信息 如下所示: > ERROR o.a.j.u.BeanShellInterpreter: Error invoking bsh method: eval In file: inline evaluation of: ``import java.util.*; import cn.…………DataserverTool; String . . . '' Encountered "," at line 13, column 19. 搜索之后发现知乎上有个老哥的帖子有一模一样的问题 https://zhuanlan.zhihu.com/p/62500075 出问题的代码 如下所示: Map argsMap = new HashMap(); 最终才知道原因是beanshell
1 min read
Jmeter 使用Beanshell PreProcessor在请求前处理sampler请求参数
自动化测试

Jmeter 使用Beanshell PreProcessor在请求前处理sampler请求参数

1. 话不多说先上代码 //引入Argument相关的包 import org.apache.jmeter.config.Argument; import org.apache.jmeter.config.Arguments; //从sampler中获取参数 Arguments args = sampler.getArguments(); //将参数转化为Map方便使用,需要注意的是Jmeter中的Map不能有类型,否则会报错 Map argsMap = args.getArgumentsAsMap(); //从Map中获取想取得值 String xxx = argsMap.get("xxx"); //省略对值进行加密处理的代码 //增加参数 args.addArgument("sign",sign); args.addArgument("tm",tm); args.addArgument("nonceStr",newNonceStr); 2. 官方Javadoc文档 先把链接放在这里:
2 min read
Jmeter5.3字体大小修改(高分辨率设置)
自动化测试

Jmeter5.3字体大小修改(高分辨率设置)

摘要 jmeter的高版本已经支持高分屏了,但是默认情况下参数是没有启动高分屏支持的,存在在高分屏上UI太小的问题。下面介绍HiDPI的配置方法。 修改配置 打开: D:\apache-jmeter-5.3\bin\jmeter.properties (即jmeter压缩包中的bin目录中) 编辑以下几个字段(建议逐条搜索字段然后去掉注释并编辑对应的值,jmeter.properties中备注有每个字段的解释,可以自己读一下),编辑后保存,重新打开jmeter即生效。 jmeter.hidpi.mode=true jmeter.hidpi.scale.factor=2.0 jmeter.toolbar.icons.size=48×48 jmeter.tree.icons.size=48×48 jsyntaxtextarea.font.family=Hack jsyntaxtextarea.font.size=
1 min read
Jmeter性能测试-如何精准控制每秒请求数之jp@gc - Throughput Shaping Timer的使用
自动化测试

Jmeter性能测试-如何精准控制每秒请求数之jp@gc - Throughput Shaping Timer的使用

本文参考了:https://www.cnblogs.com/yagao/p/12614175.html Throughput Shaping Timer 是用来控制吞吐量的定时器,通过延缓线程运行来整体控制取样器产生的RPS。 实际使用中: 1. 可以通过设置在不同吞吐量分别持续一段时间,考察系统在不同吞吐量情况下的稳定性 2. 可以通过设置随着时间持续增加的吞吐量,来探测系统吞吐量的的极限 举个例子: 1. 首先,创建一个线程组,这里我把线程数暂且设置为200,循环勾选为永远。在文章末尾解释为什么这样设置 2. 在线程组内增加一个HTTP请求,这里以百度举个例子 3. 加入Throughput Shaping Timer 定时器,设置起始终止RPS和持续时间,这里我采用了持续增加的方式。 4. 加入一个TPS监听器并执行测试看看效果,如下图所示: 随着时间的增加RPS逐步提升,实际的TPS也随之线性增长,说明目前还没有
3 min read