Xin chào các bạn, đợt vừa rồi mình có sử dụng Jmeter để vết Test Plan chạy load test cho dự án của công ty. Hôm nay mình xin mạn phép chia sẻ, giới thiệu khái quát và thực hành một demo nho nhỏ để sử dụng JMeter test một API nhé. Không dài dòng nữa, chúng ta bắt đầu thôi.

Giới thiệu

Jmeter là gì?

Jmeter được sáng lập bởi Stefano Mazzocchi, sau đó được cải tiến và hoàn thiện như hiện tại bởi Apache. Đây là một trong những công cụ để đo tải và performance của ứng dụng. Jmeter là phần mềm mã nguồn mở được viết bằng Java sử dụng để test performance trên cả nguồn tĩnh và nguồn động.

Là công cụ được sử dụng để kiểm tra độ tải và hiệu năng trên nhiều loại loại server khác nhau: Web – HTTP, HTTPS, SOAP, Database via JDBC, LDAP, JMS, Mail – SMTP(S), POP3(S) và IMAP(S),… Hiện nay thì Jmeter đã trở thành công cụ thử nghiệm phổ biến nhất trên toàn cầu ngoài Selenium và Load Runner.

Cơ chế hoạt động

Cơ chế hoạt động của JMeter là thực hiện các yêu cầu HTTP hoặc các loại yêu cầu khác đến một ứng dụng web hoặc dịch vụ, sau đó đo lường và phân tích các thời gian phản hồi, hiệu suất và các chỉ số liên quan khác.

Khi chạy, JMeter sẽ thực hiện các yêu cầu được cấu hình trong kịch bản và thu thập thông tin về hiệu suất và phản hồi từ máy chủ. Kết quả này sau đó được hiển thị cho người dùng thông qua các trình nghe và báo cáo. Rất đơn giản phải không nào

Các components cơ bản

Jmeter cung cấp một loạt các component mạnh mẽ giúp người kiểm thử tạo ra các kịch bản kiểm thử phức tạp để đánh giá hiệu suất, khả năng mở rộng và đáng tin cậy của các ứng dụng của họ. Sau đây, mình sẽ giới thiệu qua về một số thành phần chính hay sử dụng của một Test Plan:

  1. Nhóm Luồng (Thread Group): Đây là điểm khởi đầu của một kế hoạch kiểm thử JMeter và đại diện cho một nhóm các người dùng ảo thực hiện một loạt các bước kiểm thử cùng một lúc.
  2. Bộ Lấy Mẫu (Samplers): Bộ lấy mẫu chịu trách nhiệm tạo ra các yêu cầu đến máy chủ đang được kiểm thử. Chúng mô phỏng các loại tương tác của người dùng như các yêu cầu HTTP, yêu cầu FTP, yêu cầu JDBC và nhiều loại khác nữa.
  3. Bộ Điều Khiển (Controllers): Bộ điều khiển cung cấp kiểm soát luồng và logic cho kế hoạch kiểm thử. Chúng xác định thứ tự và điều kiện dưới đó các bộ lấy mẫu được thực thi. Các ví dụ bao gồm Bộ Điều Khiển Đơn Giản (Simple Controllers), Bộ Điều Khiển Lặp Lại (Loop Controllers), và Bộ Điều Khiển Nếu (If Controllers).
  4. Trình Nghe (Listeners): Trình nghe bắt và hiển thị kết quả của quá trình thực thi kiểm thử. Chúng cung cấp thông tin quan trọng về thời gian phản hồi, lưu lượng, lỗi và các chỉ số hiệu suất khác. Các trình nghe phổ biến bao gồm Xem Kết Quả Cây (View Results Tree), Báo Cáo Tóm Tắt (Summary Report), và Báo Cáo Tổng Hợp (Aggregate Report).
  5. Bộ Đếm Thời Gian (Timers): Bộ đếm thời gian tạo ra độ trễ giữa các yêu cầu để mô phỏng hành vi thực tế của người dùng. Chúng đảm bảo rằng tải được tạo ra bởi kế hoạch kiểm thử được phân phối đều qua thời gian.
  6. Khai Báo (Assertions): Khai báo xác thực các phản hồi nhận được từ máy chủ theo các tiêu chí dự kiến. Chúng giúp đảm bảo tính đúng đắn và đáng tin cậy của ứng dụng đang được kiểm thử.
  7. Các Thành Phần Cấu Hình (Configuration Elements): Các thành phần cấu hình cho phép người kiểm thử cấu hình các khía cạnh khác nhau của việc thực thi kiểm thử, như định nghĩa biến, thiết lập tiêu đề HTTP, và quản lý cookie.

