Jmeter 测试脚本录制器-HTTP 代理服务器

3 篇文章 0 订阅
2 篇文章 0 订阅

使用Jmeter 代理服务器可以录制测试脚本,只需要在浏览器中访问相关的页面,配置相关的过滤规则,即可获取对应的接口请求地址、入参,非常方便。

Jmeter 配置代理服务器

代理服务器获取请求地址示例图

在这里插入图片描述
Jmeter配置代理服务器之后,所有的请求都会经过Jmeter,这样就能录制相关的请求地址、参数。

配置步骤

  1. 添加代理服务器
    测试计划 -> 添加 -> 非测试元件 -> HTTP 代理服务器
    在这里插入图片描述
    配置端口 7000
    在这里插入图片描述

  2. 添加线程组,用来存放录制的请求地址
    测试计划 -> 添加 -> 线程(用户)-> 线程组
    在这里插入图片描述

  3. 代理服务器绑定对应的线程组
    在代理服务器对应的配置栏 Test plan content 选择第2步配置的线程组
    在这里插入图片描述

浏览器配置代理

本地需要配置代理,是相关的请求都经过Jmeter服务器。配置代理的方式有多种,这里列举2种:

  1. 浏览器插件配置
  2. windows网络设置配置

Google 浏览器插件配置代理

安装 FoxyProxy, 如果无法在线安装,可以使用离线安装包,地址
链接: https://pan.baidu.com/s/1NIe2pTISyzTX_0qJHJ8qew?pwd=96c2
提取码: 96c2

安装好插件之后,配置FoxyProxy
在这里插入图片描述
选择 Options
在这里插入图片描述
选择对应的选项
在这里插入图片描述
Edit Selection
在这里插入图片描述
注意,代理的端口地址需要和Jmeter代理服务器的一致,不然不会经过Jmeter代理服务器,录制不了脚本

windows 本地网络配置代理

在网络设置这里配置代理
在这里插入图片描述

启动录制,生成证书

生成证书

代理服务器哪里点击启动,就会弹出生成证书的提示
在这里插入图片描述
证书的路径在Jmeter 的安装目录的 bin 文件夹下生成,如图,
ApacheJMeterTemporaryRootCA.crt 文件
在这里插入图片描述

导入证书

Google浏览器安装证书, 隐私和安全,管理证书
在这里插入图片描述
在这里插入图片描述
导入证书
在这里插入图片描述

Jmeter 配置证书

在这里插入图片描述

选项 -> SSL管理器
在这里插入图片描述
选择对应的证书 ApacheJMeterTemporaryRootCA.crt,点击Open

浏览器点击页面,录制请求地址

可以看到对用的请求地址都记录下来了
在这里插入图片描述

过滤配置源码解析

过滤配置分为包含模式、排除模式
在这里插入图片描述
匹配的源码如下:
org.apache.jmeter.protocol.http.proxy.ProxyControl#filterUrl

boolean filterUrl(HTTPSamplerBase sampler) {
        String domain = sampler.getDomain();
        if (domain == null || domain.isEmpty()) {
            return false;
        }

        String url = generateMatchUrl(sampler);
        CollectionProperty includePatterns = getIncludePatterns();
        if (!includePatterns.isEmpty() && !matchesPatterns(url, includePatterns)) {
            return false;
        }

        CollectionProperty excludePatterns = getExcludePatterns();
        if (!excludePatterns.isEmpty() && matchesPatterns(url, excludePatterns)) {
            return false;
        }

        return true;
    }

    private static String generateMatchUrl(HTTPSamplerBase sampler) {
        StringBuilder buf = new StringBuilder(sampler.getDomain());
        buf.append(':'); // $NON-NLS-1$
        buf.append(sampler.getPort());
        buf.append(sampler.getPath());
        if (!sampler.getQueryString().isEmpty()) {
            buf.append('?'); // $NON-NLS-1$
            buf.append(sampler.getQueryString());
        }
        return buf.toString();
    }

    private static boolean matchesPatterns(String url, CollectionProperty patterns) {
        if (USE_JAVA_REGEX) {
            return matchesPatternsWithJavaRegex(url, patterns);
        }
        return matchesPatternsWithOroRegex(url, patterns);
    }

返回 true 的地址就会记录下来。默认使用的是正则表达式匹配的。整理出如下的测试方法,验证请求的URL 是否匹配成功

import org.junit.jupiter.api.Test;

import java.util.regex.Pattern;

public class JmeterProxyTest {

    @Test
    public void testInclude() {
        String[] regexArr = {"dev.scd.com.cn.*"};
        for (String regex : regexArr) {
            Pattern pattern = Pattern.compile(regex);
            String[] testUrls = new String[]{
                    "dev.scd.com.cn:8082/system/sysDept/tree",
                    "hm.baidu.com"
            };
            for (String url : testUrls) {
                if (pattern.matcher(url).matches()) {
                    System.out.println("regex " + regex + " match url " + url);
                }
            }
        }
    }

    @Test
    public void testExclude() {
        String[] regexArr = {".*(.html|.js|.css|.png|.gif|.jpg|.ico|.woff).*", "dev.scd.com.cn:(\\d+)/endpointChat.*"};
        for (String regex : regexArr) {
            Pattern pattern = Pattern.compile(regex);
            String[] testUrls = new String[]{
                    "localhost:8082/css/bootstrap.min.css?v=3.3.6",
                    "hm.baidu.com/hm.gif?cc=1&ck=1&cl=24-bit&ds=1536x864&vl=382&et=0&ja=0&ln=zh-cn&lo=0&lt=1705326161&rnd=1568321180&si=8b02a318fde5831da10426656a43d03c&v=1.3.0&lv=2&sn=39926&r=0&ww=1536&u=https%3A%2F%2Fwww.macrozheng.com%2Fadmin%2Findex.html%23%2Foms%2Forder&tt=mall-admin-web",
                    "dev.scd.com.cn:9999/endpointChat/056/6cjc73m5/xhr"
            };
            for (String url : testUrls) {
                if (pattern.matcher(url).matches()) {
                    System.out.println("regex " + regex + " match url " + url);
                }
            }
        }
    }
}
  • 18
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chengdu.S

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值