NỘI DUNG BÀI HỌC
✅ Cấu trúc cơ bản của Regex
✅ Regular Expression Extractor
✅ Ví dụ minh họa
📘 Regular Expression Extractor
1. Regex là gì?
-
Regex (Regular Expression): Cú pháp đặc biệt dùng để tìm kiếm, so khớp và xử lý chuỗi văn bản.
Ứng dụng: kiểm tra dữ liệu nhập (validation), tìm kiếm nâng cao, thay thế chuỗi, trích xuất dữ liệu từ log/file.
2. Cấu trúc cơ bản của Regex
-
Ký tự thường: khớp chính xác ký tự.
-
Ví dụ:
abc
khớp với "abc".
-
-
Metacharacters (ký tự đặc biệt):
Ký hiệu Ý nghĩa Ví dụ .
Bất kỳ ký tự nào a.c
khớp "abc", "a1c"^
Bắt đầu chuỗi ^Hello
khớp "Hello world"$
Kết thúc chuỗi world$
khớp "Hello world"*
Lặp lại 0 hoặc nhiều lần ab*
khớp "a", "abbb"+
Lặp lại 1 hoặc nhiều lần ab+
khớp "ab", "abbb"?
0 hoặc 1 lần colou?r
khớp "color", "colour"{n}
Lặp đúng n lần \d{3}
khớp "123"{n,m}
Lặp từ n đến m lần a{2,4}
khớp "aa", "aaa", "aaaa"[]
Một ký tự trong tập [abc]
khớp "a", "b", "c"` ` OR (hoặc) ()
Nhóm (abc)+
khớp "abcabc" - Nhóm ký tự viết tắt
Ký hiệu Ý nghĩa Ví dụ \d
Chữ số (0-9) \d\d
→ "12"\w
Ký tự chữ/số/ _
\w+
→ "abc123"\s
Khoảng trắng \s
→ " " hoặc\t
\D
Không phải số \D
→ "a"\W
Không phải ký tự chữ/số \W
→ "!"\S
Không phải khoảng trắng \S
→ "a"
3. Regular Expression Extractor
a. Khái niệm
-
Regular Expression Extractor là một Post-Processor trong JMeter.
-
Chức năng: trích xuất dữ liệu từ response (HTML, JSON, XML, text…) dựa vào biểu thức Regex.
- Dữ liệu trích xuất có thể được lưu vào biến và sử dụng cho các request tiếp theo.
- Thêm Regular Expression Extractor vào request cần bắt dữ liệu
(Right click → Add → Post Processors → Regular Expression Extractor).
b. Các trường cấu hình chính
Khi thêm Regular Expression Extractor, bạn sẽ thấy các trường:
Trường | Ý nghĩa |
---|---|
Name | Tên của Extractor (tuỳ chọn). |
Apply to | Áp dụng cho: Main sample, Sub-samples, Both… |
Field to check | Chọn nội dung cần so khớp: Response Body, Headers, URL, Response Code, Response Message. |
Reference Name | Tên biến lưu giá trị trích xuất (ví dụ: sessionId ). |
Regular Expression | Biểu thức Regex để trích xuất. |
Template | Chỉ định nhóm (group) nào trong regex được lưu, thường là $1$ . |
Match No. | Chọn kết quả nào nếu có nhiều kết quả khớp: 1 = kết quả đầu tiên, -1 = tất cả. |
Default Value | Giá trị mặc định nếu không tìm thấy kết quả. |
4. Ví dụ
Câu 1 – JSON Response
Response:
{
"status": "success",
"user": {
"id": 12345,
"username": "john_doe",
"email": "john@example.com"
},
"auth": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
"expires_in": 3600
}
}
Cần trích xuất giá trị token.
Regex nào đúng?
A. "token": "(.*?)"
B. "username": "(.*?)"
C. "token":\s*"(.*?)"
D. "id": (\d+)
✅ Đáp án: C
- A: Sai vì không xử lý khoảng trắng
- B: Sai vì lấy username
- C: Đúng, lấy giá trị token bất kể khoảng trắng
- D: Sai vì trích số id
Câu 2 – HTML Response
Response:
<!DOCTYPE html>
<html>
<head>
<title>Dashboard</title>
</head>
<body>
<h1>Welcome back, John Doe!</h1>
<div class="menu">
<a href="/profile/12345">My Profile</a>
<a href="/orders/ORD998877">My Orders</a>
<a href="/logout">Logout</a>
</div>
<footer>© 2025 Example Corp</footer>
</body>
</html>
Muốn trích số 12345.
- href="(.*?)"
B. /profile/(\d+)
C. <h1>(.*?)</h1>
D. \d+
✅ Đáp án: B
- A: Sai vì lấy cả /profile/12345
- B: Đúng, match chính xác số trong URL
- C: Sai vì lấy text trong <h1>
- D: Sai vì \d+ có thể match nhầm số khác
Câu 3 – XML Response
<response>
<status>success</status>
<transaction>
<id>TXN5566778899</id>
<amount currency="USD">2500.75</amount>
<method>CreditCard</method>
<timestamp>2025-09-10T14:25:30Z</timestamp>
</transaction>
</response>
Trích số 987654.
B. <amount>(.*?)</amount>
C. status>(.*?)<
D. <id>\d+</id>
✅ Đáp án: A
- A: Đúng, lấy nội dung trong <id>
- B: Sai vì lấy amount
- C: Sai vì không liên quan
- D: Sai vì không có group ( ) để lấy số
Câu 4 – Header
HTTP/1.1 200 OK
Date: Tue, 10 Sep 2025 08:30:00 GMT
Server: Apache/2.4.41 (Ubuntu)
Content-Type: application/json; charset=UTF-8
Set-Cookie: SESSIONID=qwerty123abc; Path=/; Secure; HttpOnly
Cache-Control: no-cache, no-store, must-revalidate
Content-Length: 245
Connection: keep-alive
Trích qwerty123abc
B. Set-Cookie: (.*?)
C. Path=(.*?)
D. SESSION=(.*)
✅ Đáp án: A
- A: Đúng vì lấy giá trị giữa SESSION= và ;
- B: Sai vì lấy toàn bộ header
- C: Sai vì match Path=/
- D: Sai vì greedy, ăn hết
Câu 5 – Body Text
Order confirmed! Your order ID is #ORD2025001.
Trích ORD2025001
A. #(.*?)\.B. ORD\d+
C. order ID is #(.*?)\.
D. #ORD(\d+)
✅ Đáp án: D
- A: Sai vì dính dấu chấm cuối
- B: Sai vì có thể nhầm ORD khác
- C: Sai vì vẫn dính dấu .
- D: Đúng vì match ORD + số, bỏ dấu #
5. Kết luận & Bài tập thêm
- Regular Expression Extractor là công cụ quan trọng để xử lý dữ liệu động trong test script.
- Học viên nên luyện tập với JSON, HTML, XML, Header, Body text.
- Thực hành với Match No. = -1 để lấy nhiều giá trị.