Ngoài ra còn rất nhiều các component hay khác mà tùy thuộc vào các bài toán mình sẽ sử dụng khác nhau.

Ưu điểm

  1. Công cụ mã nguồn mở - Apache JMeter là một công cụ mã nguồn mở dựa trên Java được sử dụng để thực hiện kiểm thử tải và kiểm thử hiệu suất.
  2. Kiểm thử đa nền tảng - Vì JMeter được xây dựng hoàn toàn trên nền Java, nó có thể được sử dụng trên bất kỳ nền tảng nào có JVM; Windows, Linux hoặc macOS.
  3. Kiểm thử API mượt mà - Kiểm thử API cho phép kiểm thử API dễ dàng, mượt mà và nhanh chóng.
  4. Phạm vi kiểm thử nhanh chóng - JMeter là một công cụ mạnh mẽ cho kiểm thử hiệu suất, giúp quá trình trở nên dễ dàng đối với mọi người, dù là có kinh nghiệm hoặc không.
  5. Cho phép kiểm thử tải - JMeter là một công cụ rất hiệu quả để đo xem một ứng dụng web có đáp ứng được yêu cầu tải cụ thể hay không.
  6. Cho phép kiểm thử căng thẳng - JMeter có thể mô phỏng người dùng để đo hiệu suất ứng dụng dưới áp lực nhiều căng thẳng.
  7. Nhiều plugin - JMeter cung cấp nhiều plugin, và có thể dễ dàng cài đặt thêm plugin bằng cách cài đặt Trình quản lý Plugin.

Nhược điểm

  1. Khả năng Mở Rộng Khó Khăn: Trong một số trường hợp, việc mở rộng và điều chỉnh JMeter để phù hợp với nhu cầu kiểm thử cụ thể có thể gặp khó khăn. Điều này có thể đòi hỏi kiến thức chuyên sâu về cấu hình và tinh chỉnh, đặc biệt đối với các kịch bản kiểm thử lớn và phức tạp.
  2. Tài Nguyên Tiêu Thụ Lớn: Khi thực hiện kiểm thử tải lớn hoặc với các kịch bản phức tạp, JMeter có thể tiêu tốn nhiều tài nguyên máy tính như bộ nhớ và CPU. Điều này có thể là một vấn đề đối với các máy tính có cấu hình thấp hoặc khi kiểm thử được thực hiện trên môi trường cloud có giới hạn tài nguyên.
  3. Giao Diện Người Dùng Không Thân Thiện: Giao diện người dùng của JMeter có thể được coi là phức tạp và không thân thiện đối với người mới bắt đầu. Việc hiểu và sử dụng hiệu quả các tính năng và chức năng của JMeter có thể đòi hỏi thời gian và học tập.
  4. Thiếu Hỗ Trợ Các Giao Thức Phức Tạp: Mặc dù JMeter hỗ trợ một loạt các giao thức như HTTP, FTP, JDBC, và JMS, nhưng nó có thể không cung cấp sự hỗ trợ đầy đủ cho các giao thức phức tạp hoặc các công nghệ mới.
  5. Khó Khăn Trong Việc Điều Chỉnh Yêu Cầu Được Tùy Chỉnh: Đôi khi, việc điều chỉnh và tùy chỉnh các yêu cầu HTTP trong JMeter có thể phức tạp, đặc biệt là khi cần thiết lập các yêu cầu phức tạp hoặc có yêu cầu xác thực.

Thực hành test API

Để thực hành, chúng ta sử dụng Weather API cho hướng dẫn này.

Đăng ký Weather API để nhận API Key của bạn qua liên kết này. API Key của bạn sẽ được gửi qua email, sau khi tài khoản được xác minh. Mục đích của chúng ta là tạo một  REST API Request bằng cách sử dụng JMeter để lấy dữ liệu thời tiết của London, Anh Quốc với HTTP Request Sampler.

Tải Jmeter

Hãy nhớ rằng để chạy được Jmeter, máy của bạn đã chắc chắn được cài Java rồi nhé.

Truy cập vào link dưới đây để tải Jmeter.

http://jmeter.apache.org/download_jmeter.cgi

