κ°μ
μλ° λλ©μΈμ λ΄λΉνμ¬ κ΅¬νμ νμμ§λ§, λ΄κ° λ§λ μλΉμ€κ° λκ·λͺ¨ νκ²½μμ μλ§μ νΈλν½μ κ°λΉν μ μμμ§ μλ¬Έμ΄ λ€μλ€. κ²μ μλΉμ€μμ RDMS μμ μ‘°ννμ§ μλλ€λ κ±Έ μμ§λ§, μλΌμ€ν± μμΉκ°μ κΈ°μ μ€νλ μ λͺ¨λ₯Ό λΏλλ¬ λ°°μ΄ μ§μκ³Ό μ£Όμ΄μ§ νκ²½μμ μ΅μ μ κ²°κ³Όλ₯Ό λμΆνκΈ° μν΄ μΈλ±μ€λ₯Ό μ μ©νμ¬ μλ° μ‘°νλ₯Ό μ€μνμκ³ , μ΄ μΈλ±μ€κ° μ μλνλμ§, μ΄λ μ λ μ±λ₯ ν₯μμ΄ μλμ§ ν μ€νΈ ν΄λ³΄κΈ° μν΄, μνμΉ μ μ΄λ―Έν°λ₯Ό κΉμ μ±λ₯ν μ€νΈλ₯Ό μ§ννκΈ°λ‘ νμλ€.
μ±λ₯ν μ€νΈ λ?
- μλΉμ€ λ° μλΉμ€ μμ€ν μ μ±λ₯μ νμΈνκΈ° μν΄ μ€μ μ¬μ© νκ²½κ³Ό λΉμ·ν νκ²½μμ ν μ€νΈλ₯Ό μ§ννλ κ²μ λ§νλ€.
- μ΄λ₯Ό ν΅ν΄μ Response Time(μλ΅μκ°) κ³Ό Throughput(μ²λ¦¬λ), λ³λͺ©κ΅¬κ° λ±μ νμΈν μ μλ€.
- μ±λ₯ ν μ€νΈλ‘ μ»μ μ λ³΄λ‘ μλΉμ€λ μλΉμ€ μμ€ν μ λ¬Έμ μ μ νμΈνκ³ μ΄λ₯Ό κ°μ νμ¬ λ³΄μν μ μλ€.
Apache JMeter λ?
μΉ μ ν리μΌμ΄μ μ μ€μ¬μΌλ‘ λ€μν μλΉμ€μ μ±λ₯μ λΆμνκ³ μΈ‘μ νκΈ° μν λΆν ν μ€νΈ λκ΅¬λ‘ μ¬μ©ν μ μλ μνμΉ νλ‘μ νΈμ΄λ€.
μΉ μ ν리μΌμ΄μ μ²λΌ ν΄λΌμ΄μΈνΈ-μλ² κ΅¬μ‘°λ‘ λ μννΈμ¨μ΄μ μ±λ₯ ν μ€νΈλ₯Ό μν΄μ λ§λ€μ΄μ§ λ¬΄λ£ μλ° νλ‘κ·Έλ¨μ΄λ€.
JMeterλ λ¨μ/μ±λ₯/μ€νΈλ μ€ ν μ€νΈ λ± λ§μ κ³³μμ νμ©ν μ μλ€.
JMeterλ ν΅μ νλ‘ν μ½ λ¨κ³μμλ§ λμνκ³ μΉ λΈλΌμ°μ μλ λμνμ§ μλλ€. μ¦ , ν΅μ κ·μ½μ λ§λλ‘ ν΄λΌμ΄μΈνΈμ μλ² κ° λ©μμ§λ§ μ‘μμ ν λΏμ΄κ³ ν΄λΌμ΄μΈνΈ μ체μμ νν΄μ§λ μ°μ°λμμ νμ§μλλ€.
Apache JMeter μ€μΉ
μνμΉ μ μ΄λ―Έν° λ€μ΄λ‘λ
https://jmeter.apache.org/download_jmeter.cgi
λ¨Όμ μ μ΄λ―Έν°λ₯Ό μ€μΉνκΈ° μν΄μ μλ° 8 μ΄μ λ²μ μ΄ νμνλ€. μ μ΄λ―Έν°λ₯Ό μ°κΈ°μ μλ° 8 μ΄μμ κΉκ³ νκ²½λ³μλ±μ μ€μ ν΄λμ.
λ°μ΄λ리 νμΌμ€ zip νμΌμ λ€μ΄ λ°μ μ€λ€.
κ·Έλ¦¬κ³ μμΆμ ν΄μ μμΌμ€λ€.
JMeter - DBκ΄λ ¨ λꡬ μ€μΉ
1) μ μλλΌμ΄λ² μ€μΉ
Jmeterκ° DBμ μ μνκΈ° μν΄μλ μ μλλΌμ΄λ²κ° νμνλ€. μλ λ§ν¬μ λ€μ΄κ° platform independent λ©λ΄μμ zipνμΌμ λ€μ΄λ‘λ λ°μΌλ©΄ λλ€.
https://dev.mysql.com/downloads/connector/j/
λ AWS RDSλ‘ MySQLμ μ¬μ©νκΈ° λλ¬Έμ MySQL 컀λ₯ν°λ₯Ό λ°μ΄ λ°μ μ£Όμλ€.
λͺλͺ DB 컀λ₯ν°λ κΈ°λ³ΈμΌλ‘ μνμΉ μ μ΄λ―Έν°μ κΈ°λ³ΈμΌλ‘ λ΄μ₯λμ΄ μλ€. μλ§ κ°μ μνμΉ μ¬λ¨ μμμΈ κΈ°μ μ€νλ€μ λ€μ΄ μλ κ²μΌλ‘ μκ°λλ€.(μ€λΌν΄ λ±λ±μ΄ μλκ±Έλ‘ λ³΄μ....)
λ€μ΄λ‘λ λ°μ νμΌμ μμΆμ νΌλ€.
.jarνμΌμΈ JDBC λλΌμ΄λ² νμΌμ 볡μ¬ν΄ λ€μ΄λ°μ κ²½λ‘λ‘ λ€μ΄κ° μμΆμ ν΄μ ν μνμΉ μ μ΄λ―Έν° ν΄λμμ libν΄λμ λ£μ΄μ€λ€.
Apache JMeter μ€ν
λ€μ΄λ°μ κ²½λ‘λ‘ λ€μ΄κ° μμΆμ ν΄μ ν μνμΉ μ μ΄λ―Έν° ν΄λμμ bin ν΄λμ λ€μ΄κ° jar νμΌμ λλΈν΄λ¦ν΄ μ€νμν¬ μ μλ€.
λͺ λ Ήμ΄λ‘λ cmd -> μμΆνΌ ν΄λ μλ bin ν΄λλ‘ μ΄λ -> jmeter μ λ ₯ ν μν°
μνμΉ μ μ΄λ―Έν° μ¬μ©λ²
μνμΉ μ μ΄λ―Έν°μμ νκ΅μ΄λ‘ μ΄μ μ§μν΄μ£ΌκΈΈλ νκ΅μ΄λ‘ μ€μ ν΄μ λλ €λ³΄μλ€.
μ€λͺ μ μμ΄λ²μ κ³Ό νκ΅μ΄ λ²μ λ λ€ ν΄λκ² λ€.
λ¨Όμ μ μ΄λ―Έν° ν μ€νΈ μ©μ΄λ€μ΄λ€.
- Thread Group : ν μ€νΈμ μ¬μ©λ μ°λ λ κ·Έλ£Ή, μ°λ λ 1κ°λΉ μ¬μ©μ 1λͺ μΈ κΌ΄μ΄λ€.
- Sampler : μ¬μ©μμ μ‘μ (μ: λ‘κ·ΈμΈ, κ²μλ¬Ό μμ±, κ²μλ¬Ό μ‘°ν λ±)
- Listener : μλ΅μ λ°μ 리ν¬ν , κ²μ¦, κ·Έλν λ± λ€μν μ²λ¦¬
- Configuration : Sampler λλ Listenerκ° μ¬μ©ν μ€μ κ° (μΏ ν€, JDBC 컀λ₯μ λ±)
- Assertion : μλ΅ νμΈ λ°©λ² (μλ΅ μ½λ, λ³Έλ¬Έ λ΄μ© λΉκ΅ λ±)
1) ν νλ¦Ώ μμ±
[ File > Templates ]λ₯Ό ν΄λ¦νκ³ μλ¨ μ λ νΈλ°μ€μμ JDBC Load Testλ₯Ό ν΄λ¦νλ€. create λ²νΌμ λλ¬ μμ±νλ€.
2) Configuration μ€μ
ν μ€νΈν DB μλ² μ°κ²° μ€μ μ νλ€.
κ΄λ ¨μ΅μ μ μλ¬Έμ
https://jmeter.apache.org/usermanual/component_reference.html
μ°κ²° μ΅λ κ°―μλ μ€μ μ νλ©΄ λλΉ μλ²μ μ΅λλ‘ μ»€λ₯νΈν μ μλ μ°λ λ κ°―μμ΄λ€. 0μΌλ‘ νλ©΄ μ΅λμΉκΉμ§ νμ©νλ€.
λλ¨Έμ§λ κΈ°λ³Έκ° κ·Έλλ‘ λμλ€.
DB μ°κ²° μ€μ μ΄λ€.
μνμΉ μ μ΄λ―Έν°λ ν μ€νΈ νλ μΉ μ΄ν리μΌμ΄μ μλ²μ ν μ€νΈλ₯Ό λ리λ μλ²λ μλ‘ λ¬λΌμΌ νλ€.
JMeterλ₯Ό λ리λ μλ²μ μΉ μ΄ν리μΌμ΄μ μλ²κ° κ°μΌλ©΄ κ°μ λ©λͺ¨λ¦¬λ₯Ό μ¬μ©νκΈ° λλ¬Έμ μ νν κ°μ μΈ‘μ ν μ μκΈ° λλ¬Έμ΄λ€.
IDE νλ‘μ νΈμ μΌλ―νμΌμμ datasource μ λ―μ΄ μ°κ²°ν λ°μ΄ν°λ² μ΄μ€ URLμ κΈ°μ ν΄μ€λ€.
JDBC λλΌμ΄λ² ν΄λμ€λ κΈ°λ³Έκ°μΌλ‘ postgresql λ‘ μ€μ λμ΄ μλλ°, λ€μ΄λ°μμ lib ν΄λμ λ£μ΄μ€ mysql λλΌμ΄λ²λ₯Ό μ€μ ν΄μ€λ€.
username κ³Ό passwordλ RDSμ username κ³Ό passwordλ₯Ό μ λ ₯ν΄μ€λ€.
λ°λ‘ μλ£ λ²νΌμ μλ€.
3) Thread Group μ€μ
μ°λ λ κ·Έλ£Ήμ λΆνλ₯Ό μ€ μκ³Ό λΉλλ₯Ό μ€μ
μμ°¨νΌ μ μ΄λ―Έν°μ κ½μ΄μ ν΅μ¬μ΄λ€.
μ΄μ€ μ°λ λ κ·Έλ£Ήμ΄ μ μΌ μ€μνλ°, λ΄κ° μ€μ ν΄μ€ λΆνλ‘ RDS μλ²λ‘ 보λ΄κΈ° λλ¬Έμ΄λ€.
- Number of Threads : μ°λ λ κ°μ(μ¬μ©μ μ)
- Ramp-up period : μ°λ λ κ°μλ₯Ό λ§λλλ° μμλλ μκ° / μ¦ ν μ€νΈμ 걸리λ μ΄ μκ°
- Loop Count : infinite λλ n μΌλ‘ κ°μ μ€μ ν μ μμΌλ©° μ€μ λ κ°μ λ°λΌ Number of Threads μ Ramp-up period λ§νΌ μμ²μ λ€μ 보λΈλ€. μ½κ² λ§ν΄ λ°λ³΅ νμμ΄λ€.
μμ κ°μ΄ μ€μ νλ©΄ 10μ μ κ° 30μ΄ μμ λͺ¨λ μ€νν΄μΌ λλ―λ‘, (30/10)μ΄μ ν λ²μ© μ΄ 10κ° μ°λ λκ° DBμ μ°κ²°λλ€. κ·Έλ¦¬κ³ μ΄ μμ μ 2λ² λ°λ³΅νλ€.
4) Sampler μ€μ (JDBC Request μ€μ )
JDBC μμ² μμ± - μ€μ ν μ€νΈν λ‘μ§μ μμ±
μ§μ νμ μ λ³ΈμΈμ΄ ν μ€νΈνκ³ μΆμ νμ μΌλ‘ μ€μ . μλ₯Όλ€μ΄ μ‘°νλ©΄ "Select Statement"
μλμλ μ±λ₯ν μ€νΈν 쿼리문 μμ±
(API μλμμΌ°μλ μ€νλλ 쿼리문μ 볡λΆνμλ€. show-sql: true λ‘ μΌλ―νμΌ μ€μ νλ©΄ 쿼리문μ λ‘κ·Έλ‘ λ³Ό μ μλ€.)
5) Listener μΆκ°
summary report λ± μ¬λ¬ 리μ€λλ€μ μμ²μ±κ³΅μ¬λΆ ν΅κ³λ₯Ό λ΄μ€λ€. DBμ λΆνκ° λ§μ΄ κ±Έλ €μ μμ²μ μ€ν¨νκ² λ κ²½μ°, λλ΅ λͺ 건κΉμ§ μμ²μ΄ μ±κ³΅νλμ§ νμ ν μ μλ€.
3κ°μ§ μ λλ₯Ό λ§μ΄ μ΄λ€.
6) Assertion μΆκ°
μλ΅κ°μ΄ μ λλ‘ μλμ§ κ²μ¦μ νκΈ°μν΄ Assertionμ μΆκ°
μ±λ₯ν μ€νΈ μ€ν
[ νμΌ > μ μ₯ ]μ λλ¬ νμΌμ μ μ₯νκ³ JDBC Requestνλ©΄μ λμ°κ³ μλ¨μ μ΄λ‘μμΌλ‘ λ μμλ²νΌμ λλ¬ μμνλ€.
κ²°κ³Όμμ μ΄λ‘μμ΄ μμ² μ±κ³΅μ΄κ³ λΉ¨κ°μμ΄ μμ² μ€ν¨μ΄λ€.
λ§μ½ μκΉ λ§λ μ€μ λ€μ΄ μ μ©μ΄ μ λλ€λ©΄ μ λ²νΌμ ν΄λ¦ν΄μ€λ€.
ν μ€νΈ κ²°κ³Ό
μμ½ λ³΄κ³ μ μμ
- Label : Sampler λͺ
- # Samples : μν μ€ν μ (Number of Threads X λ°λ³΅μ)
- Average : νκ· μλ΅ μκ° (ms)
- Min : μ΅μκ°
- Max : μ΅λκ°
- Std. Dev. : νμ€νΈμ°¨
- Error % : μ€λ₯ %
- Throughput : λ¨μ μκ°λΉ μ²λ¦¬λ
- Received KB/sec : μ΄λΉ μμ λ°μ΄ν°λ
- Sent KB/sec : μ΄λΉ μ μ‘ λ°μ΄ν°λ
- Avg. Bytes : μλ²λ‘λΆν° λ°μ νκ· λ°μ΄ν° λ°μ΄νΈ μ
κ²°κ³Όλ€μ νΈλ¦¬ 보기 μμ
νλμ 리νμ€νΈμ ν μ€νΈ μμ μκ°, μλ΅ μλ λ± λ€μν μ 보λ€μ΄ λμ¨λ€.
κ²°κ³Όλ€μ ν μ΄λΈλ‘ 보기
View Results Treeλ₯Ό Table νμμΌλ‘ 보μ¬μ€λ€. λ°μ΄ν°λ λμΌλ€.
μ΄ν© λ³΄κ³ μ / μλ΅ Assertion
- Label : Sampler λͺ
- # Samples : μν μ€ν μ (Number of Threads X λ°λ³΅μ)
- Average : νκ· μλ΅ μκ° (ms)
- Median : μλ΅ μκ° μ€μκ°
- 90% Line : 90%μ μνμ ν΄λΉ κ°λ³΄λ€ μ μ μκ° λ΄μ λλκ³ 10%λ λ κ±Έλ¦°λ€. λΌλ λ»μ 컬λΌ
- 95% Line : 95%μ μνμ ν΄λΉ κ°λ³΄λ€ μ μ μκ° λ΄μ λλκ³ 5%λ λ κ±Έλ¦°λ€. λΌλ λ»μ 컬λΌ
- 99% Line : 99%μ μνμ ν΄λΉ κ°λ³΄λ€ μ μ μκ° λ΄μ λλκ³ 1%λ λ κ±Έλ¦°λ€. λΌλ λ»μ 컬λΌ
- Min : μ΅μκ°
- Max : μ΅λκ°
- Std. Dev. : νμ€νΈμ°¨
- Error % : μ€λ₯ %
- Throughput : λ¨μ μκ°λΉ μ²λ¦¬λ
- Received KB/sec : μ΄λΉ μμ λ°μ΄ν°λ
- Sent KB/sec : μ΄λΉ μ μ‘ λ°μ΄ν°λ
- Avg. Bytes : μλ²λ‘λΆν° λ°μ νκ· λ°μ΄ν° λ°μ΄νΈ μ
Aggregate Reportμ μ₯μ μ 90%, 95%, 99% Line 컬λΌμ΄λ€.
μ΄λ κ² μμ°¨νΌ μ μ΄λ―Έν°μ μ€μΉλ²κ³Ό μ¬μ©λ²μ λν΄ μμ보μλ€. λμ¨ κ²°κ³Ό λ€λ‘ μ°λ λ κ·Έλ£Ήμ μμ±λ€μ μλ΄μ£Όμ΄ μνλ νκ²½μ μ€μ μ ν΄λκ³ μ΄λ λ΄ μλ²κ° μ΄λ€ μλ΅κ°μ λμΆνλμ§ λͺ¨λν°λ§ νλ©΄λλ€.
νμλ μΆκ°μ μΌλ‘ AWS CloudWatch κΉμ§ κ°μ΄ 보면μ μλ² CPU μ¬μ©λ, 컀λ₯μ μμ κ°μ© λ©λͺ¨λ¦¬λ λ³νκΉμ§ λͺ¨λν°λ§ ν΄λ³΄μλ€.
μ§μλ¬Έμ λ°κΏκ°λ©° ν μ€νΈλ₯Ό κ³μ μ§νν΄λ³΄κ³ μ΅μ μ κ²°κ³Όκ° λμ¨ λ°©ν₯μ μ ννλ©΄ λ κ²μ΄λ€.
λ€μμ μΈλ±μ€λ₯Ό νμ©νμ¬ μλ°μ‘°νλ₯Ό νμ μ κ·Έλ₯ μ‘°ννλ κ²λ³΄λ€ μ΄λμ λμ μ±λ₯ μ°¨μ΄κ° μλμ§ ν μ€νΈλ₯Ό μ§νν΄ λ³Ό κ²μ΄λ€.
μ°Έκ³
- μΈνλ°/ λ°±κΈ°μ - λ μλ° μ ν리μΌμ΄μ μ ν μ€νΈνλ λ€μν λ°©λ²
- https://jocoma.tistory.com/entry/%EC%84%B1%EB%8A%A5%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%8F%84%EA%B5%AC-Jmeter#recentComments
'Testing' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μλ° μ‘°ν κΈ°λ₯ - μΈλ±μ€ μ μ© λ° μ±λ₯ν μ€νΈ νΈλ¬λΈ μν , ν μ€νΈ κ²°κ³Ό (0) | 2024.01.11 |
---|
λκΈ