`Ở phần trước, tác giả đã giới thiệu đến các bạn khái quát về performance testing và lợi ích của performance testing. Nên bài viết này, tác giả sẽ giới thiệu thêm cho các bạn về 1 tool dùng để thực hiện performance testing thông dụng và dễ sử dụng đó là Jmeter.` ### 1.1 Vậy Jmeter là gì ? - Jmeter là công cụ để đo độ tải và performance của đối tượng, có thể sử dụng để test performance trên cả nguồn tĩnh và nguồn động, có thể kiểm tra độ tải và hiệu năng trên nhiều loại server khác nhau như: Web – HTTP, HTTPS, SOAP, Database via JDBC, LDAP, JMS, Mail – SMTP(S), POP3(S) and IMAP(S)… - Jmeter là  một mã nguồn mở được viết bằng java. Cha đẻ của JMeter là Stefano Mazzocchi sau đó Apache đã thiết kế lại để cải tiến hơn giao diện đồ họa cho người dùng và khả năng kiểm thử hướng chức năng.  ### 1.2 Những ưu điểm khi sử dụng Jmeter để thực hiện performance testing - Mã nguồn mở, miễn phí - Giao diện đơn giản, trực quan dễ sử dụng - Một công cụ độc lập có thể chạy trên nhiều nền tảng hệ điều hành khác nhau, trên Linux chỉ cần chạy bằng một shell scrip, trên Windows thì chỉ cần chạy một file .bat - Đa luồng, giúp xử lý tạo nhiều request cùng một khoảng thời gian, xử lý các dữ liệu thu được một cách hiệu quả - Đặc tính mở rộng, có rất nhiều plugin được chia trẻ rộng rãi và miễn phí - JMeter có thể  phát hiện ra số lượng tối đa của người dùng đồng thời mà trang web của bạn có thể xử lý - JMeter cung cấp một loạt các phân tích đồ họa của báo cáo hiệu suất `Hình dưới đây mô tả cách mà Jmeter giả lập những request để kiểm tra độ chịu tải của web` ![JMeterApacheSampler.png](/uploads/8a5998a0-e0d3-446d-b97d-5efc066c02c8.png) ### 2. Cài đặt Jmeter **a. Cài đặt Jmeter 2.1.1 ( Đối với Ubuntu).** - Tải jmeter tại trang : http://jmeter.apache.org/download_jmeter.cgi : wget http://mirrors.digipower.vn/apache//jmeter/binaries/apache-jmeter-2.11.tgz - Giải nén file : .tar -zxvf apache-jmeter-2.11.tgz - Chạy jmeter : Chuyển đến thư mục bin trong thư mục vừa giải nén ra (apache-jmeter-2.11) : ./jmeter.sh **b. Cài đặt Jmeter 2.1.1 ( Đối với window).** - Tải jmeter tại trang : http://jmeter.apache.org/download_jmeter.cgi - Giải nén vào bin chạy file ApacheJMeter. ### 3.Thực hiện test bằng Jmeter Trước khi thực hiện performance testing, chúng ta cần xác định rõ mục tiêu test của mình đối với trang web mà chúng ta muốn test **Normal Load** : Trung bình số lượng users có thể truy cập vào website của bạn **Heavy Load** : Tối đa số lượng users có thể truy cập vào website của bạn `Dưới đây là luồng hoạt động cơ bản của Jmeter ` ![JMeterTestPlanFlow.png](/uploads/463e6f87-d4b4-4519-b824-8251e0d4bd10.png) **_Ở tutorial này, chúng ta sẽ giả lập 1000 users sẽ truy cập đồng thời vào trang google.com_** **STEP 1) Add Thread Group** 1. Mở Jmeter 2. Chọn Test Plan 3. Add Thread Group Click chuột phải vào Test Plan và add một thread group mới : **Add -> Threads (Users) -> Thread Group** ![JMeterAddThreadGroup.png](/uploads/a23f367e-0d42-40e2-8bc0-bbd7d5b6b76b.png) Ở Control panel của Thread Group, chọn những mục như sau : ![ThreadGroupJMeterPerformance.png](/uploads/79788d37-861e-4bb7-bef1-c3c557992024.png) **Number of Threads:** 100 (Number of users connects to target website: 100) **Loop Count:** 10 (Number of time to execute testing) **Ramp-Up Period:** 100 `Ở đây, các bạn cần phân biệt Thread Count và Loop Count` ![ThreadCountVSLoopCount.png](/uploads/9afa2464-33f5-4e1f-a98a-76af3e61a7f0.png) **Ramp-Up Period :** Cho biết thời gian để JMeter tạo ra tất cả những thread cần thiết. Ví dụ nếu tham số này là 10 thì trong 10 giây tất cả các Number of Threads đã khai báo ở trên sẽ được gửi đi trong 10 giây, nếu đặt tham số này là 0 thì tất cả các yêu cầu sẽ được gửi đi cùng một lúc. ![UserDelayHTTP.png](/uploads/be0d2c54-c4f3-43c8-b0f4-95d46fcf081b.png) **STEP 2) Adding JMeter elements** Bây giờ, chúng ta phải xác định xem những elements cần test ở kịch bản này là gì ? **HTTP REQUEST DEFAULT** Element này có thể add bằng cách click chuột phải vào Thread Group và chọn **: Add -> Config Element -> HTTP Request Defaults.** ![ThreadGroupAddJMeterPerformance.png](/uploads/ff4a25d6-f81b-4a9b-9477-af269eb31b2a.png) Trong bảng điều khiển HTTP Request Defaults, nhập tên trang web cần kiểm tra ( http://www.google.com ) ![HTTPRequestJMeterPerformance.png](/uploads/144d35fb-4610-4a37-b403-26d041d0229a.png) **HTTP REQUEST** Click chuột phải vào Threah Group và chọn: **Add -> Sampler -> HTTP Request.** ![AddHTTPRequestJmeterPerformance.png](/uploads/027ab2cf-f3cd-4d19-8523-e8136cd50440.png) Trong HTTP Request Control Panel, nhập đường dẫn URL mà bạn muốn gửi đến máy chủ của Google. ![HTTPRequestControlPanelJMeter.png](/uploads/4d9b33a6-deda-4a69-a892-7ad62b01d50b.png) Ví dụ, bạn nhập "calendar" vào ô **Path** thì Jmeter sẽ gửi request của bạn đến trang google.com/calendar ![HTTPRequestCalenderJMeter.png](/uploads/5bc20788-8a8c-4d6d-b10f-12b0bd768ad3.png) Nếu bạn không nhập gì ở field **Path** thì Jmeter sẽ gửi reques của bạn đến trang google.com **STEP 3) ADDING GRAPH RESULT** Jmeter có thể hiển thị những kết quả test của bạn dưới dạng Graph Click chuột phải vào Test Plan , **Add -> Listener -> Graph Results** ![AddGrapgResultJMeter.png](/uploads/a7d0fcfe-0adc-4760-a1d5-0a0a97d6a6a3.png) **STEP 4) RUN TEST AND GET THE TEST RESULT** Click nút **Run** (Ctrl + R) ở thanh ToolBar để bắt đầu chạy test. Bạn sẽ thấy các kết quả test được hiển thị realtime dưới dạng graph `Hình dưới đây thể hiện kết quả test của kịch bản 100 users cùng truy cập vào google.com cùng lúc` ![RunTestPlan.gif](/uploads/50d72e01-6c98-4c0c-87f0-53f8de0819fe.gif) Những thông số của graph này được biểu thị bằng những màu sắc khác nhau : - **Đen** : Tổng số samples hiện tại đang gửi - **Đỏ** : Độ lệch chuẩn hiện tại - **Xanh lá** : tỷ số throughput hiện tại đại diện cho số request là server đã xử lý - **Xanh dương** : Trung bình samples hiện tại `Hãy cùng phân tích những số liệu của graph bên dưới ` ![GraphResultGraphJMeter.png](/uploads/ccd225d7-4dbc-4ce8-b113-993d42a6b826.png) Để phân tích kết quả của bất cứ kịch bản test nào, chúng ta cũng nên tập trung vào 2 chỉ số : - Throughput - Deviation (độ lệch chuẩn) **Throughput** chính là chỉ số quan trọng nhất khi chúng ta cần phân tích. Chỉ số này đại diện cho khả năng xử lý của server dưới một lượng truy cập hoặc 1 lượng tải lớn. Chỉ số này càng cao thì performance của server càng tốt và ngược lại. Trong thử nghiệm này thì, throughput của Google là **1,491.193/minute**. Nó có nghĩa là Google có thể xử lý được 1,491.193 request trên phút, 1 con số rất ấn tượng, điều này cũng đồng nghĩa là server của google chịu tải rất tốt. **Deviation** được thể hiện bằng màu đỏ (ở đây là 577) con số này dùng để so sánh sai số so với trung bình. Con số này càng nhỏ, thì performance của server càng tốt. `Thử làm 1 phép so sánh giữa google và yahoo ` ![GraphToDisplayJMeter.png](/uploads/142addcf-b84d-45e4-b49e-a8e00d53515a.png) Có thể thấy là Thoughput của yahoo là 867.326/minute thấp hơn khá nhiều so với google, và Deviation là 2869 cũng cao hơn nhiều so với google. Từ đó ta có thể đưa ra kết luận là server của google thì có performance tốt hơn nhiều so với server của yahoo. ### Kết luận - Trên đây là hướng dẫn tổng quát về công cụ JMeter, 1 công cụ rất thông dụng trong việc test performance cho các website. - Chúng ta cũng có thể áp dụng JMeter vào test mobile bằng cách thực hiện performance test trên server của app mobile. Chúng ta có thể thử tạo những request liên tục trên cùng 1 function (ví dụ : tạo 100 request cho server thực hiện tạo code sms và trả về phía client cùng một lúc) để xem server có handle được 1 lượng lớn request như vậy không và có ảnh hưởng gì đến phía client của app không ? Và còn rất nhiều cách test performance trên mobile mà chúng ta có thể linh động áp dụng bằng JMeter. `Bài viết 2 kì về Performance testing trên mobile app của tác giả đến đấy là hết. Chúc các bạn thành công với Performance testing và JMeter để tạo ra những sản phẩm tốt nhất. Hẹn gặp lại ở những bài viết sau.`