JMeter Chuyển các biến giữa các nhóm chủ đề

Trong hướng dẫn JMeter này, chúng ta xem xét cách chúng ta có thể chia sẻ và chuyển các biến giữa các nhóm luồng.

Khi phát triển các tập lệnh JMeter nâng cao, rất có thể bạn sẽ có nhiều nhóm luồng. Mỗi nhóm chủ đề sẽ thực hiện các yêu cầu khác nhau.

Một ví dụ điển hình về điều này là khi chúng tôi cần xác thực người dùng bằng Bearer Tokens. Một nhóm luồng thực hiện xác thực và lưu mã thông báo. Một nhóm luồng khác cần truy cập mã thông báo này và sử dụng nó trong một yêu cầu khác.


Do đó, chúng ta cần một cơ chế để truyền các biến giữa các nhóm luồng.



Chuyển các biến giữa các nhóm chủ đề trong JMeter

Đối với ví dụ này, kế hoạch thử nghiệm của chúng tôi sẽ có hai nhóm luồng. Nhóm luồng đầu tiên thực hiện một yêu cầu GET tới một dịch vụ web. Sau đó chúng tôi sử dụng JSON Extractor plugin để phân tích cú pháp phản hồi JSON.


Sử dụng JSONPath, chúng tôi trích xuất giá trị cho một khóa cụ thể và lưu nó dưới dạng biến JMeter.

Đây là cách yêu cầu JMeter của chúng tôi trông như thế nào:

Kết quả của yêu cầu trên tạo ra phản hồi sau ở định dạng JSON:


và JSONPath của chúng tôi để trích xuất url đầu tiên trông giống như sau:

Giá trị của truy vấn JSONPath được lưu dưới dạng first_url. Biến này chỉ có thể truy cập trong cùng một nhóm luồng và chúng ta có thể lấy giá trị của nó bằng cách sử dụng ${first_url}. Bây giờ, chúng ta sẽ làm thế nào để biến này có thể truy cập được thông qua các nhóm luồng khác?


Câu trả lời là sử dụng BeanShell Assertion để lưu biến dưới dạng thuộc tính toàn cục. Bằng cách này, chúng ta có thể truyền các biến giữa các nhóm luồng.

Để thêm Xác nhận BeanShell, hãy nhấp chuột phải vào Kế hoạch kiểm tra> Thêm> Xác nhận> Xác nhận BeanShell

Trong Xác nhận BeanShell của chúng tôi, chúng tôi có thể nhập mã sau

${__setProperty(first_url, ${first_url})};


Bây giờ trong nhóm luồng 2, chúng ta có thể truy cập trực tiếp biến này bằng cách sử dụng ${__property(first_url)} như hình bên dưới:

Hoặc, chúng ta có thể sử dụng dấu BeanShell PreProcessor để thao tác với biến:


Trong BeanShell PreProcessor, chúng ta có thể truy cập biến được truyền vào từ một nhóm Thread khác bằng cách sử dụng props.get('name_of_variable'). Sau đó, chúng ta có thể thực hiện một số thao tác với chuỗi và lưu kết quả dưới dạng một biến mới.

Trong ví dụ trên, chúng ta loại bỏ dấu http:// từ biến được chuyển từ Nhóm chủ đề 1, và chúng tôi lưu kết quả dưới dạng biến host.

Biến host bây giờ là cục bộ của Nhóm chủ đề 2 và truy cập trực tiếp vào nó bằng cách sử dụng ${host} như hình bên dưới: