Jmeter 测试脚本录制器-HTTP 代理服务器
- Jmeter 配置代理服务器
- 代理服务器获取请求地址示例图
- 配置步骤
- 浏览器配置代理
- Google 浏览器插件配置代理
- windows 本地网络配置代理
- 启动录制,生成证书
- 生成证书
- 导入证书
- Jmeter 配置证书
- 浏览器点击页面,录制请求地址
- 过滤配置源码解析
使用Jmeter 代理服务器可以录制测试脚本,只需要在浏览器中访问相关的页面,配置相关的过滤规则,即可获取对应的接口请求地址、入参,非常方便。
Jmeter 配置代理服务器
代理服务器获取请求地址示例图
Jmeter配置代理服务器之后,所有的请求都会经过Jmeter,这样就能录制相关的请求地址、参数。
配置步骤
-
添加代理服务器
测试计划 -> 添加 -> 非测试元件 -> HTTP 代理服务器
配置端口 7000
-
添加线程组,用来存放录制的请求地址
测试计划 -> 添加 -> 线程(用户)-> 线程组
-
代理服务器绑定对应的线程组
在代理服务器对应的配置栏 Test plan content 选择第2步配置的线程组
浏览器配置代理
本地需要配置代理,是相关的请求都经过Jmeter服务器。配置代理的方式有多种,这里列举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 {@Testpublic void testInclude() {String regex = "admin-api\\.macrozheng\\.com.*";Pattern pattern = Pattern.compile(regex);String[] testUrls = new String[]{"admin-api.macrozheng.com/order/list?pageNum=1&pageSize=10","https://hm.baidu.com"};for (String url : testUrls) {if (pattern.matcher(url).matches()) {System.out.println("matche url " + url);}}}@Testpublic void testExclude() {String regex = ".*(.html|.js|.css|.png|.gif).*";Pattern pattern = Pattern.compile(regex);String[] testUrls = new String[]{"https://www.googletagmanager.com/gtag/js?id=G-73YJPXJTLX","https://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<=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"};for (String url : testUrls) {if (pattern.matcher(url).matches()) {System.out.println("matche url " + url);}}}
}