Gắn proxy tĩnh vào Apache JMeter (HTTP Request Defaults và CSV credentials)
Khi bạn load-test hoặc regression HTTP bằng Apache JMeter nhưng server chỉ mở cho IP Việt Nam đã whitelist, toàn bộ thread group cần đi ra một proxy tĩnh ổn định. Bài này hướng dẫn cấu hình HTTP Request Defaults / HTTP Request với proxy host–port, lấy user/pass từ CSV Data Set, verify exit IP, và tránh lộ credential trong file .jmx commit lên git.
Khi nào JMeter cần proxy tĩnh?
- API staging/production chỉ accept vài IP nguồn.
- Thread group lớn: nếu dùng IP xoay, log phía server phân tán khó đối chiếu.
- So sánh latency cảm nhận từ IP dân cư VN với IP văn phòng.
- Smoke + soak test cần cùng exit IP giữa các lần chạy nightly.
IP xoay vẫn hợp lý khi giả lập nhiều ISP. Với whitelist B2B, một IP cố định thường đơn giản hơn.
Thông số đã xác nhận
Proxy tĩnh dân cư Việt Nam: 1.000đ/ngày hoặc 30.000đ/30 ngày; Viettel / VNPT / FPT; HTTP hoặc SOCKS5; mạng dân cư thật, IP sạch. Chi tiết: xem bảng giá. Checker: check-proxy.
Smoke-test trước khi mở JMeter
bashcurl -x "http://USER:PASS@HOST:PORT" --max-time 25 https://api.ipify.org
echo
Ghi IP kỳ vọng. Đảm bảo máy chạy JMeter không còn VPN khác.
Cấu hình HTTP Request Defaults
- Thêm Config Element → HTTP Request Defaults vào Test Plan hoặc Thread Group.
- Tab Advanced (tên tab có thể khác nhẹ theo version):
- Proxy Server:
HOST - Port:
PORT - Username / Password: để trống nếu bạn inject từ biến (khuyến nghị).
- Proxy Server:
- Mọi HTTP Request con kế thừa proxy trừ khi override.
Hoặc set từng HTTP Request → Advanced → Proxy nếu chỉ một số sampler cần đi qua proxy.
Biến hóa credential bằng User Defined Variables + CSV
User Defined Variables (không commit giá trị thật):
PROXY_HOST ${__P(PROXY_HOST,)}
PROXY_PORT ${__P(PROXY_PORT,8080)}
PROXY_USER ${__P(PROXY_USER,)}
PROXY_PASS ${__P(PROXY_PASS,)}
EXPECTED_IP ${__P(EXPECTED_IP,)}
Chạy non-GUI:
bashjmeter -n -t api-smoke.jmx \
-JPROXY_HOST=host.example \
-JPROXY_PORT=8080 \
-JPROXY_USER=user \
-JPROXY_PASS=secret \
-JEXPECTED_IP=x.x.x.x \
-l results.jtl -j jmeter.log
Trong HTTP Request Defaults / HTTP Request, Username = {PROXY_PASS}, Server = {PROXY_PORT}.
CSV Data Set Config (khi xoay nhiều credential proxy — vẫn mỗi dòng một user:pass tĩnh):
proxy_user,proxy_pass
user1,pass1
Filename ngoài repo; Variable Names proxy_user,proxy_pass; gắn vào field proxy auth.
Sampler verify exit IP (đặt đầu Thread Group)
- HTTP Request: GET
https://api.ipify.org(hoặc?format=json). - JSON Extractor / Regular Expression Extractor →
exit_ip. - Response Assertion hoặc JSR223 Assertion:
groovydef expected = props.get('EXPECTED_IP') ?: ''
def actual = vars.get('exit_ip')?.trim()
if (expected && actual != expected) {
AssertionResult.setFailure(true)
AssertionResult.setFailureMessage("Exit IP lệch: ${actual}")
}
Fail sớm nếu IP không khớp panel — tránh chạy hàng nghìn sampler sai đường.
HTTP vs SOCKS5 trong JMeter
- Proxy HTTP/HTTPS trong HTTP Request là lựa chọn phổ biến (CONNECT cho HTTPS đích).
- SOCKS: một số version/plugin hỗ trợ qua JVM system props (
socksProxyHost) — ảnh hưởng cả process; cân nhắc tách JVM chỉ cho test cần SOCKS. - Ưu tiên cổng HTTP của gói tĩnh nếu đủ dùng.
Ví dụ JVM (cẩn thận scope toàn process):
bashexport JVM_ARGS="-Dhttps.proxyHost=HOST -Dhttps.proxyPort=PORT -Dhttp.proxyHost=HOST -Dhttp.proxyPort=PORT"
# Auth JVM proxy phức tạp hơn — ưu tiên field proxy trong HTTP Request
Checklist vận hành
- Không lưu mật khẩu proxy trong
.jmxtrên git — dùng-Jhoặc CSV ngoài repo. - Verify IP ở sampler đầu; gắn Assertion.
- Timeout connect/response hợp lý (20–30s) để phân biệt proxy chết và API chậm.
- Phân biệt 407 (proxy auth) với 5xx đích trong Listener.
- Distributed JMeter: mỗi engine cần cấu hình proxy riêng nếu enginge không cùng NAT.
- Sau rotate credential panel → cập nhật CI secret và chạy smoke 1 thread.
Lỗi thường gặp
| Triệu chứng | Hướng xử lý |
|---|---|
| Non-HTTP response code / connection reset | Host/port sai; proxy down — chạy check-proxy |
| 407 | Sai user/pass hoặc biến ${PROXY_USER} chưa resolve |
| IP lệch | Defaults chưa apply; sampler override; còn proxy hệ thống OS |
| HTTPS fail | Thiếu CONNECT qua proxy HTTP; thử lại curl -x |
| CSV không đọc | Đường dẫn relative khác khi -n từ directory khác |
Kết luận
HTTP Request Defaults + biến -J / CSV giúp gắn proxy tĩnh vào JMeter sạch sẽ, phù hợp whitelist IP dân cư VN cố định. Xem thông số và xem bảng giá, rồi xác nhận live bằng check-proxy trước khi chạy soak overnight.