JMeter và các thành phần trong Test plan

Tram Ho

1. Giới thiệu tool JMeter

  • JMeter là công cụ có thể test tải, test chức năng, test hồi quy… trên nhiều giao thức và các công nghệ khác nhau:

    • Web: HTTP, HTTPS
    • Web service: SOAP
    • Database với JDBC drivers
    • FTP service
  • JMeter là một ứng dụng Java desktop với giao diện đồ hoạ sử dụng Swing graphical API.
    Do đó nó có thể chạy trên bất kỳ môi trường / máy trạm nào chấp nhận một máy ảo Java,
    ví dụ như Windows, Linux, Mac, v.v .

  • Các tính năng của JMeter:

    • Vì là phần mềm Open Source nên luôn có sẵn các plugin phục vụ thiết kế test
      plan, giao diện trực quan, dễ sử dụng.
    • JMeter có thể tiến hành kiểm tra tải và hiệu suất cho nhiều loại máy chủ khác
      nhau – Web – HTTP, HTTPS, SOAP. Cơ sở dữ liệu thông qua JDBC, LDAP,
      JMS, Mail – POP3, v.v …
    • Nó là một công cụ không phụ thuộc vào platform. Trên Linux /Unix, JMeter
      có thể được gọi bằng cách nhấp vào tập lệnh shell JMeter. Trên Windows, nó
      có thể được gọi bằng cách run file jmeter.bat.
    • Nó có đầy đủ Swing và các thành phần hỗ trợ gọn nhẹ (precompiled JAR sử
      dụng các gói javax.swing . *).
    • JMeter lưu test plan của nó ở định dạng XML . Do đó cho có thể dùng text
      editor bất kỳ để generate test plan.
    • Khung đa luồng đầy đủ của nó cho phép lấy mẫu đồng thời bởi nhiều luồng
      và lấy mẫu đồng thời các chức năng khác nhau bằng các nhóm luồng riêng
      biệt
    • Jmeter có khả năng mở rộng cao.
  • Cách thức hoạt động: JMeter giả lập một nhóm người dùng gửi các yêu cầu tới một máy chủ và trả về các số liệu thống kê cho người dùng dưới dạng các báo cáo tóm tắt, bảng biểu và đồ thị dạng cây, đồ thị đồ họa, …
    Sơ đồ hoạt động của JMeter:

  • Môi trường để chạy JMeter:

2. Test plan và các thành phần trong test plan

  • Có 2 cách để tạo script với JMeter. Một là record từ thao tác người dùng trên hệ
    thống. Hai là tự tạo các request. Cách hai tương đối nhanh, không mất công chỉnh sửa
    nhưng để tự tạo request đúng và đủ thì đòi hỏi tester phải biết rõ các hàm POST, GET cùng các param, path tương ứng của từng chức năng.

  • Test plan chứa các test case. Nó định nghĩa các test case và làm thế nào để đi đến test case đó. Một testplan hoàn chỉnh bao gồm một hoặc nhiều yếu tố như thread groups, logic controllers, sample-generating controllers, listeners, timers, assertions, và configuration elements. Một testplan phải bao gồm ít nhất 1thread group.

  • User Defined Variables: cho phép định nghĩa các biến tĩnh, từ đó, cung cấp các giá trị lặp lại trong test của người dùng, như là tên server, cổng, … Ví dụ, nếu muốn test một ứng dụng trên server www.example.com, có thể định nghĩa một biến server với giá trị www.example.com. Giá trị này sẽ được thay bằng biến “${server}” ở bất kỳ vị trí nào trong test plan mà không cần phải liệt kê lại.

    • Tùy chọn Run Thread Groups consecutively (i.e. one at a time): Chạy liên tiếp (Chạy tuần tự từ trên xuống).
    • Run teardown Thread Groups after shutdown of main threads: Chạy tearDown Thread Group sau khi Thread Group shutdown.
    • Funtional test Mode (i.e. save Respone Data and Sampler Data): Lựa chọn này khiến Jmeter record dữ liệu trả lại từ server cho mỗi sample và ghi chúng ra file mà được chỉ ra ở Listener. Bạn có thể sử dụng button Configuration trên Listener để điều chỉnh những trường muốn save. Lựa
      chọn này có thể hữu ích nếu bạn muốn chạy debug để chắc chắn server của bạn trả về kết quả mong muốn.
    • Add directory or jar to classpath: Cho phép người dùng thêm vào các file JAR, hoặc các thư mục, trong trường hợp muốn tạo thêm các extension cho Jmeter. Tuy nhiên, cần lưu ý khởi động lại Jmeter khi có thay đổi. Ngoài ra, có thể sử dụng cách khác, đó là copy tất cả các file JAR vào thư mục lib của JMETER. Một cách khác nữa là cấu hình trong Jmeter properties file, Edit
      “#user.classpath=../classes;../jars/jar1 để thêm vào các thư viện.

