Robot Framework có một lập trường khác biệt so với các công cụ ưu tiên mã (code-first). Thay vì viết các bài kiểm tra dưới dạng mã chương trình, bạn viết chúng dưới dạng các bảng từ khóa dễ đọc. Một bài kiểm tra gần giống như một danh sách kiểm tra, điều đó có nghĩa là các nhà phân tích QA và kỹ sư có thể tạo và xem xét cùng một bộ. Đối với thử nghiệm API, RequestsLibrary biến các cuộc gọi HTTP thành các từ khóa dễ đọc tương tự.
Hướng dẫn này chỉ ra cách tự động hóa các bài kiểm tra API bằng Robot Framework từ đầu đến cuối. Bạn sẽ cài đặt framework và các thư viện cần thiết, viết bài kiểm tra điều khiển bằng từ khóa đầu tiên của mình, quản lý các phiên trên các yêu cầu, xác nhận mã trạng thái và nội dung JSON, và xây dựng các từ khóa có thể tái sử dụng để bộ kiểm tra có thể mở rộng. Mỗi ví dụ đều là cú pháp bảng từ khóa mà Robot Framework thực sự sử dụng.
Robot Framework là gì và tại sao nó phù hợp với thử nghiệm API
Robot Framework là một framework tự động hóa mã nguồn mở, đa năng dành cho tự động hóa kiểm thử và tự động hóa quy trình robot. Tính năng nổi bật của nó là cú pháp điều khiển bằng từ khóa: các bài kiểm tra được viết trong các bảng đơn giản, và các hành vi phức tạp được xây dựng từ các thư viện từ khóa được triển khai bằng Python hoặc Java.
Đối với thử nghiệm API, điều này có hai lợi thế thực sự. Thứ nhất, các bài kiểm tra có thể đọc được bởi những người không biết lập trình, vì vậy một người kiểm thử hoặc chủ sở hữu sản phẩm có thể theo dõi những gì một bộ kiểm thử đang xác minh. Thứ hai, framework có thể mở rộng: RequestsLibrary gói thư viện requests của Python và hiển thị các hoạt động HTTP dưới dạng từ khóa, trong khi các thư viện khác bao gồm JSON, cơ sở dữ liệu, v.v. Nếu cấu trúc điều khiển bằng từ khóa là mới đối với bạn, hướng dẫn framework kiểm thử tự động rộng hơn của chúng tôi giải thích vị trí của nó giữa các loại framework khác.
Cài đặt Robot Framework và các thư viện của nó
Robot Framework và các thư viện của nó được cài đặt thông qua pip. Làm việc trong môi trường ảo để giữ cho dự án gọn gàng:
python -m venv .venv
source .venv/bin/activate
pip install robotframework
pip install robotframework-requests
pip install robotframework-jsonlibrary
Ba gói này đáp ứng hầu hết các nhu cầu kiểm thử API:
robotframeworklà công cụ cốt lõi và trình chạy kiểm thử.robotframework-requests(RequestsLibrary) gửi các yêu cầu HTTP dưới dạng từ khóa.robotframework-jsonlibrarytrích xuất và xác minh các giá trị bên trong phản hồi JSON.
Xác nhận cài đặt bằng lệnh robot --version. Hướng dẫn sử dụng Robot Framework chính thức là tài liệu tham khảo cho các câu hỏi về cú pháp khi bộ kiểm thử của bạn phát triển.
Một chi tiết gây khó khăn cho người mới: Robot Framework nhạy cảm với khoảng trắng. Các từ khóa và đối số của chúng được phân tách bằng ít nhất hai khoảng trắng, không phải một. Một khoảng trắng duy nhất được coi là một phần của cùng một mã thông báo. Hầu hết các trình soạn thảo có plugin Robot Framework sẽ xử lý điều này cho bạn, nhưng nếu một bài kiểm tra không thể phân tích cú pháp, đối số sai khoảng trắng là điều đầu tiên cần kiểm tra.
Viết bài kiểm tra API đầu tiên của bạn
Các tệp kiểm thử của Robot Framework sử dụng phần mở rộng .robot và được chia thành các phần được đánh dấu bằng *** Settings ***, *** Variables ***, và *** Test Cases ***. Dưới đây là một tệp hoàn chỉnh kiểm tra một endpoint người dùng:
*** Settings ***
Library RequestsLibrary
Library Collections
*** Variables ***
${BASE_URL} https://api.example.com/v1
*** Test Cases ***
Get User Returns 200
Create Session api ${BASE_URL}
${response}= GET On Session api /users/42
Status Should Be 200 ${response}
Get User Returns Expected Email
Create Session api ${BASE_URL}
${response}= GET On Session api /users/42
${body}= Set Variable ${response.json()}
Should Be Equal As Integers ${body}[id] 42
Should Be Equal ${body}[status] active
Phần *** Settings *** nhập các thư viện. Create Session mở một phiên HTTP có tên. GET On Session gửi yêu cầu và trả về một đối tượng phản hồi. Status Should Be và Should Be Equal là các từ khóa xác nhận. Chạy bộ kiểm thử với robot tests.robot, và Robot Framework sẽ tự động tạo một báo cáo HTML và nhật ký.
Làm việc với các phiên
Create Session không chỉ lưu trữ một URL cơ sở. Phiên giữ các tiêu đề mặc định, xác thực và cookie, vì vậy mọi yêu cầu được thực hiện trên đó đều kế thừa trạng thái đó. Điều này quan trọng đối với bất kỳ API nào yêu cầu đăng nhập, bởi vì bạn xác thực một lần và sử dụng lại phiên đó.
*** Test Cases ***
Create Order With Authenticated Session
Create Session api ${BASE_URL}
${login}= POST On Session api /auth/login
... json={"email": "qa@example.com", "password": "test-pass"}
${token}= Set Variable ${login.json()}[token]
${headers}= Create Dictionary Authorization=Bearer ${token}
${order}= POST On Session api /orders
... json={"product_id": 7, "quantity": 2}
... headers=${headers}
Status Should Be 201 ${order}
Cú pháp ... tiếp tục một lệnh gọi từ khóa sang dòng tiếp theo, giúp các yêu cầu dài dễ đọc hơn. Create Dictionary xây dựng bản đồ tiêu đề. Vì phiên được duy trì, bạn có thể thực hiện một số yêu cầu tiếp theo mà không cần tạo lại nó. Các từ khóa RequestsLibrary cho các phiên được ghi lại trong tài liệu tham khảo RequestsLibrary.
Xác nhận các nội dung phản hồi
Kiểm tra mã trạng thái là bước đầu tiên. Để xác minh nội dung, hãy phân tích cú pháp JSON và xác nhận các trường của nó. Các từ khóa tích hợp của Robot Framework bao gồm sự bằng nhau và chứa, và JSONLibrary bổ sung tính năng trích xuất dựa trên đường dẫn:
*** Settings ***
Library RequestsLibrary
Library JSONLibrary
Library Collections
*** Variables ***
${BASE_URL} https://api.example.com/v1
*** Test Cases ***
Order Response Has Correct Shape
Create Session api ${BASE_URL}
${response}= POST On Session api /orders
... json={"product_id": 7, "quantity": 2}
Status Should Be 201 ${response}
${body}= Set Variable ${response.json()}
Dictionary Should Contain Key ${body} total
Should Be Equal As Integers ${body}[quantity] 2
${status}= Get Value From Json ${body} $.status
Should Be Equal ${status}[0] pending
Dictionary Should Contain Key xác nhận một trường tồn tại. Should Be Equal As Integers so sánh các giá trị số mà không gặp lỗi không khớp kiểu dữ liệu. Get Value From Json sử dụng biểu thức JSONPath để truy cập dữ liệu lồng nhau. Để có tập hợp kiểm tra rộng hơn đáng giá để chạy trên phản hồi API, hướng dẫn của chúng tôi về xác nhận API là một tài liệu hữu ích.
Xây dựng các từ khóa có thể tái sử dụng
Lặp lại Create Session và luồng đăng nhập trong mỗi bài kiểm tra là tương đương với việc sao chép-dán trong phương pháp điều khiển bằng từ khóa. Robot Framework cho phép bạn định nghĩa các từ khóa của riêng mình trong phần *** Keywords ***, vì vậy các bước phổ biến trở thành các dòng đơn giản dễ đọc:
*** Keywords ***
Authenticate And Open Session
Create Session api ${BASE_URL}
${login}= POST On Session api /auth/login
... json={"email": "qa@example.com", "password": "test-pass"}
${token}= Set Variable ${login.json()}[token]
Set Suite Variable ${AUTH_HEADERS} Bearer ${token}
*** Test Cases ***
Create Order
Authenticate And Open Session
${headers}= Create Dictionary Authorization=${AUTH_HEADERS}
${order}= POST On Session api /orders
... json={"product_id": 7, "quantity": 2} headers=${headers}
Status Should Be 201 ${order}
Các từ khóa tùy chỉnh là cách một bộ kiểm thử Robot Framework duy trì được khả năng bảo trì. Khi endpoint đăng nhập thay đổi, bạn chỉ cần chỉnh sửa một từ khóa thay vì mọi bài kiểm thử. Đối với các bộ kiểm thử lớn hơn, hãy chuyển các từ khóa dùng chung vào một tệp tài nguyên và nhập nó, cùng nguyên tắc mô-đun được mô tả trong hướng dẫn của chúng tôi về viết tập lệnh kiểm thử tự động.
Một tệp tài nguyên là một tệp .robot không có các trường hợp kiểm thử, chỉ có các phần *** Keywords *** và *** Variables ***. Bạn nhập nó từ một tệp kiểm thử với Resource common.robot trong cài đặt. Điều này giữ cho luồng đăng nhập, URL cơ sở và các phần dùng chung khác ở một nơi. Khi dự án phát triển, một bố cục điển hình có một tệp tài nguyên cho mỗi khu vực API cộng với một tệp cấp cao nhất cho thiết lập chung. Việc tách biệt các trường hợp kiểm thử khỏi logic hỗ trợ là cốt lõi của cấu trúc điều khiển bằng từ khóa, và hướng dẫn framework kiểm thử tự động rộng hơn của chúng tôi giải thích tại sao nó có thể mở rộng.
Chạy Robot Framework trong CI
Robot Framework chạy ở chế độ không giao diện (headless) và trả về mã thoát khác 0 khi thất bại, đây chính xác là những gì một pipeline cần để đánh dấu một bản build là thất bại. Trình chạy cũng ghi các tệp output.xml, log.html, và report.html sau mỗi lần chạy, vì vậy các artifact CI có sẵn mà không cần cấu hình bổ sung.
Một vài cờ giúp các lần chạy CI gọn gàng hơn. Sử dụng --outputdir để gửi báo cáo đến một thư mục đã biết, --include và --exclude với các thẻ để chạy các tập con, và các tệp biến hoặc --variable để đưa các giá trị cụ thể của môi trường như URL cơ sở và thông tin đăng nhập mà không cần chỉnh sửa tệp kiểm thử:
robot --outputdir results --variable BASE_URL:https://staging.example.com/v1 tests/
Gắn thẻ cho các bài kiểm thử của bạn bằng [Tags] để bạn có thể chạy một bộ kiểm tra nhanh (smoke test) trên mỗi commit và toàn bộ bộ kiểm thử hàng đêm. Việc tích hợp điều này vào GitHub Actions hoặc bất kỳ pipeline nào khác tuân theo cùng một mẫu như hướng dẫn kiểm thử API trong CI/CD của chúng tôi: cài đặt các phụ thuộc, chạy lệnh, xuất các artifact báo cáo.
Khi một nền tảng API chuyên dụng hỗ trợ nhiều hơn
Robot Framework là một lựa chọn mạnh mẽ khi bạn muốn các bài kiểm thử dễ đọc, điều khiển bằng từ khóa mà các nhóm có nhiều kỹ năng khác nhau có thể chia sẻ. Nó ít thuận tiện hơn khi bạn cũng cần thiết kế API, giả lập (mocking) và gỡ lỗi ở một nơi, hoặc khi bạn muốn xác thực lược đồ (schema validation) dựa trên một đặc tả OpenAPI mà không cần lắp ráp từ các thư thư viện.
Apidog xử lý trực tiếp những nhu cầu đó. Nó cung cấp trình xây dựng kiểm thử trực quan, xác thực lược đồ OpenAPI tự động, chạy kiểm thử dựa trên dữ liệu từ CSV và JSON, quản lý môi trường và báo cáo HTML, với trình chạy CLI cho CI. Các nhóm thường sử dụng cả hai: Robot Framework khi khả năng đọc điều khiển bằng từ khóa là quan trọng nhất, và Apidog để thiết kế, giả lập và kiểm thử rộng rãi các API đang được kiểm thử. Bạn có thể tải xuống Apidog và thiết lập một bộ kiểm thử API hoạt động mà không cần viết bất kỳ thư viện từ khóa nào.
Các câu hỏi thường gặp
Robot Framework chỉ dành cho kiểm thử giao diện người dùng (UI) phải không?
Không. Robot Framework là một framework tự động hóa đa năng. Với RequestsLibrary, nó xử lý tốt kiểm thử API, và các thư viện khác bao gồm cơ sở dữ liệu, SSH, v.v. Thiết kế điều khiển bằng từ khóa của nó không phụ thuộc vào lớp. Framework này trở nên phổ biến để kiểm thử UI thông qua SeleniumLibrary, nhưng kiểm thử API cũng là một trường hợp sử dụng phổ biến không kém.
Sự khác biệt giữa Create Session và một yêu cầu thông thường là gì?
Create Session mở một phiên HTTP có tên, liên tục, lưu trữ URL cơ sở, tiêu đề, cookie và thông tin xác thực. Các từ khóa tiếp theo như GET On Session sử dụng lại trạng thái đó, điều này rất cần thiết cho các API yêu cầu đăng nhập. Một yêu cầu không có phiên sẽ không mang theo cookie hoặc thông tin xác thực giữa các lần gọi, buộc bạn phải gửi lại mọi thứ mỗi lần.
Tôi có cần biết Python để sử dụng Robot Framework không?
Không cần thiết để viết các bài kiểm thử. Cú pháp bảng từ khóa được thiết kế cho những người không phải lập trình viên, và RequestsLibrary đã hiển thị các hoạt động HTTP dưới dạng từ khóa. Kiến thức Python chỉ trở nên hữu ích khi bạn muốn viết các thư viện từ khóa hoàn toàn mới. Hầu hết các nhu cầu kiểm thử API đều được đáp ứng bởi các thư viện hiện có, vì vậy nhiều nhóm không bao giờ viết Python cả.
Robot Framework so sánh với pytest như thế nào trong kiểm thử API?
Pytest là công cụ ưu tiên mã (code-first) và phù hợp với các nhóm Python muốn viết kiểm thử cùng với mã ứng dụng. Robot Framework được điều khiển bằng từ khóa và phù hợp với các nhóm có nhiều kỹ năng khác nhau, những người coi trọng các bài kiểm thử dạng bảng, dễ đọc. Cả hai đều chạy trong CI và tạo báo cáo. Lựa chọn phụ thuộc vào việc ai viết và duy trì bộ kiểm thử hơn là khả năng thô.
Robot Framework có thể xác thực các phản hồi dựa trên lược đồ OpenAPI không?
Không phải ngay từ đầu. Bạn có thể xác nhận các trường riêng lẻ bằng các từ khóa tích hợp và JSONLibrary, và các thư viện cộng đồng bổ sung tính năng kiểm tra lược đồ. Nếu xác thực tự động dựa trên tài liệu OpenAPI là trọng tâm trong quy trình làm việc của bạn, một nền tảng như Apidog thực hiện điều đó một cách tự nhiên sẽ giúp bạn tiết kiệm việc lắp ráp và bảo trì thư viện.