Các bạn download về, giải nén và vào trong thư mục bin, sử dụng câu lệnh :

./jmeter

giao diện của Jmeter sẽ hiện ra:

Tạo Thread Group

Mình đặt tên cho nó là Weather API Testing. Hãy để các setting còn lại như mặc định.

Tạo HTTP Request

Tạo 1 HTTP Request bằng các bước sau: Click chuột phải vào tên Thread Group  chọn Add > Sampler > HTTP Request.

Lấy thông tin API


Chúng ta đang sử dụng Current Weather Data API để lấy dữ liệu thời tiết hiện tại của một vị trí cụ thể. Truy cập trang API trên Weather API và nhấp vào "API doc" dưới phần API Current Weather Data.

Chúng ta sẽ test API này:

api.openweathermap.org/data/2.5/weather?q={city name}&appid={your api key}

Hãy nhìn qua 1 lượt các thành phần của API này:

  • “api.openweathermap.org”: IP của web service.
  • “/data/2.5/weather”: Path của web service.
  • “q”: Tên thành phố mà muốn lấy thông tin. Trong trường hợp này sẽ là Hanoi.
  • “appid”:  API Key mà chúng ta đã nhận được qua mail.

Set up thông tin API


Hoàn thành các trường bắt buộc trong HTTP Request Sampler. Điền địa chỉ IP và đường dẫn với các chi tiết ở trên. Chọn "Phương thức" là "Phương thức GET".

Tiếp đến, ở phần Parameters bên dưới, thêm tên thành phố và API Key. Nhấp vào nút Add để chèn các tham số. Name là tên tham số và Value là giá trị tham số. Kiểm tra hình ảnh dưới đây để chèn chúng một cách chính xác. Mình đã set "Hanoi" là thành phố mà mình mong muốn lấy thông tin.

Hoàn chỉnh, chúng ta sẽ có được request HTTP như sau:

Thêm 1 Listener để xem kết quả

Chúng ta sử dụng Results Tree Listener, ngoài ra, các bạn có thể xem theo nhiều dạng khác như biểu đồ, summary,...

Như vậy là chúng ta đã set up xong 1 ví dụ đơn giản rồi.

Kết quả

Chạy kịch bản của bạn bằng cách nhấp vào nút "Start" trên thanh menu và quan sát kết quả trong View Results Tree Listener.

Các bạn có thể thấy chúng ta đã thành công lấy được thông tin thời tiết của thành phố Hà Nội.

Tiếp đến, chúng ta sẽ tăng số lượng request lên, tăng tải lên API và kiểm tra kết quả. Đi tới  Thread Group và tăng "Number of threads" lên thành 15.

Xóa kết quả trước đó trong trình nghe bằng nút "Clear All" trên thanh menu và chạy lại bài test bằng nút "Start".

Bạn có thể thấy phản hồi từ máy chủ với tải được áp dụng. Nó đang phản hồi rất tốt. Tăng các thuộc tính luồng khác và kiểm tra các phản hồi theo nhu cầu của bạn.

Bây giờ bạn có thể kiểm thử một API bằng Apache JMeter. Sử dụng một số API dịch vụ web khác và kiểm tra kết quả. Bạn có thể kiểm tra hiệu suất của dịch vụ API của bạn theo cách đó. Rất đơn giản phải không.

Kết luận

Apache JMeter là một công cụ kiểm thử hiệu suất mạnh mẽ và linh hoạt, được sử dụng rộng rãi để thực hiện kiểm thử tải, kiểm thử hiệu suất và kiểm thử API. Với các tính năng đa dạng như giao diện người dùng dễ sử dụng, khả năng mở rộng, và khả năng tùy chỉnh cao, JMeter cho phép người dùng tạo ra các kịch bản kiểm thử phức tạp và đáng tin cậy để đảm bảo chất lượng và hiệu suất của ứng dụng.

Trên đây mình đã giới thiệu và khái quát về JMeter và làm một demo đơn giản sử dụng nó. Bài viết dành cho những newbie như mình bắt đầu tìm hiểu về Jmeter. :D Ngoài ra, Demo ở trên chỉ là 1 ví dụ còn rất đơn giản, và còn rất nhiều các bài toán phức tạp khác liên quan đến authentication hay vượt qua bot của Google. Hy vọng gặp các bạn ở những bài blog tiếp theo. Xin chào!