2.1. Thread Group

  • Là thành phần bắt buộc phải có trong 1 Test Plan. Các thành phần trong Thread
    group sẽ kiểm soát số lượng Threads mà Jmeter sử dụng trong suốt quá trình test.
    ThreadGroup cho phép thiết lập:

    • Action to be takens after a Sample error: Hành động được thực hiện sau khi 1
      sample bị lỗi.
      Mặc định Jmeter để Continue – nghĩa là tiếp tục chạy các sample
      khác bỏ qua sample bị lỗi, Start Next Thread Loop – là chuyển sang vòng lặp
      tiếp theo, Stop Thread – Dừng Thread hiện tại, Stop test – Dừng hoàn toàn để
      kiểm tra lỗi trước khi chạy tiếp, Stop test Now – Dừng hoàn toàn việc test một
      cách đột ngột.
    • Number of thread (users): số lượng người dùng hệ thống
    • Ramp-up Period (in secords): Thời gian để máy client khởi tạo số Number of threads
    • Loop count: Số lần lặp, có thể chọn forever hoặc điền số lần cụ thể.
  • Cách tạo Thread group: click chuột phải vào Test plan -> Add -> Threads (Users) -> Thread group

2.2. Controllers

JMeter có 2 loại controllers: Samplers và Logical Controller, có tác dụng điều khiển thực hiện quá trình test.Với Samplers controller, có nhiệm vụ yêu cầu JMeter gửi các requests tới một server.

  • Samplers controller: Jmeter samplers cho phép định nghĩa các request có thể
    được gửi tới một server. Sampler có thể giả lập các request của người dùng tới
    target server. Mỗi Sampler sinh ra các mẫu kết quả (sample result), với rất
    nhiều các thuộc tính như hiệu năng, elapsed time, throughput, … Mặc định,
    Jmeter gửi các request theo thứ tự mà các Samplers xuất hiện trên cây. Tuy
    nhiên, trật tự xử lý các Sampler có thể được cấu hình mở rộng thêm với các
    Logic Controller. Các controllers có thể được sử dụng để chỉnh sửa số lần lặp
    của một sampler. Các JMeter samplers bao gồm: HTTP Request, FTP Request,
    JDBC Request, Java Request, SOAP/XML-RPC Request, WebService (SOAP)
    Request, LDAP Request, LDAP Extended Request, Access Log Sampler,
    BeanShell Sampler, BSF Sampler, TCP Sampler, JMS Publisher, JMS
    Subscriber, JMS Point-to-Point, JUnit Request, Mail Reader Sampler, Test
    Action. Có thể customize mỗi sampler bằng cách thiết lập các thuộc tính của hoặc thêm các Configuration Element.
  • Logic Controllers: Logic Controller cho phép bạn xử lý trật tự xử lý Samplers
    / Request trong một Thread . Logic Controllers sẽ quyết định “When & How”
    gửi yêu cầu đến một máy chủ web. Logic Controller mà Jmeter cung cấp:
    Simple Controller, Loop Controller, Once Only Controller, Interleave
    Controller, Random Controller, Random Order Controller, Throughput
    Controller, Runtime Controller, If Controller, While Controller, Switch
    Controller, ForEach Controller, Module Controller, Include Controller,
    Transaction Controller, Recording Controller. Một số logic controller thông
    dụng:

    • Interleave controller: Ứng dụng: Nếu 1 ThreadGroup có 5 user, thực hiện 2
      lần lặp. Trong Thread Group có interleave controller, với 2 element con của nó
      là A, hoặc B. Thì với mỗi user, các scope ngoài interleave controller được thực
      hiện bình thường, riêng interleave controller, với mỗi user, trong mỗi lần lặp,
      chỉ thực hiện 1 element con của nó (A hoặc B), lần thực hiện kế tiếp sẽ thực
      hiện element con tiếp theo của interleave controller, theo thứ tự (VD: Lần 1,
      thực hiện A, lần 2 thực hiện B, lần 3 lại thực hiện A, lần 4 thực hiện B, …)
    • Switch controller: Ứng dụng: Tương tự như interleave Controller, nhưng thay
      vì lần lượt thực hiện các phần tử con của nó, nó thực hiện 1 phần tử theo giá trị
      switch. VD: Trong phần tử switch, có các con là A0, A1, A2, …An. Giá trị
      switch sẽ lấy phần tử tương ứng trong mảng con (đánh số từ 0). Giá trị switch được chọn có thể là 1 số, cũng có thể là 1 biến, khi đó, giá trị của biến sẽ đưa ra phần tử được chọn thích hợp.
    • Random controller: Thực hiện tương tự như Interleave controller, điểm khác
      biệt nằm ở chỗ nó không thực hiện theo thứ tự tuần tự mà thực hiện 1 element
      con bất kỳ của nó.
    • Random order controller: Thực hiện tương tự như Simpler Controller, điểm
      khác biệt nằm ở chỗ nó sẽ thực hiện mỗi phần tử con 1 lần, nhưng thứ tự thực
      hiện các phần tử con là random.
    • Transaction Controller: Transaction Controller cho phép tạo ra các sampler
      bổ sung, các sampler này sẽ đo thời gian tổng thực hiện để test lồng các yếu tố
      với nhau. Có 2 option: Generate parent sample: chỉ generate các sample cha
      trong các listener, Include duration of timer and pre-post processors in
      generate sample: tùy chọn này sẽ generate cả timer, pre- and post-processing
      time delays trong sample controller.
    • Simple Controller: Các Simple Controller cho phép tổ chức các sampler đơn
      giản, không giống các controller khác, controller này không cung cấp chức
      năng ngoài của thiết bị lưu trữ.

