Apache JMeter는 Java 기반의 오픈소스 부하 테스트 도구로, GUI를 통한 직관적인 테스트 설계와 강력한 분산 테스트 기능을 제공합니다. HTTP, FTP, JDBC, JMS 등 다양한 프로토콜을 지원합니다.
Apache JMeter는 1998년 Stefano Mazzocchi가 개발한 Java 기반의 오픈소스 성능 테스트 도구입니다. GUI를 통해 복잡한 테스트 시나리오를 코드 없이 구성할 수 있어 QA 엔지니어에게 특히 인기가 높습니다.
| 특징 | 설명 |
|---|---|
| GUI 기반 | 코드 없이 드래그앤드롭으로 테스트 설계 |
| 다중 프로토콜 | HTTP, HTTPS, FTP, JDBC, JMS, SOAP, REST |
| 분산 테스트 | Controller + Slave 구성으로 대규모 부하 생성 |
| 플러그인 생태계 | JMeter Plugins Manager로 확장 가능 |
JMeter는 Java 8 이상이 필요합니다.
# Java 확인
java -version
# macOS (Homebrew)
brew install jmeter
# 수동 설치 (모든 OS)
# https://jmeter.apache.org/download_jmeter.cgi 에서 .tgz 다운로드
tar -xzf apache-jmeter-5.x.x.tgz
cd apache-jmeter-5.x.x/bin
./jmeter # GUI 실행 (macOS/Linux)
jmeter.bat # GUI 실행 (Windows)Test Plan → Add → Threads → Thread Group 순서로 생성합니다.
Thread Group → Add → Sampler → HTTP Request로 추가합니다.
Server Name: httpbin.org
Port: 443
Protocol: HTTPS
Method: GET
Path: /getHTTP Request → Add → Assertions → Response Assertion으로 추가합니다.
Field to Test: Response Code
Pattern Matching Rules: Equals
Patterns to Test: 200JSON Path Assertion으로 응답 JSON의 특정 필드 값을 검증할 수 있습니다. Add → Assertions → JSON Assertion을 사용하세요.
Name: BASE_URL
Value: https://api.example.com
# 사용법: ${BASE_URL}/usersusername,password
user1,pass1
user2,pass2
user3,pass3Thread Group → Add → Config Element → CSV Data Set Config로 CSV를 불러와 변수로 사용합니다.
CI/CD 및 대규모 테스트에는 Non-GUI 모드를 사용합니다. GUI 모드는 리소스를 많이 소비합니다.
jmeter -n -t test-plan.jmx -l results.jtl -e -o report-dir| 옵션 | 설명 |
|---|---|
-n | Non-GUI 모드 |
-t | .jmx 테스트 플랜 파일 |
-l | 결과 로그 파일 (.jtl) |
-e | 테스트 후 HTML 리포트 생성 |
-o | 리포트 출력 디렉토리 |
# 테스트 실행 중 리포트 생성
jmeter -n -t test-plan.jmx -l results.jtl -e -o ./report
# 기존 .jtl 파일로 리포트만 생성
jmeter -g results.jtl -o ./report./report/index.html을 브라우저로 열면 응답시간 분포, 처리량, 에러율 등의 상세 분석 리포트를 확인할 수 있습니다.
단일 머신의 한계를 넘는 대규모 부하를 위해 Controller + Agent(Slave) 구성을 사용합니다.
# Controller의 jmeter.properties
remote_hosts=192.168.1.101:1099,192.168.1.102:1099# Agent 서버에서 실행
jmeter-server
# Controller에서 분산 테스트 실행
jmeter -n -t test-plan.jmx -r -l results.jtlname: JMeter Load Test
on: [push]
jobs:
load-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with: { java-version: '17' }
- name: Install JMeter
run: |
wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.6.3.tgz
tar -xzf apache-jmeter-5.6.3.tgz
echo "$PWD/apache-jmeter-5.6.3/bin" >> $GITHUB_PATH
- run: jmeter -n -t tests/load-test.jmx -l results.jtl -e -o report
- uses: actions/upload-artifact@v4
with: { name: jmeter-report, path: report/ }