ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

k6 浏览器模块怎么给测试上下文配置代理(newContext 的 proxy 选项)?

k6 浏览器模块怎么给测试上下文配置代理(newContext 的 proxy 选项)? k6 浏览器模块怎么给测试上下文配置代理newContext 的 proxy 选项?【免费下载链接】k6A modern load testing tool, using Go and JavaScript项目地址: https://gitcode.com/GitHub_Trending/k6/k6在 k6 的浏览器脚本里如果你希望某个页面上下文的流量走代理从 k6v2.1.0开始可以直接在browser.newContext()上传入上下文级的proxy选项让该上下文的流量经过你指定的代理服务器。在此之前文档说明过环境代理变量只影响 k6 的 DevTools WebSocket 连接并不会路由页面流量需要启动自定义编译的二进制才能做到。现在不需要这些绕路的方式了。本文以v2.1.0的 release notes 与仓库内实现、测试为准给出配置写法、运行方式和验证方法。proxy 选项的两个字段proxy是一个对象定义见 browser_context_options.go 中的ProxyOptions结构server必填代理服务器地址。实现里的Validate()会检查proxy.server不能为空为空会直接报错也就是说缺失server的配置在创建上下文阶段就会失败而不是等到请求时才发现。bypass可选绕过代理的地址。release notes 给出的示例值是localhost,127.0.0.1。const context await browser.newContext({ proxy: { server: http://proxy.test:8080, bypass: localhost,127.0.0.1, }, });以上是 release notes/v2.1.0.md 中的原始示例其中proxy.test:8080是文档示例地址实际使用时替换成你自己的代理地址。另外注意launch/connect层的devtools、env、proxy等选项自v0.46.0起已废弃浏览器相关选项移到 scenario 配置中所以给上下文配代理就用这里的上下文级proxy不要再用旧的位置。写一个走代理的测试脚本下面脚本结构参考仓库示例 examples/browser/useragent.js加上 release notes 中的proxy配置。TARGET_URL需要你替换为被测页面的真实地址server替换为你的代理地址import { browser } from k6/browser; export const options { scenarios: { ui: { executor: shared-iterations, options: { browser: { type: chromium, }, }, }, }, }; export default async function () { const context await browser.newContext({ proxy: { server: http://proxy.test:8080, // 替换为你的代理地址文档示例值 bypass: localhost,127.0.0.1, }, }); const page await context.newPage(); await page.goto(TARGET_URL, { waitUntil: load }); // 在这里做你的断言例如 check(page, { ... }) await page.close(); await context.close(); }release notes 说明这个选项通过Target.createBrowserContext接入 Chromium。运行与验证流量确实走了代理运行脚本k6 run script.js页面本身通常看不出流量是否走了代理仓库测试 browser_context_proxy_test.go 给出的验证思路是用一个普通代理把请求转发给目标服务器并加一个标记请求头和一个目标服务器配合由目标服务器根据是否收到标记来区分流量是否经过代理。测试中的 JS 流程是const context await browser.newContext({ extraHTTPHeaders: { X-K6-Proxy-Test: testHeader }, proxy: { server: proxyURL, bypass: -loopback }, }); const page await context.newPage(); await page.goto(targetURL, { waitUntil: load }); const body await page.textContent(body); await page.close(); await context.close();其中testHeader、proxyURL、targetURL在测试代码中是动态生成的服务地址。该测试的判定方式是文档示例走代理时目标服务器收到的请求带有代理添加的X-K6-Proxy-Forwarded: true头目标页面 body 返回proxied:testHeader测试断言page.textContent(body)等于proxied:testHeader并且代理端确实收到了这次 GET 请求不走代理时body 返回direct:testHeader且代理端收不到任何请求。你可以按同样的模式自建一个会记录请求的代理和目标页来确认流量路径而不必依赖具体的proxied:文本。配置错误时的表现proxy缺少server时会立即失败。仓库测试中的例子是await browser.newContext({ proxy: { bypass: foo } });newContext返回的 Promise 会被 reject错误信息为parsing browser.newContext options: proxy.server must be set也就是说看到这条报错时先检查proxy.server是否漏写或写成了空字符串实现里对空字符串和纯空白都会判为缺失。适用边界该选项随v2.1.0引入使用它需要 k6v2.1.0或之后的版本选项通过Target.createBrowserContext接入 Chromiumrelease notes 中描述的对象是 Chromiumbypass的写法仓库文档中出现过两种形式release notes 示例的localhost,127.0.0.1与测试代码中的-loopback两者均为文档中出现过的用法文档未进一步展开其取值规则建议按你的代理需求选用后以上文验证方式确认效果。【免费下载链接】k6A modern load testing tool, using Go and JavaScript项目地址: https://gitcode.com/GitHub_Trending/k6/k6创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表