PERFORMANCE TESTING VÀ MỘT SỐ CÔNG CỤ KIỂM THỬ PERFORMANCE
Bài đăng này đã không được cập nhật trong 2 năm
I. TỔNG QUAN VỀ PERFORMANCE TESTING
1. Performane Testing là gì?
Performance Testing là một loại kiểm thử nhằm xác định mức độ đáp ứng, băng thông, độ tin cậy và/hoặc khả năng mở rộng của hệ thống dưới một khối lượng làm việc/truy cập nhất định. Performance Testing thường được sử dụng để:
- Đánh giá mức độ sẵn sàng của sản phẩm
- Đánh giá dựa vào các tiêu chí hiệu suất
- So sánh giữa các đặc tính hiệu suất của đa hệ thống hoặc cấu hình hệ thống
- Tìm ra nguồn gốc của các vấn đề về hiệu suất
- Hỗ trợ điều chỉnh hệ thống
- Tìm các mức độ băng thông
Performance Testing thường được dùng để giúp xác định tắc nghẽn trong một hệ thống, thiết lập một đường cơ sở để kiểm thử trong tương lai, hỗ trợ điều chỉnh hiệu suất hiệu quả, xác định sự phù hợp mục tiêu và yêu cầu hiệu suất, và thu thập dữ liệu hoạt động liên quan khác để giúp các bên liên quan đưa ra quyết định liên quan đến chất lượng chung của các ứng dụng đang được kiểm thử. Ngoài ra, các kết quả từ việc kiểm thử hiệu suất và phân tích có thể giúp bạn ước tính cấu hình phần cứng cần thiết để hỗ trợ các ứng dụng khi bạn đưa sản phẩm đi vào sử dụng rộng rãi.
2. Tại sao lại cần phải thực hiện Performance Testing
Ở cấp độ cao nhất, kiểm thử hiệu năng gần như luôn được tiến hành để giải quyết một hoặc nhiều rủi ro liên quan tới chi phí, cơ hội hoặc danh tiếng của một công ty. Một số lý do cụ thể hơn cho tiến hành kiểm thử hiệu suất bao gồm:
Đánh giá sự sẵn sàng phát hành bởi:
- Cho phép bạn dự đoán hoặc ước tính các đặc tính hiệu suất của một ứng dụng trong sản xuất và đánh giá có hay không thực hiện kiểm tra hiệu suất dựa trên những dự đoán đó. Những dự đoán này cũng có giá trị để các bên liên quan đưa ra quyết định về việc liệu một ứng dụng đã sẵn sàng để phát hành hoặc khả năng xử lý tăng trưởng trong tương lai, hoặc nó cần phải cải thiện hiệu suất/phần cứng trước khi phát hành.
- Cung cấp dữ liệu cho thấy khả năng của người dùng không hài lòng với hiệu suất của hệ thống.
- Cung cấp dữ liệu để hỗ trợ trong việc dự đoán các tổn thất doanh thu hay uy tín thương hiệu do khả năng mở rộng, khả năng ổn định hoặc do người dùng không hài lòng với thời gian phản hồi của ứng dụng.
Đánh giá cơ sở hạ tầng:
- Đanh giá sự phù hợp của hiệu suất hiện tại
- Xác định khả năng ổn định
- Xác định năng lực của cơ sở hạ tầng của ứng dụng, cũng như xác định các nguồn lực cần thiết trong tương lai để cung cấp hiệu suất chấp nhận được.
- So sánh cấu hình của các hệ thống khác nhau để xác định hoạt động tốt nhất cho ứng dụng và doanh nghiệp
- Thẩm định việc áp dụng các đặc tính hiệu suất mong muốn trong ràng buộc sử dụng ngân sách nguồn lực.
Đánh giá đầy đủ về hiệu suất phần mềm bởi:
- Xác định đặc tính hiệu suất mong muốn của phần mềm trước và sau khi thay đổi.
- Cung cấp các so sánh giữa các đặc tính hiệu suất hiện tại và ứng dụng mong muốn.
Nâng cao hiệu quả hoạt động bởi:
- Phân tích hành vi của ứng dụng tại các mức tải khác nhau.
- Xác định các vướng mắt trong việc áp dụng.
- Cung cấp các thông tin liên quan đến tốc độ, khả năng mở rộng và sự ổn định của sản phẩm trước khi phát hành, do đó cho phép bạn đưa ra quyết định về việc khi nào sẽ điều chỉnh hệ thống.
II. MỘT SỐ CÔNG CỤ KIỂM THỬ PERFORMANCE
1. TOOL AUTOMATION TESTING - JMETER
1.1 Giới thiệu về Jmeter 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) và IMAP(S)…
Jmeter là một phần mềm 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 Đặc trưng
- Jmeter có 1 số đặc trưng như sau:
- Nguồn mở, miễn phí
- Giao diện đơn giản, trực quan dễ sử dụng
- Có thể kiểm thử nhiều kiểu server: Web - HTTP, HTTPS, SOAP, Database - JDBC, LDAP, JMS, Mail - POP3, …
- 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 script, 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ả.
- Jmeter Performance Testing gồm 2 phần:
- Load Testing: Mô hình hóa dự kiến sử dụng bởi nhiều người dùng truy cập một dịch vụ website trong cùng thời điểm.
- Stress Testing: Tất cả các web server có thể tải một dung lượng lớn, khi mà tải trọng vượt ra ngoài giới hạn thì web server bắt đầu phản hồi chậm và gây ra lỗi. Mục đích của stress testing là có thể tìm ra độ tải lớn mà web server có thể xử lý.
1.3 Cách hoạt động
Cách Jmeter làm việc như sau:
1.4 Các thành phần chính của Jmeter TEST PLAN Test Plan định nghĩa phải test gì và cách để thực hiện như thế nào.
- Test Plan node: nơi lưu test plan thật sự bạn muốn test
- Workbench node: nơi chứa tạo các element mà bạn không dùng, chỉ để với mục đích copy/paste. Khi lưu Test Plan thì Workbench không được lưu
TEST PLAN ELEMENT: Ở mức độ basic, mình chỉ giới thiệu chi tiết một vài elements trong số các elements sau đây: i. Thread Groups:
- Mọi TestPlan đều cần ít nhất 1 Thread Group, nhiệm vụ của Thread Groups sẽ tạo ra các yêu cầu để request tới server.
- Cách tạo: Chuột phải vào Test Plan –> Add –> Threads(users) –> Thread Group
- Giải thích một số thuộc tính trên màn hình:
- Name : đặt tên cho ThreadGroup
- Number of Threads(users) : số lượng người dùng mà ta muốn mô phỏng.
- Ramp-up Period (in seconds): 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.
- Loop Count Forever : 1 các thread được tạo sẽ thực hiện 1 lần (thay 1 bằng n thì số các thread sẽ lặp n lần).
ii. Sampler Samplers cho phép JMeter gửi các loại yêu cầu cụ thể tới server Có rất nhiều Samplers như sau:
- HTTP Request
- FTP Request
- JDBC Request-
- Java Request-
- SOAP/XML Request
- RPC Requests
Đây là hình ảnh cho HTTP Request:
Giải thích một số thuộc tính trên màn hình:
- Name: Đặt tên hành động chúng ta muốn làm
- Protocol: Không chọn gì có nghĩa default là HTTP
- Server Name or IP: Tên của server muốn test, ví dụ “lazada.vn”
- Path: Trang chủ thì chỉ cần /, trang con trong đó thì “/tên trang”
iii. Logic Controllers:
Nếu những request được định nghĩa trong các test plan của bạn được thực thi dựa vào 1 vài logic, lúc đó sẽ cần đến Logic Controllers. Thích hợp với cấu trúc if-then-else và loop trong Java hoặc ngôn ngữ khác.
iv. Listeners:
Tập các kết quả của việc run test, cung cấp cho người dùng các công cụ hiển thị một cách trực quan, dễ hiểu như: tables, graphs, trees hoặc một vài log files đơn giản
Hình ảnh sau đây là một kết quả test dạng table
Giải thích một số thuộc tính trên màn hình:
- Label : tên request
- #Samples : số request
- Average : thời gian trung bình xử lý các request
- min : thời gian nhỏ nhất xử lý request
- max : thời gian lớn nhất xử lý request
- Error : phần trăm bị lỗi của các request(lỗi kết nối hoặc lỗi cho đầu ra không mong muốn)
- thoughput : số request/s của server
- kb/s = (avg.bytes*thoughput)/1024
v. Timer: dùng để định nghĩa thời gian đợi giữa các request **vi. Assertions:**Xác nhận kết quả trả về đã đúng hay chưa bằng một số Validation **vii. Configuration Elements:**Tạo các giá trị mặc định và các biến dùng cho Sampler viii. Pre-processor Elements: Dùng để xử lí một cái gì đó ngay trước khi Sampler được thực hiện ix. Post-processor Elements: Dùng để xử lí kết quả trả về sau khi Sampler được thực hiện
1.5 Demo - Basic SCENARIO 1:
- Access vào TOP của Lazada: http://lazada.vn
- Số lượng user: 100 SCENARIO 2:
- Access vào trang khác trên lazada: /quan-ao-phu-kien-cho-be/?spm=a2o4n.home.0.0.03OchN&boost=2
- Số lượng user: 100
Step 1: Create a new Test Plan: DemoLazada
**Step 2:**Giả lập nhiều user cùng truy cập vào website đồng thời. Click chuột phải vào Test Plan –> Add –> Threads(users) –> Thread Group Name : đặt tên cho ThreadGroup ( ở đây mình đặt ThreadGroup1). Number of Threads(users) : số lượng người dùng mà ta muốn mô phỏng. Ramp-up Period (in seconds): 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. Loop Count Forever : 1 các thread được tạo sẽ thực hiện 1 lần( thay 1 bằng n thì số các thread sẽ lặp n lần).
Step 3: Tạo request đến server 1 thread(tương ứng 1 user) có thể tạo nhiều request http gửi lên server . Chuột phải vào Thread group –> add –> Confict Element –> HTTP Request Default Name : đặt tên request Server name or Ip : điền địa chỉ trang web cần truy cập. Nếu biết ip và cổng thì : điền ip vào Server Name or Ip và số cổng vào Port Number, đường dẫn đến website cần truy cập vào Path. ví dụ Truy cập vào trang http://lazada.vn chỉ cần điền Server Name or Ip : lazada.vn Port number : 80
Lưu ý: nên kéo HTTP Request Default lên phía trên các ThreadGroup để dễ dàng thực hiện test, chỉ cần tạo 1 lần cho tất cả các ThreadGroup muốn test trang lazada.vn
Step 4: Tạo HTTP Request cụ thể đến đối tượng mà bạn muốn truy cập trên trang lazada.
Trong trường hợp này, điểm đến là mục Quần áo phụ kiện cho bé
Chuột phải vào Thread group –> add –> sample –> HTTP Request
Path: quan-ao-phu-kien-cho-be/?spm=a2o4n.home.0.0.9TS4zZ
Step 5: Chạy test Click vào button Start (dấu mũi tên màu xanh) trên thanh menu Click vào icon Stop trên thanh menu để dừng lại
Step 6:Xem kết quả của kịch bản test
- Xem kết quả tổng hợp của tất cả các thread Chuột phải vào Thread Group –> Add -> Listener –> Summary Report
Bảng thống kê kết quả Label : tên request #Sample : số request Average : thời gian trung bình xử lý các request min : thời gian nhỏ nhất xử lý request max : thời gian nhỏ nhất xử lý request Error : phần trăm bị lỗi của các request(lỗi kết nối hoặc lỗi cho đầu ra không mong muốn) thoughput : số request/s của server kb/s = (avg.bytes*thoughput)/1024
Step 7: Xem kết quả của từng Request trong kịch bản Chuột phải Thread Group –> Add –> Listener –> View Results Tree
Ví dụ : sau khi chạy chương trình, trong phần view results tree hiển thị thông tin các request và kết quả của chúng.
Các request xanh là request không lỗi, các request đỏ bị lỗi. Click vào mỗi request tương ứng bên cạnh sẽ có 3 phần thông tin về request đó: sample result, request, response data.
1.6 Demo - Advance
SCENARIO: Simulate 10 users log-in to system at the same time with different username & password
Để log-in vào 1 trang web thì thường dùng method POST để gửi REQUEST lên với những parameters cần thiết để server biết và trả về RESPONE tương ứng. Ở đây để biết 1 trang web khi log-in sẽ cần gửi lên những thông tin gì, thì ta sẽ dùng firebug (1 add-on của firefox) để làm việc này.
Sau khi biết được cần phải gửi những parameters nào lên thì chúng ta thực hiện simulate việc gửi này với Jmeter, như sau :
Nhưng trong những parameters này thì có authencity_token là giá trị thay đổi theo từng REQUEST để tránh việc spam cũng như bảo mật cho REQUEST, nên không thể copy authencity_token của request này cho request kia. Do đó, chúng ta phải tạo ra những authencity_token riêng cho từng request. Để làm được việc này, Jmeter cung cấp cho chúng ta function đó là REGULAR EXPRESSION EXTRACTOR
REGULAR EXPRESSION được gọi là biểu thức chính quy, Là bộ xử lý sau, phần tử này sẽ thực hiện sau mỗi yêu cầu Mẫu trong phạm vi của nó, áp dụng biểu thức chính quy, trích xuất các giá trị được yêu cầu, tạo chuỗi mẫu và lưu trữ kết quả vào tên biến nhất định (ví dụ : tạo authencity_token, item_id để đi vào detail, tạo transaction_id cho các giao dịch ,…)
Sau khi lấy được authencity_token cho mỗi request thì chúng ta thực hiện log-in 10 users cùng lúc với username và password khác nhau
CSV DATA SET CONFIG Để thực hiện việc này, chúng ta dùng CSV Data Set Config. Chúng ta sẽ tạo 1 file csv chứa username và password của 10 users cần dùng, và import file CSV đó vào CSV Data Set Config và gán biến cho các parameters ở POST để JMeter hiểu và thực hiện.
Thực hiện gán biến cho username và pass
ASSERTION
Nhưng khi chạy như vậy thì tất cả những request trả về đều được chấp nhận và báo pass, chúng ta khó phân biệt được request nào đăng nhập thành công, request nào đăng nhập không thành công. Do đó, chúng ta sẽ thêm 1 phần Assertion để phân biệt điều này.
a. Khi đăng nhập thành công:
b. Khi đăng nhập không thành công:
EXPORT TEST RESULT
Sau đó Run và nhận kết quả. Chúng ta cũng có thể export kết quả test ra file csv bằng cách. File sẽ được lưu tự động vào thư mục Bin của Jmeter
2. TOOL AUTOMATION TESTING - LOADCOMPLETE
2.1 Giới thiệu
LoadComplete là một công cụ kiểm tra lượng tải, cho phép tạo và chạy tự động cho web servers và services. Giúp người dùng kiểm tra được hiệu năng của web server dưới một lượng tải lớn.
2.2 Các Tính Năng:
- Load testing: Kiểm tra hành vi của web server dưới tải trọng lớn
- Stress testing: Kiểm tra hành vi của web server dưới một lượng tải cực kỳ lớn
- Scalability testing: Xác định năng suất của web server bằng cách tăng thêm phần cứng hoặc phần mềm
2.3. Hỗ trợ
- Web Servers and Platforms: LoadComplete hỗ trợ tất cả các loại web server (IIS, Apache) và nền tảng (Windows, Linux/UNIX)
- We Client Applications: LoadComplete hỗ trợ tất cả các trình duyệt web phổ biến (Internet Explorer, Edge, Firefox, Chrome or custom web application)
- Hỗ trợ Rich Internet Applications: LoadComplete có thể ghi và chạy lại các thử nghiệm cho bất kỳ loại nào của Rich Internet Applications, bao gồm Adobe Flash and Flex, Microsoft Silverlight and Ajax.
- Hỗ trợ JSP/Servlet Applications: LoadComplete có thể ghi và chạy lại luồng dữ liệu cho ứng dụng JSP/Servlet
- Hỗ trợ HTML5 Applications: LoadComplete có thể ghi lại và chạy lại luồng dữ liệu cho web app mà được phát triển bởi HTML5 và APIs, bao gồm giao thức WebSocket.
2.4. Ưu điểm
- Cài đặt dễ dàng
- Dễ sử dụng bằng cách ghi lại hành động của người dùng
- Có thể thiết lập các quy tắc để kiểm tra tùy thuộc vào hành vi của máy chủ
- Có thể xem được quá trình chạy kiểm tra
- Report dễ đọc
2.5. Nhược điểm
- Là một ứng dụng tính phí
3. TOOL AUTOMATION TESTING - GRINDER
3.1 Giới thiệu
The Grinder là một tool kiểm thử hiệu năng dựa trên nền tảng JavaTM. Và quan trọng nó hoàn toàn miễn phí. Grinder bao gồm:
- The Grinder Console: Ứng dụng GUI dùng để điều khiển các Agents và hiển thị kết quả. Grinder Console cũng dùng được sử dụng như một IDE chỉnh sửa và phát triển Test suites. Để khởi động màn hình Console dùng lệnh “java net.grinder.Console”
- Grinder Agents: Để khởi động Agent dùng lệnh “java net.grinder.Grinder”
3.2 Key Future
- Generic Approach: Kiểm tra tất cả các ứng dụng mà có Java API, bao gồm HTTP web servers, SOAP và REST web services, và application servers (CORBA, RMI, JMS, EJBs)
- Flexible Scripting : Script được viết bằng ngôn ngữ Python và Clojure
- Distributed Framework : Có hỗ trợ UI cho phép giám sát và kiểm soát các nhiều injectors và cung cấp việc chỉnh sửa Script và phân phối.
- TCP proxy để lưu lại các hành vi tương tác trên browser vào Grinder test script
- Hỗ trợ nhiều giao thức khác nhau
3.3 Ưu điểm:
- Miễn phí
- Có thể tùy chỉnh script một cách dễ dàng
- Script dùng ngôn ngữ Python
- Cung cấp chức năng record action
- Có thể sử dung Browser Proxy
- Linh hoạt, có thể dễ dàng start up trên một hệ thống khác
3.4 Nhược điểm:
- Không có nhiều sự lựa chọn hiển thị kết quả Report
- GUI không thân thiện với người dùng
4. TOOL AUTOMATION TESTING - WEB PERFORMANCE
4.1 Giới thiệu
Với mục đích kiểm tra hiệu năng của một trang web, webperformance cũng là một trong những công cụ hỗ trợ.
Webperformance cung cấp các chức năng test performance như:
- Trang web có thể xử lý được bao nhiêu user ?
- Trang web có thể bị phá vỡ dưới điều kiện tải nào.
- Trang web có thể phục vụ bao nhiêu transaction trong 1 giây.
- Có thể cấu hình để thực hiện load test với vitual browser và real browser dựa trên Selenium WebDrive.
Với nền tảng hỗ trợ là Windows, MAC, bạn có thể dễ dàng download và cài đặt ứng dựng từ website chính thức: http://www.webperformance.com/download/
4.2 Qui trình thực hiện load test
- Tạo một testcase bằng phương pháp record màn hình các action:
- Cấu hình testcase cho replay.
- Cấu hình testcase với nhiều user.
- Chạy và phân tích kết quả load test.
4.3 Ưu điểm
- Dễ cài đặt
- Dễ sử dụng bằng cách ghi lại những action user thực hiện
- Hỗ trợ hầu hết các trình duyệt phổ biến hiện nay
- Có thể xem được report trong quá trình chạy kiểm tra
- Report kết quả thực hiện rõ ràng, chi tiết, dễ hiểu
4.4. Nhược điểm
- Là tool có phí
- Không support hệ điều hành Linux
- Chỉ test được trên trang demo của webperformane khi sử dụng bản trial
III. KẾT LUẬN
Qua bài viết này, hy vọng mọi người có một cái nhìn tổng quan về các Performance Testing Tool. Khi có một yêu cầu tìm hiểu về Tool phục vụ cho Performance Test, chắc hẳn mọi người đã lựa chọn được cho mình một tool phù hợp với dự án của mình.
Tài liệu tham khảo: http://opensourceforu.com/2016/04/the-grinder-a-handy-performance-testing-tool/ https://www.blazemeter.com/blog/open-source-load-testing-tools-which-one-should-you-use
All rights reserved