2.3. Listener

Truy cập vào các thông tin Jmeter tập hợp về các testcase trong khi chạy và hiển
thị chúng dưới các dạng khác nhau như: graph, tree, table, …cho phép lưu giữ các
thông tin này dưới nhiều dạng file khác nhau như CSV, XML, txt, …Nó được add
vào bất cứ nơi nào trong testplan và chỉ thu thập dữ liệu từ thành phần cùng cấp hoặc cấp dưới nó… Một số Listener Jmeter cung cấp: Sample Result Save,
Configuration, Graph Full Results, Graph Results, Spline Visualizer, Assertion
Results, View Results Tree, Aggregate Report, View Results in Table, Simple
Data Writer, Monitor Results, Distribution Graph (alpha), Aggregate Graph,
Mailer Visualizer, BeanShell Listener, Summary Report.

2.4. Timer

Theo mặc định, một thread JMeter gửi các yêu cầu mà không cần tạm dừng giữa
các sample. Đây có thể không phải là điều bạn muốn. Bạn có thể thêm một Timer
cho phép bạn xác định khoảng thời gian chờ giữa mỗi request. Jmeter cung cấp
các loại Timer như sau: Constant Timer, Gaussian Random Timer, Uniform
Random Timer, Constant Throughput Timer, Synchronizing Timer, BeanShell
Time.

