---
title: "Gắn proxy tĩnh vào Apache JMeter (HTTP Request Defaults và CSV credentials)"
url: https://memory.wiki/PpK9DlMq
updated: 2026-09-28T22:22:10.291Z
source: "api"
---
# 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á](https://proxyviet.org/proxy-tinh). Checker: [check-proxy](https://proxyviet.org/check-proxy).

## Smoke-test trước khi mở JMeter

```bash
curl -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

1. Thêm **Config Element → HTTP Request Defaults** vào Test Plan hoặc Thread Group.
2. 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ị).
3. 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:

```bash
jmeter -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_USER}`, Password = `${PROXY_PASS}`, Server = `${PROXY_HOST}`, Port = `${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)

1. HTTP Request: GET `https://api.ipify.org` (hoặc `?format=json`).
2. JSON Extractor / Regular Expression Extractor → `exit_ip`.
3. Response Assertion hoặc JSR223 Assertion:

```groovy
def 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):

```bash
export 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

1. Không lưu mật khẩu proxy trong `.jmx` trên git — dùng `-J` hoặc CSV ngoài repo.
2. Verify IP ở sampler đầu; gắn Assertion.
3. Timeout connect/response hợp lý (20–30s) để phân biệt proxy chết và API chậm.
4. Phân biệt 407 (proxy auth) với 5xx đích trong Listener.
5. Distributed JMeter: mỗi engine cần cấu hình proxy riêng nếu enginge không cùng NAT.
6. 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á](https://proxyviet.org/proxy-tinh), rồi xác nhận live bằng [check-proxy](https://proxyviet.org/check-proxy) trước khi chạy soak overnight.
