JMeter는 브라우저와 승인된 대상 애플리케이션 사이에서 로컬 레코딩 프록시 역할을 하여 HTTP 요청 샘플러를 생성할 수 있습니다. 현재 버전에서는 이 구성 요소를 HTTP(S) 테스트 스크립트 레코더 라고 부릅니다 . 이 구성 요소는 레코딩 컨트롤러로 향하는 브라우저 여정을 캡처하며, 캡처된 스크립트는 정리, 상관 분석, 유효성 검사 과정을 거쳐 프로토콜 수준 테스트로 실행되어야 합니다.
JMeter HTTP 프록시 서버란 무엇입니까?
녹음기는 일반적으로 로컬 포트에서 수신 대기합니다. 8888브라우저는 해당 프록시에 HTTP 및 HTTPS 요청을 보내고, JMeter는 일치하는 트래픽을 선택된 컨트롤러 아래의 샘플러로 변환합니다. 재생 중에 JMeter는 요청을 직접 전송하며, 각 가상 사용자마다 브라우저를 실행하지 않습니다.
스크립트를 직접 작성하는 대신 녹음하는 이유는 무엇일까요?
- 실제 요청 순서, 리디렉션, 폼 및 백그라운드 API를 캡처합니다.
- 간과하기 쉬운 XHR 또는 fetch 호출을 보여줍니다.
- 복잡한 사용자 여정에 대한 빠른 기준선을 만듭니다.
- 헤더와 파라미터의 전사 오류를 줄입니다.
문서화된 소규모 API의 경우 수동 구성이 더 깔끔합니다. 브라우저의 네트워크 동작을 아직 이해하지 못한 경우에는 기록 기능이 도움이 됩니다. 용어에 대한 자세한 내용은 프록시 유형 가이드를 참조하세요.
JMeter 5.x에서 스크립트를 기록하는 방법
- 스크립트 생성을 위해 JMeter를 GUI 모드로 시작하십시오.
- 테스트 계획에 스레드 그룹을 추가합니다.
- 스레드 그룹에 녹화 컨트롤러를 추가합니다.
- 필요에 따라 HTTP 요청 기본값 및 HTTP 쿠키 관리자를 추가하십시오.
- HTTP(S) 테스트 스크립트 레코더를 추가하고 대상으로 레코딩 컨트롤러를 선택합니다.
- 관련 없는 트래픽을 제한하려면 포함/제외 패턴을 사용하십시오.
Apache JMeter 공식 기록 가이드가 버전별 가장 권위 있는 참조 자료입니다.
1단계) HTTP 프록시 서버 설정
8888대상 컨트롤러를 설정하고 클릭하세요. 스타트.테스트 브라우저를 HTTP 및 HTTPS 프록시 호스트로 구성하십시오. 127.0.0.1 그리고 동일한 포트를 사용합니다. 브라우저가 다른 VM이나 컨테이너에서 실행되는 경우 localhost는 해당 환경을 가리킵니다. 이 경우 승인된 접근 가능한 개인 IP 주소를 사용하십시오.
Proxy host: 127.0.0.1
Proxy port: 8888
Include: https?://test.example.com/.*
Exclude: .*(.png|.jpg|.gif|.css|.woff2)(?.*)?$
애플리케이션 API가 다른 서브도메인을 사용할 수 있으므로 처음 필터링할 때 너무 공격적으로 적용하지 마십시오. 한 번 기록하고 호스트를 검사한 다음 패턴을 다듬으십시오.
2단계) 활동 기록
- 레코더를 시작하고 격리된 테스트 브라우저에서만 임시 인증서를 신뢰하십시오.
- 승인된 테스트 환경을 엽니다.
- 사람의 속도로 깨끗한 여정을 한 번 수행하십시오.
- 최종 업무 처리가 완료된 직후 녹화를 즉시 중지하십시오.
- 브라우저의 기본 프록시 설정을 복원하세요.
샘플러의 이름을 비즈니스 액션별로 변경하고 트랜잭션 컨트롤러에서 관련 요청을 그룹화합니다. 분석, 광고, 브라우저 업데이트, 채팅 위젯 및 중복된 정적 리소스는 명시적으로 범위에 포함되지 않은 경우 제거합니다.
모든 샘플러에서 비밀 정보를 검사하십시오. 비밀번호는 보호된 런타임 데이터에서 가져와야 하며, 토큰 변경 시에는 상관관계를 파악해야 합니다.
3단계) 테스트 계획 실행
부하를 추가하기 전에 사용자 한 명과 한 번의 반복만 검증하십시오. 임시로 결과 트리 보기를 사용하고, 리디렉션 및 응답 본문을 확인하고, 예상되는 비즈니스 결과에 대한 검증을 추가하십시오. HTTP 200 응답만으로는 로그인 또는 결제가 성공했음을 입증할 수 없습니다.
Threads: 1
Ramp-up: 1 second
Loop Count: 1
디버깅 후, 부하가 큰 리스너를 제거하고 GUI가 없는 버전을 실행하세요.
jmeter -n -t recorded-test.jmx -l results.jtl -e -o html-report
보고서 디렉터리는 새로 생성되었거나 비어 있어야 합니다. 부하를 점진적으로 증가시키면서 대상 시스템과 JMeter를 함께 모니터링하십시오.
4단계) 테스트 결과 저장
재사용 가능한 계획을 저장하세요 .jmx 생성된 데이터를 별도의 파일로 보관하세요.
- JMX: 샘플러, 컨트롤러, 어설션, 타이머, 변수 및 구성.
- JTL: 분석을 위한 원시 샘플 결과입니다.
- HTML 대시보드: 백분위수, 처리량, 오류 및 활성 스레드.
- 서버 지표: CPU, 메모리, 데이터베이스, 큐 및 서비스 원격 측정 데이터.
공개 속성과 테스트 데이터를 사용하여 계획을 버전 관리합니다. JMeter 및 Java 버전, 대상 빌드, 환경, 사용자 수, 초기 적응 기간 및 소요 시간을 기록합니다.
HTTPS 트래픽 및 인증서 기록
HTTPS를 사용하는 경우, JMeter는 레코더 시작 시 임시 인증 기관을 생성합니다. 이 임시 인증 기관은 전용 테스트 브라우저에만 가져와서 인증된 사이트를 기록한 다음 삭제하십시오.
- HTTP(S) 테스트 스크립트 레코더를 시작합니다.
- 생성된 ApacheJMeterTemporaryRootCA 인증서를 찾으십시오.
- 격리된 프로필에서 신뢰할 수 있는 기관으로 가져오세요.
- 승인된 HTTPS 여정을 기록하세요.
- 작업이 끝나면 인증서를 삭제하세요.
인증서 고정, 상호 TLS, 관리형 브라우저, 모바일 앱 및 최신 전송 프로토콜을 사용하면 가로채기를 차단할 수 있습니다. 하지만 프로덕션 환경의 보안 제어를 약화시키지 마십시오. 스테이징 빌드, API 사양 또는 승인된 대체 캡처 방법을 사용하십시오.
상관관계: 녹화된 스크립트를 다시 재생할 수 있도록 만들기
세션 ID, CSRF 토큰, OAuth 상태, 요청 서명 및 리소스 ID는 실행 간에 변경됩니다. 상관 관계 분석은 한 응답에서 최신 값을 추출하여 이후 요청에 대체합니다.
- 동적 값을 처음으로 포함하는 응답을 찾으십시오.
- JSON, CSS, XPath 또는 정규 표현식 추출기를 추가하세요.
- 결과를 이름이 지정된 JMeter 변수에 저장합니다.
- 나중에 하드코딩된 값은 변수 참조로 대체하십시오.
- 추출 결과가 없는 경우 명확하게 오류를 표시하십시오.
JSON Extractor
Variable: csrfToken
JSON Path: $.csrf.token
Default: NOT_FOUND
Later header:
X-CSRF-Token: ${csrfToken}
파라미터화는 CSV 파일 등에서 가져온 독립적인 사용자 데이터를 제공합니다. 상관관계 분석은 실행 중에 서버에서 생성된 데이터를 수집합니다. 현실적인 실행 계획에는 일반적으로 이 두 가지 모두 필요합니다.
문제해결
| 문제 | 가능한 원인 | 수정 |
|---|---|---|
| 기록된 요청 없음 | 잘못된 프록시, 중지된 레코더, 포트 충돌 또는 우회 규칙 | 호스트와 포트를 확인하고, 레코더를 시작한 다음, 대상 제외 항목을 제거하십시오. |
| HTTPS 경고 | 임시 CA가 없거나 만료되었습니다. | 새로운 레코더 인증서를 생성하고 해당 인증서를 테스트 프로필에만 가져오세요. |
| 교통량이 너무 많아요 | 확장 기능, 원격 측정, 기타 탭 또는 광범위한 패턴 | 깔끔한 프로필을 사용하고 포함/제외 필터를 구체화하세요. |
| 로그인 리플레이 실패 | 쿠키, 토큰, OAuth 흐름 또는 상관관계가 누락되었습니다. | 쿠키 관리자를 추가하고, 동적 값을 추출하고, 리디렉션을 검사하세요. |
| 이후 브라우저 오프라인 | 여전히 중지된 로컬 프록시를 가리키고 있습니다. | 자동 설정 또는 프록시 미사용 설정으로 복원합니다. |
| JMeter 메모리 오류 | GUI 리스너 또는 대용량 응답 저장소 | GUI 모드를 사용하지 않고 저장된 응답 데이터를 제한하십시오. |
| 브라우저와 다릅니다 | JMeter는 페이지 JavaScript를 렌더링하거나 실행하지 않습니다. | 기본 API를 테스트하고 브라우저 도구를 사용하여 렌더링 메트릭을 확인하세요. |
JMeter는 프로토콜 성능 측정 도구입니다. LCP(Largest Contentful Paint)와 같은 시각적 이벤트는 JMeter 자체로는 측정할 수 없습니다.
자주 묻는 질문
JMeter에서 HTTP 프록시 서버 이름은 무엇으로 대체되었습니까?
해당 구성 요소의 이름은 이제 HTTP(S) 테스트 스크립트 레코더입니다.
어떤 레코더 포트를 사용해야 하나요?
사용되지 않는 로컬 포트라면 어떤 것이든 사용 가능합니다. 포트 8888이 흔히 사용되며, 브라우저도 동일한 값을 사용해야 합니다.
JMeter는 HTTPS 트래픽을 기록할 수 있습니까?
예, 격리된 테스트 브라우저가 JMeter의 임시 기록 인증서를 신뢰하는 경우 가능합니다.
녹화된 스크립트가 재생될 때 오류가 발생하는 이유는 무엇입니까?
동적 토큰, 쿠키, 인증 흐름, 호스트 차이 및 누락된 데이터는 일반적으로 상관 관계 및 매개변수화를 필요로 합니다.
JMeter로 Chrome을 녹화할 수 있나요?
예. JMeter의 로컬 레코더를 사용하도록 깨끗한 Chrome 프로필을 구성하세요.
JMeter GUI에서 부하 테스트를 실행해야 할까요?
아니요. GUI 모드에서 빌드 및 디버깅을 수행한 다음, 비GUI 모드에서 로드를 실행하세요.
JMeter는 실제 브라우저처럼 작동하나요?
아니요. 프로토콜 요청은 전송하지만 HTML을 렌더링하거나 브라우저 자바스크립트를 실행하지는 않습니다.
운영 환경 로그인 정보를 기록하는 것이 안전한가요?
스테이징 및 테스트 계정을 사용하는 것이 좋습니다. 프로덕션 환경에서 데이터를 캡처하려면 명시적인 승인과 엄격한 비밀 유지 관리가 필요합니다.