2.5. Assertions

Cho phép add một số kiểm tra để xác nhận phản hồi từ server . Sử dụng assertion
bạn có thể chứng minh rằng ứng dụng của bạn đang trả lại dữ liệu chính xác. Một
số assertion Jmeter cung cấp: Beanshell Assertion, BSF Assertion, Compare
Assertion, JSR223 Assertion, Response Assertion, Duration Assertion, Size
Assertion, XML Assertion, BeanShell Assertion, MD5Hex Assertion, HTML
Assertion, XPath Assertion, XML Schema Assertion.

2.6. Configuration Elements

Configuration Element cho phép người dùng tạo các giá trị mặc định và các biến
được sử dụng trong các Samplers. Chúng được sử dụng để add hoặc modify các
request tạo ra từ các Sampler. Trong scope của nó, 1 Configuration Element được
thực hiện đầu tiên, trước tất các Sampler trong cùng scope đó. Vì vậy, 1
Configuration Element chỉ được access trong nội bộ nhánh mà nó được đặt.
Jmeter cung cấp các loại Configuration Elements JMeter như sau: CSV Data Set
Config, FTP Request Defaults, HTTP Authorization Manager, HTTP Cookie
Manager, HTTP Proxy Server, HTTP Request Defaults, HTTP Header Manager,
Java Request Defaults, JDBC Connection Configuration, Login Config Element,
LDAP Request Defaults, LDAP Extended Request Defaults, TCP Sampler
Config, User Defned Variables, Simple Config Element.

2.7. Pre-processor Elements

Pre-processors cho phép chỉnh sửa các Samplers trong scope của nó. PreProcessor thường được sử dụng để chỉnh sửa thiết lập của một Sample Request
trước khi nó được chạy, hoặc update các variables không được extract từ các
response text. Danh sách các Pre-Processor Elements JMeter cung cấp: HTML
Link Parser, HTTP URL Re-writing Modifer, HTML Parameter Mask, HTTP
User Parameter Modifer, User Parameters, Counter, BeanShell PreProcessor.

2.8. Post-processor Elements

Post-processors được thực hiện sau khi một request vừa được tạo ra từ 1 Sampler.
Thông thường, Post processor được đặt làm con của một Sampler, để đảm bảo nó
được chạy chỉ sau Sampler đó, không liên quan tới các Sampler sau đó. Post Processor Element là đặc biệt hữu dụng để xử lý các response data, ví dụ như để
thu được các giá trị cụ thể cho các sử dụng về sau. Danh sách các Post-Processor
Elements mà JMeter cung cấp: Regular Expression Extractor, XPath Extractor,
Result Status Action Handler, Save Responses to a file, Generate Summary
Results, BeanShell PostProcessor.

2.9. CSV Data Set Config

Khi muốn run script với nhiều dữ liệu khác nhau bạn cần phải truyền dữ liệu vào
từ bên ngoài thì bạn cần sử dụng tới CSV Data Set Config. Để add đối tượng này,
chuột phải vào TestPlan > Add > Config Element > CSV Data Set Config:

Trong đó:

  • Filename: Tên file .csv hoặc .txt nếu file để trong thư mục Bin, nếu file để ở chỗ
    khác thì phải điền đầy đủ đường dẫn tới file. Mỗi bộ dữ liệu trong file là 1 dòng,
    mỗi thuộc tính là 1 cột trong đối với file csv. Đối với file .txt mỗi bộ dữ liệu là 1
    dòng, mỗi thuộc tính trong bộ tách nhau bằng dấu “,”.
  • Variable names: Tên các thuộc tính tương ứng trong file.
    Note: Đối tượng này chỉ có tác dụng cho các đối tượng cùng cấp hoặc cấp nhỏ
    hơn nó. Nếu trong script có sử dụng Loop Controller thì đối tượng này phải đặt
    trong Loop Controller.
Chia sẻ bài viết ngay

Nguồn bài viết : Viblo