Bạn có thể thêm các điều kiện điều khiển luồng (vòng lặp, điều kiện, chờ, nhóm, v.v.) vào các kịch bản kiểm thử của mình. Điều này tăng cường khả năng sử dụng các kịch bản kiểm thử/cấu hình quy trình phức tạp hơn, cuối cùng giải quyết các thách thức kiểm thử của những kịch bản phức tạp thông qua các tính năng kiểm thử tự động.Vòng lặp For#
Khi bạn cần gửi một yêu cầu nhiều lần liên tiếp, sử dụng vòng lặp for là một cách tiếp cận hiệu quả. Dưới đây là cách sử dụng hiệu quả vòng lặp for trong các kịch bản kiểm thử Apidog của bạn:Thiết lập số lần lặp: Quyết định vòng lặp cần chạy bao nhiêu lần. Đây có thể là một số cố định hoặc một {{variable}}.
Thêm yêu cầu: Trong vòng lặp for, bạn có thể bao gồm một hoặc nhiều yêu cầu, cũng như các vòng lặp hoặc nhánh điều kiện khác. Tính linh hoạt này cho phép tạo các kịch bản kiểm thử phức tạp, trong đó nhiều hành động cần được kiểm thử theo trình tự.
Điều kiện Break If: Bạn có thể thêm điều kiện Break if vào vòng lặp for. Điều này sẽ kết thúc vòng lặp ngay lập tức nếu điều kiện được thỏa mãn. Bạn có thể kéo và điều chỉnh vị trí của Break if hoặc thậm chí thêm nhiều điều kiện Break if để xử lý các kịch bản khác nhau.
Xử lý On Error: Quản lý lỗi bằng cách thêm điều kiện On Error vào vòng lặp. Nếu xảy ra lỗi, các hành động được chỉ định sẽ được kích hoạt:Bỏ qua: Vòng lặp tiếp tục với yêu cầu tiếp theo.
Tiếp tục: Bỏ qua các yêu cầu còn lại trong chu kỳ hiện tại và chuyển sang lần lặp tiếp theo.
Ngắt thực thi: Dừng vòng lặp và tiếp tục với các yêu cầu tiếp theo bên ngoài vòng lặp.
Kết thúc thực thi: Dừng hoàn toàn toàn bộ kịch bản kiểm thử.
Điều kiện On Error được cố định ở đầu vòng lặp và không thể di chuyển.
Sử dụng chỉ mục vòng lặp trong yêu cầu#
Chỉ mục hiện tại của vòng lặp có thể được sử dụng như một biến cục bộ trong các yêu cầu để điều chỉnh động tham số hoặc body của yêu cầu. Để sử dụng tính năng này:1
Thêm một vòng lặp for và bao gồm một yêu cầu trong vòng lặp.
2
Nhấp vào biểu tượng đũa thần
🪄 trong tham số của yêu cầu và chọn "Retrieve pre-step data."
Tính năng "Retrieve pre-step data" chỉ khả dụng trong mô-đun "Tests" và không khả dụng trong mô-đun "APIs".
Khi sử dụng "Retrieve pre-step data", giá trị chỉ có thể được lấy khi toàn bộ kịch bản kiểm thử được chạy cùng nhau; không thể truy cập giá trị này khi chạy từng bước riêng lẻ.
3
Chọn tùy chọn vòng lặp, thường được gắn nhãn là "Loop n times."
4
Chọn "Current loop index."
5
Bạn sẽ nhận được một biến động như
{{$.5.index}}. Nhấp vào "Insert", và biến này sẽ được thay thế tại thời điểm chạy bằng chỉ mục của vòng lặp hiện tại, chẳng hạn như
0 hoặc
5.
Chỉ mục của vòng lặp luôn bắt đầu từ 0.
Vòng lặp ForEach#
Khi bạn có một mảng chứa nhiều phần tử (một danh sách nội dung cụ thể hoặc một danh sách thu được từ các bước trước), và bạn cần thực hiện cùng một thao tác trên từng mục trong danh sách (ví dụ: trước tiên lấy danh sách sản phẩm, sau đó thêm từng sản phẩm trong danh sách vào giỏ hàng), bạn cần sử dụng vòng lặp ForEach.Trong vòng lặp ForEach, các thao tác bên trong vòng lặp sẽ được thực thi cho từng phần tử trong mảng.Điểm khác biệt so với vòng lặp For là bạn không cần quan tâm đến số lần lặp; bạn chỉ cần tập trung vào nội dung của mảng vòng lặp.Thiết lập mảng vòng lặp: Trong vòng lặp ForEach, bạn cần thiết lập một mảng làm đối tượng vòng lặp. Bạn có thể sử dụng một biến hoặc nhập thủ công một mảng, chẳng hạn như ["a","b","c"].
Thêm yêu cầu: Trong vòng lặp ForEach, bạn có thể thêm một hoặc nhiều yêu cầu, hoặc thêm các vòng lặp hoặc nhánh điều kiện khác, v.v.
Điều kiện Break If và xử lý On Error: Bạn có thể thêm Break if và On error vào vòng lặp ForEach, nhất quán với vòng lặp for đã đề cập ở trên.
Trong cài đặt nâng cao của ForEach Loop, bạn cũng có thể tùy chỉnh các tùy chọn xử lý ngoại lệ cho Break If và On Error. Để biết thêm thông tin, hãy xem Quy tắc phán định.
Ví dụ sử dụng ForEach#
Xem xét hai endpoint: một endpoint để truy xuất danh sách thông tin thú cưng và một endpoint khác để lấy thông tin chi tiết của một thú cưng đơn lẻ. Nếu bạn cần lấy thông tin chi tiết của một thú cưng vừa được thêm vào danh sách, bạn có thể thiết lập kịch bản này bằng vòng lặp ForEach trong kiểm thử tự động của mình.1.
Bước đầu tiên bên ngoài vòng lặp ForEach sẽ là yêu cầu endpoint danh sách thông tin thú cưng để truy xuất dữ liệu danh sách thực tế. Thông thường, phản hồi của interface này chứa một mảng với thông tin cơ bản về nhiều thú cưng, chẳng hạn như ID và tên thú cưng.
2.
Thiết lập vòng lặp ForEach với mảng nguồn là một tập con của mảng thú cưng từ phản hồi của bước trước.
3.
Trong vòng lặp, thiết lập một yêu cầu đến endpoint "Get Pet Information" và sử dụng giá trị phần tử từ vòng lặp ForEach để điền tham số ID trong yêu cầu này.
Sử dụng phần tử vòng lặp trong yêu cầu#
Phần tử/chỉ mục hiện tại của vòng lặp có thể được sử dụng như một biến cục bộ trong các yêu cầu để điều chỉnh động tham số hoặc body của yêu cầu. Để sử dụng tính năng này:1
Thêm một vòng lặp ForEach và bao gồm một yêu cầu trong vòng lặp.
2
Nhấp vào biểu tượng
đũa thần trong tham số của yêu cầu và chọn "Retrieve pre-step data."
3
Chọn tùy chọn vòng lặp, thường được gắn nhãn là "Loop each element in
{{array}}."
4
Chọn "Current loop element." Bạn có thể sử dụng JSONPath để trích xuất thuộc tính của phần tử.
5
Bạn sẽ nhận được một biến động như
{{$.17.element}}. Nhấp vào "Insert", và biến này sẽ được thay thế tại thời điểm chạy bằng phần tử của vòng lặp hiện tại, tức là một phần tử của mảng vòng lặp.
Phần tử vòng lặp hiện tại: Hệ thống tự động trích xuất các phần tử từ mảng được chỉ định trong vòng lặp ForEach và lưu chúng vào biến được chỉ định. Khi bắt đầu mỗi lần lặp, biến này được cập nhật bằng giá trị của phần tử hiện tại từ mảng. Nếu phần tử là một object, bạn có thể sử dụng JSONPath để trích xuất một trường con cụ thể, chẳng hạn như {{$.1.element.data.name}}.Chỉ mục vòng lặp hiện tại: Chỉ mục của vòng lặp hiện tại được lưu trong biến này. Nó bắt đầu từ 0 và tăng thêm 1 ở đầu mỗi lần lặp tiếp theo, phản ánh chỉ mục hiện tại.
Khi bạn cần gửi các yêu cầu khác nhau dựa trên các kịch bản khác nhau, bạn có thể sử dụng câu lệnh If để thêm các nhánh điều kiện. Khi các điều kiện được chỉ định được đáp ứng, bước tương ứng sẽ được thực thi; nếu không, bước đó sẽ bị bỏ qua. Để biết thêm chi tiết cụ thể, vui lòng tham khảo Quy tắc phán định.Thiết lập câu lệnh If: Câu lệnh If hỗ trợ nhiều điều kiện như bằng, không bằng, chứa, không chứa, v.v. Cả hằng số và biến đều có thể được sử dụng ở hai phía của điều kiện.
Thêm yêu cầu: Có thể thêm nhiều yêu cầu trong một nhánh điều kiện, cũng như các vòng lặp hoặc nhánh điều kiện khác.
Thực thi nhánh điều kiện: Nếu các điều kiện được thiết lập trong cấu hình được đáp ứng, bước kiểm thử sẽ được thực thi; nếu không, bước đó sẽ bị bỏ qua.
Câu lệnh Else: Có thể thêm câu lệnh Else trong một nhánh điều kiện để xử lý các kịch bản khi điều kiện If không được đáp ứng.
Ví dụ sử dụng If#
Một chủ cửa hàng thú cưng, dựa trên trạng thái bán hàng của thú cưng từ ngày trước đó, cần thay đổi trạng thái bán hàng của một thú cưng thành "Sold" nếu thú cưng đó đã được bán. Ngược lại (else), họ cần kiểm tra danh sách thú cưng vẫn đang được bán.1.
Nhấp vào nút "Add Step" ở phía dưới và chọn "Conditional Branching."
2.
Nhập biến saleStatus thu được từ phản hồi yêu cầu API vào ô nhập sau "If" và chọn điều kiện "equals." Cuối cùng, nhập true làm giá trị so sánh.
3.
Di chuột qua thao tác nhánh điều kiện để xem tùy chọn " + Else". Nhấp vào đó để thêm bước "List of Pets for Sale" (trong trường hợp điều kiện không được đáp ứng, tức là để truy vấn danh sách thú cưng vẫn đang được bán).
Quy tắc phán định#
Khi sử dụng câu lệnh If trong một kịch bản kiểm thử, bạn có thể xác định các quy tắc điều kiện để kiểm soát việc thực thi kiểm thử. Nếu các điều kiện được đáp ứng, bước tương ứng sẽ chạy; nếu không, bước đó sẽ bị bỏ qua. Tương t ự, trong các thiết lập Break If cho vòng lặp ForEach và For, bạn có thể thiết lập các quy tắc phán định để kiểm soát luồng thực thi linh hoạt hơn.| Quy tắc | Mô tả |
|---|
| Bằng | Kiểm tra xem hai giá trị có bằng nhau hay không. |
| Không bằng | Kiểm tra xem hai giá trị có không bằng nhau hay không. |
| Tồn tại | Kiểm tra xem một trường hoặc biến có tồn tại hay không. |
| Không tồn tại | Kiểm tra xem một trường hoặc biến có không tồn tại hay không. |
| Nhỏ hơn | Kiểm tra xem một giá trị có nhỏ hơn giá trị khác hay không. |
| Nhỏ hơn hoặc bằng | Kiểm tra xem một giá trị có nhỏ hơn hoặc bằng giá trị khác hay không. |
| Lớn hơn | Kiểm tra xem một giá trị có lớn hơn giá trị khác hay không. |
| Lớn hơn hoặc bằng | Kiểm tra xem một giá trị có lớn hơn hoặc bằng giá trị khác hay không. |
| Khớp với Regex | Kiểm tra xem một chuỗi có khớp với biểu thức chính quy được chỉ định hay không. |
| Chứa | Kiểm tra xem một chuỗi hoặc mảng có chứa giá trị được chỉ định hay không. |
| Không chứa | Kiểm tra xem một chuỗi hoặc mảng có không chứa giá trị được chỉ định hay không. |
| Trống | Kiểm tra xem một trường, mảng hoặc biến có trống hay không. |
| Không trống | Kiểm tra xem một trường, mảng hoặc biến có không trống hay không. |
| Trong danh sách | Kiểm tra xem một giá trị có thuộc một danh sách được chỉ định hay không. |
| Không trong danh sách | Kiểm tra xem một giá trị có không thuộc một danh sách được chỉ định hay không. |
Khi thực hiện các kiểm tra điều kiện (chẳng hạn như lớn hơn, lớn hơn hoặc bằng, bằng hoặc không bằng), nếu các giá trị được so sánh là số nguyên hoặc chuỗi, hệ thống sẽ tự động chuyển đổi chuỗi thành số để so sánh chính xác. Ví dụ: nếu bạn so sánh chuỗi "18" với số 18, hệ thống sẽ chuyển đổi chuỗi "18" thành số 18 trước khi so sánh.Equals#
Kiểm tra xem hai giá trị có bằng nhau hay không. Nếu chúng bằng nhau, điều kiện được đáp ứng và bước kiểm thử sẽ được thực thi; nếu không, bước đó sẽ bị bỏ qua.Kịch bản: Kiểm tra xem tuổi người dùng được trích xuất từ bước trước có bằng 18 hay không.
Ví dụ điều kiện: {{$.5.response.body.data.age}} Equals 18
Hiệu quả thực thi thực tế: Nếu giá trị tuổi được trích xuất từ bước trước là 18 (chuỗi sẽ được tự động chuyển đổi thành số), bước sẽ được thực thi, chẳng hạn như hiển thị thông tin cụ thể hoặc thực hiện một số hành động nhất định.
Does not equal#
Kiểm tra xem hai giá trị có không bằng nhau hay không. Nếu chúng không bằng nhau, điều kiện được đáp ứng và bước kiểm thử sẽ được thực thi; nếu không, bước đó sẽ bị bỏ qua.Kịch bản: Kiểm tra xem trạng thái đơn hàng được trích xuất từ bước trước có không bằng "Paid" hay không.
Ví dụ điều kiện: {{$.4.response.body.data.status}} Does not equal Paid
Hiệu quả thực thi thực tế: Nếu trạng thái đơn hàng được trích xuất từ bước trước là một giá trị khác (chẳng hạn như "Pending" hoặc "Shipped"), bước sẽ được thực thi.
Exists#
Kiểm tra xem một trường hoặc biến nhất định có tồn tại hay không. Nếu tồn tại, điều kiện được đáp ứng và bước sẽ được thực thi; nếu không, bước đó sẽ bị bỏ qua.Kịch bản: Kiểm tra xem trường email có tồn tại trong dữ liệu người dùng được trích xuất từ bước trước hay không.
Ví dụ điều kiện: {{$.3.response.body.data.email}} Exists
Hiệu quả thực thi thực tế: Nếu trường email có trong dữ liệu người dùng được trích xuất từ bước trước, bước sẽ được thực thi.
Does not exist#
Kiểm tra xem một trường hoặc biến nhất định có không tồn tại hay không. Nếu không tồn tại, điều kiện được đáp ứng và bước sẽ được thực thi; nếu không, bước đó sẽ bị bỏ qua.Kịch bản: Kiểm tra xem trường phone có không tồn tại trong dữ liệu người dùng được trích xuất từ bước trước hay không.
Ví dụ điều kiện: {{$.2.response.body.data.phone}} Does not exist
Hiệu quả thực thi thực tế: Nếu trường phone vắng mặt trong dữ liệu người dùng được trích xuất từ bước trước, bước sẽ được thực thi.
Less Than#
Kiểm tra xem một giá trị có nhỏ hơn giá trị khác hay không. Nếu đúng, điều kiện được đáp ứng và bước sẽ được thực thi; nếu không, bước đó sẽ bị bỏ qua.Kịch bản: Kiểm tra xem lượng tồn kho sản phẩm được trích xuất từ bước trước có nhỏ hơn 10 hay không.
Ví dụ điều kiện: {{$.1.response.body.data.stock}} Less Than 10
Hiệu quả thực thi thực tế: Nếu giá trị tồn kho được trích xuất từ bước trước là 8, điều kiện được đáp ứng và bước sẽ được thực thi.
Less than or equal#
Kiểm tra xem một giá trị có nhỏ hơn hoặc bằng giá trị khác hay không. Nếu đúng, điều kiện được đáp ứng và bước sẽ được thực thi; nếu không, bước đó sẽ bị bỏ qua.Kịch bản: Kiểm tra xem tuổi được trích xuất từ bước trước có nhỏ hơn hoặc bằng 12 hay không.
Ví dụ điều kiện: {{$.2.response.body.data.age}} Less than or equal 12
Hiệu quả thực thi thực tế: Nếu giá trị tuổi được trích xuất từ bước trước là 10, điều kiện được đáp ứng và bước sẽ được thực thi.
Greater than#
Kiểm tra xem một giá trị có lớn hơn giá trị khác hay không. Nếu đúng, điều kiện được đáp ứng và bước sẽ được thực thi; nếu không, bước đó sẽ bị bỏ qua.Kịch bản: Kiểm tra xem số tiền đơn hàng được trích xuất từ bước trước có lớn hơn 1000 hay không.
Ví dụ điều kiện: {{$.1.response.body.data.amount}} Greater than 1000
Hiệu quả thực thi thực tế: Nếu giá trị số tiền đơn hàng được trích xuất từ bước trước là 1105, điều kiện được đáp ứng và bước sẽ được thực thi.
Greater than or equal#
Kiểm tra xem một giá trị có lớn hơn hoặc bằng giá trị khác hay không. Nếu đúng, điều kiện được đáp ứng và bước sẽ được thực thi; nếu không, bước đó sẽ bị bỏ qua.Kịch bản: Kiểm tra xem điểm của người dùng được trích xuất từ bước trước có lớn hơn hoặc bằng 500 hay không.
Ví dụ điều kiện: {{$.3.response.body.data.points}} Greater than or equal 500
Hiệu quả thực thi thực tế: Nếu giá trị điểm được trích xuất từ bước trước là 600, điều kiện được đáp ứng và bước sẽ được thực thi.
Matches with Regex#
Kiểm tra xem một chuỗi có khớp với một biểu thức chính quy được chỉ định hay không. Nếu khớp, điều kiện được đáp ứng và bước sẽ được thực thi; nếu không, bước đó sẽ bị bỏ qua.Kịch bản: Kiểm tra xem định dạng email được trích xuất từ bước trước có chính xác hay không.
Ví dụ điều kiện: {{$.2.response.body.data.email}} Matches with Regex /^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$/i
Hiệu quả thực thi thực tế: Nếu định dạng email được trích xuất từ bước trước khớp với biểu thức chính quy (ví dụ: test@gmail.com), bước sẽ được thực thi.
Biểu thức chính quy nên được viết bằng cú pháp "literal", trong đó mẫu được đặt trong /, với các modifier tùy chọn (ví dụ: g cho khớp toàn cục, i cho không phân biệt chữ hoa chữ thường) được thêm vào cuối. Để biết thêm thông tin về cách viết biểu thức chính quy, bạn có thể tham khảo tài liệu MDN. Contains#
Kiểm tra xem một chuỗi hoặc mảng có chứa một giá trị được chỉ định hay không. Nếu có, điều kiện được đáp ứng và bước sẽ được thực thi; nếu không, bước đó sẽ bị bỏ qua.Kịch bản: Kiểm tra xem danh sách vai trò người dùng được trích xuất từ bước trước có chứa vai trò "admin" hay không.
Ví dụ điều kiện: {{$.3.response.body.data.roles}} Contains admin
Hiệu quả thực thi thực tế: Nếu danh sách vai trò được trích xuất từ bước trước chứa "admin", bước sẽ được thực thi.
Does not contain#
Kiểm tra xem một chuỗi hoặc mảng có không chứa một giá trị được chỉ định hay không. Nếu không chứa, điều kiện được đáp ứng và bước sẽ được thực thi; nếu không, bước đó sẽ bị bỏ qua.Kịch bản: Kiểm tra xem giỏ hàng của người dùng được trích xuất từ bước trước có không chứa một sản phẩm nhất định hay không.
Ví dụ điều kiện: {{$.4.response.body.data.cartItems}} Does not contain productId123
Hiệu quả thực thi thực tế: Nếu mảng giỏ hàng được trích xuất từ bước trước không chứa sản phẩm productId123, bước sẽ được thực thi.
Is empty#
Kiểm tra xem một trường, mảng hoặc biến có trống hay không. Nếu trống, điều kiện được đáp ứng và bước sẽ được thực thi; nếu không, bước đó sẽ bị bỏ qua.Kịch bản: Kiểm tra xem trường ghi chú được trích xuất từ bước trước có trống hay không.
Ví dụ điều kiện: {{$.2.response.body.data.remarks}} Is empty
Hiệu quả thực thi thực tế: Nếu trường ghi chú được trích xuất từ bước trước trống, bước sẽ được thực thi.
Is not Empty#
Kiểm tra xem một trường, mảng hoặc biến có không trống hay không. Nếu không trống, điều kiện được đáp ứng và bước sẽ được thực thi; nếu không, bước đó sẽ bị bỏ qua.Kịch bản: Kiểm tra xem ghi chú đơn hàng được trích xuất từ bước trước đã được điền hay chưa.
Ví dụ điều kiện: {{$.1.response.body.data.orderRemarks}} Is not Empty
Hiệu quả thực thi thực tế: Nếu ghi chú đơn hàng được trích xuất từ bước trước không trống, bước sẽ được thực thi.
In List#
Kiểm tra xem một giá trị có thuộc một danh sách được chỉ định hay không. Nếu có, điều kiện được đáp ứng và bước sẽ được thực thi; nếu không, bước đó sẽ bị bỏ qua.Kịch bản: Kiểm tra xem sản phẩm do người dùng chọn được trích xuất từ bước trước có nằm trong danh sách sản phẩm được đề xuất hay không.
Ví dụ điều kiện: {{$.3.response.body.data.productId}} In List ["prod123", "prod456", "prod789"]
Hiệu quả thực thi thực tế: Nếu ID sản phẩm được trích xuất từ bước trước là "prod456", bước sẽ được thực thi.
Trong Apidog, khi nhập danh sách, mỗi phần tử nên được nhập riêng và phân tách bằng cách nhấn phím Enter.
Not in List#
Kiểm tra xem một giá trị có không thuộc một danh sách được chỉ định hay không. Nếu không thuộc, điều kiện được đáp ứng và bước sẽ được thực thi; nếu không, bước đó sẽ bị bỏ qua.Kịch bản: Kiểm tra xem mã khuyến mãi do người dùng nhập được trích xuất từ bước trước có không nằm trong danh sách các mã khuyến mãi đã sử dụng hay không.
Ví dụ điều kiện: {{$.4.response.body.data.promoCode}} Not in List ["usedCode1", "usedCode2"]
Hiệu quả thực thi thực tế: Nếu mã khuyến mãi được trích xuất từ bước trước là "newPromo", điều kiện được đáp ứng và bước sẽ được thực thi; nếu không, bước đó sẽ bị bỏ qua.
Nhóm#
Khi nhiều bước trong quy trình kiểm thử có liên quan với nhau, chúng có thể được nhóm lại để phân loại. Bằng cách nhóm các bước kiểm thử, bạn nâng cao khả năng đọc và khả năng thao tác của kịch bản kiểm thử.Chờ#
Khi một bước nhất định trong quy trình kiểm thử cần chờ một khoảng thời gian trước khi thực thi, bạn có thể thêm điều kiện chờ để giải quyết điều này.Ví dụ sử dụng Chờ#
Mô phỏng người dùng xem chi tiết thú cưng và cập nhật trạng thái duyệt thông tin thú cưng sau khi duyệt trong 1000ms.1.
Nhấp vào nút "Add Step" ở phía dưới và chọn "Wait."
2.
Nhập thời gian cần chờ, 1000 (tính bằng mili giây).
Khi bạn sử dụng điều khiển luồng kiểm thử, báo cáo kiểm thử sẽ không hiển thị các bước như If, for, v.v., mà chỉ hiển thị các yêu cầu thực tế đã được thực thi, được liệt kê tuyến tính theo thứ tự thực thi.