Việc dùng regular expression extractor trong JMeter có thể đã quá quen thuộc với mọi người. Tuy nhiên vẫn còn nhiều bạn làm sai nên mình phải viết lại bài này để có thể nói thật tường tận.
Cơ bản cách dùng của nó đã được a Vũ Trần viết tường tận ở đây. Regular Expression Extractor in JMeter – JMeter VN. Mình sẽ không nhắc lại nữa, mình chỉ lưu ý các bạn mấy điểm sau đây.
Nội dung bài viết
I. Nơi sử dụng
Regex Extractor thường được dùng nếu bạn extract từ plain text (text ko có cấu trúc). Nó không phải là các dạng JSON, XML. Nếu là JSON thì dùng JSON extractor, còn XML thì dùng XPath Extractor thì sẽ dễ hơn rất nhiều. Mình cũng hay dùng regex với HTML.
II. Cách lấy text khi có “chặn đầu”, “chặn đuôi”
Ví dụ bạn có text sau:
<input type="hidden" name="_csrf" value="8adf2ea1"/>
Bạn muốn lấy text 8adf2ea1
thì bạn sẽ dùng regex value="(.+?)"
Chặn đầu của nó sẽ là value="
, còn chặn đuôi là "
, cái bạn cần lấy nó sẽ tương ứng với (+?)
Xin phép lấy hình bên blog https://jmetervn.com/ để minh họa cho dễ.
III. Cách lấy text khi chỉ có chặn đầu, không có chặn đuôi.
Ví dụ bạn có đoạn text như sau:
Bạn muốn lấy đoạn text text/html; charset=UTF-8
mà bạn dùng regex là content-type: (.+?)
là bạn sẽ lấy sai đấy.
Nó chỉ lấy được đúng 1 chữ t
thôi, nó không lấy được toàn bộ đâu.
Regex đúng trong TH này sẽ là: content-type: (.+)
IV. Vì sao lại như vậy?
(.+?)
: có nghĩa là match bất cứ ký tự nào (trừ ký tự xuống dòng) và ít nhất có thể.(.+)
: có nghĩa là match bất cứ ký tự nào (trừ ký tự xuống dòng) và nhiều nhất có thể.
Mình lấy thêm 1 ví dụ nữa để các bạn dễ hình dung. Trong đoạn text dưới đây mình có 2 dấu chấm phẩy ;
content-type: text/html; charset=UTF-8;
content-type: (.+?);
sẽ match ít nhất:text/html
. Nó nhìn thấy cái dấu chấm phẩy;
đầu tiên là nó dừng lại vì nó duyệt từ trái sang phải (Reluctant)content-type: (.+);
sẽ match nhiều nhất:text/html; charset=UTF-8
. Nó thấy dấu chấm phảy cuối cùng thì nó dừng lại vì nó duyệt từ phải sang trái. (Greedy)
Nếu bạn không có tí kiến thức gì về regex, đọc tạm bài này của mình.
V. Kết luận
Regex rất hay và cũng rất khó, với 2 TH trên mình nghĩ là đủ cover 99% các case bạn gặp trong JMeter rồi. Nếu thấy bài viết hữu ích, giúp đỡ cho bạn được ít nhiều, hãy like động viên. Nếu bạn thấy bài này cũng bình thường thôi, thì… cứ like 1 phát, mất gì của bạn đâu. =)))) Hẹn gặp lại bạn ở bài tiếp theo.