接口测试 Jmeter 录制断言改造

fusu · 2022年09月29日 · 最后由 fusu 回复于 2022年09月29日 · 6727 次阅读

背景

  • 通过 Jmeter 录制前端接口时会出现很多重复接口,需要人工删除,维护成本较高
  • 原生 Jmeter JSON 断言支持等于、正则表达式、判空、反向断言功能,不支持其他关系运算符 (大于、大于等于、小于、小于等于、包含)

开源地址

https://gitee.com/fusu-qa/jmeter
https://github.com/fusu-qa/jmeter

新增功能

  • HTTP 代理服务器录制支持去重:根据 method、url、parameter 去重
  • json 断言支持大于、大于等于、小于、小于等于,仅支持整数,小数
  • json 断言支持包含,仅支持字符串

以下操作均在 Macos 操作系统

HTTP 代理服务器去重逻辑,代码改动

NewDriver.java

使这个条件不生效,OS_NAME_LC.startsWith("mac os x")

ProxyControl.java

存放一次录制中所有请求的基本信息

private List simpleHttpRequests = new ArrayList<>();

一次录制中,根据 method、url、parameter 去重

try {
SimpleHttpRequest simpleHttpRequest = new SimpleHttpRequest(sampler.getMethod(), sampler.getUrl().toString(), sampler.getArguments().toString());
if (!simpleHttpRequests.contains(simpleHttpRequest)) {
simpleHttpRequests.add(simpleHttpRequest);
sampleQueue.add(new SamplerInfo(sampler, testElements, myTarget, getPrefixHTTPSampleName(), groupingMode));
}
} catch (MalformedURLException e) {
e.printStackTrace();
}

清空集合

simpleHttpRequests.clear();

安装 chrome 浏览器插件:SwitchyOmega

指定录制域名使用代理:localhost:8888

IDEA 启动

双击 createDist

配置-Djmeter.home 为项目根目录

右键启动

NewDriver.main()

二进制启动

sh bin/jmeter.sh

打包

tar -czf jmeter-bin.tar.gz bin lib

开始录制

同一个接口请求多次

1、改造后的 jmeter 只录制一份

2、原生 jmeter 录制多份

http 录制样本

jmeter/blob/master/HTTP 代理服务器.jmx

HTTP 代理服务器调用栈:

共收到 2 条回复 时间 点赞

jmeter 录屏最大的问题是使用的浏览器的内核是 IE,不能手动修改浏览器内核,各种方法不支持,以至于无法录屏

fusu #2 · 2022年09月29日 Author

你用的是 badboy 吧?这里录制使用的是非测试元件-HTTP 代理服务器,不依赖特定浏览器,只要请求走到这个代理都能录制下来,文中只是以 Chrome 为例来说明整个录制过程。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册