Bài viết nói về việc cài đặt và bàn về hướng để tiếp cận Robot framework.
Trước hết, để xem em nó là ai. :/
Tác dụng đơn giản dễ thấy nhất là tự động hoá quá trình test vào trong code. Cụ thể thì theo trang web của nó bảo là:
Robot Framework là một framework kiểm thử tự động cho kiểm thử chấp nhận và phát triển hướng kiểm thử chấp nhận (Acceptance Test Driven Development – ATDD). Và nó có cú pháp cực kỳ đơn giản, dễ sử dụng, đặc biệt có thể viết thư viện với Python hoặc Java với cú pháp tương tự.
Cụ thể hơn, đối với một dự án thì vai trò của nó là gì. Nó thuộc ATDD mà loại kiểm thử chấp nhận này lại nằm ở level cuối cùng trong quá trình kiểm thử chất lượng phần mềm: Unit Testing -> Integration Testing -> System Testing -> Acceptance Testing. Như vậy nó sẽ là phần chốt hạ xem thằng nào được release và thằng nào thì không, cụ thể là chức năng đó chỉ được chuyển giao cho khách hàng khi mà qua được vòng kiểm tra rằng nó đáp ứng được đủ các yêu cầu về chất lượng đã được thống nhất. Trong Agile thì nó được triển khai ở mỗi sprint vào lúc chuẩn bị release. Lan man phết nhỉ, đại loại là nếu trong các tính năng release có tính năng nào mà có dù chỉ là một lỗi thì tính năng đó sẽ được trả lại và không gửi cho khách. Thế nhé!!
Rồi, bắt đầu tiếp cận. 😉
Tài liệu hướng dẫn cài đặt trên Mac: https://drive.google.com/file/d/0Bz1rqjEAGEddRm5BLS1zbjIyN00/view
Robot Framework chạy trên nền python nên trước hết cần cài python. Mặc định trong máy Mac đã được cài rồi, nếu chưa có thì download tại đây rồi mở và cài đặt bình thường. Đối với Windows thì cần lưu ý thêm path đến thư mục 'C:\Python' version vừa cài và 'C:\Python\Script' để chạy pip và robot. Để kiểm tra đã thành công chưa chạy lệnh: python –version
Mac thì cần cài thêm pip bằng lệnh: sudo easy_install pip . Sau đó chạy: sudo pip install robotframework để cài robot framework. Kiểm tra: robot –version
Để thử làm quen với cấu trúc câu lệnh, luồng hoạt động, tải WebDemo. Cài thêm thư viện Selenium2Library bằng lệnh: pip install –user robotframework-selenium2library . Và cần thêm Chromedriver để chạy test tự động trên Google Chrome, đối với Windows thì tải nó về rồi đưa vào thư mục đã thêm path ở trên( C:\Python). Mac thì có thể sử dụng lệnh: sudo brew install chromedriver ( nếu chưa có brew: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" ).
Đổi code một chút, mở file webdemo/demoapp/login_tests/resource.robot đổi Variables ${BROWSER} từ Firefox thành Chrome (hoặc có thể cài thêm FirefoxDriver nếu muốn test bằng Firefox), qua dòng lệnh cd vào thư mục webdemo đó rồi khởi động server: python demoapp/server.py và chạy thử lệnh test: robot login_tests . Tất cả đều được chạy tự động. Tuyệt!
Cứ mỗi lần sau khi chạy lệnh test nó đều sinh ra 3 file: output.xml, log.html, report.html thì mở file log hoặc report thì nếu xanh hết là pass toàn tập, còn nếu nó đỏ một chút xíu thôi là fail rồi 😀
Tìm hiểu chi tiết: ngoại hình, tính cách của em nó =))
Sau khi thử chạy xong và các file log, report đã xanh ngát rồi, giờ là lúc xem các file trong thư mục login_tests có thành phần gì và thực thi thế nào.
Trước hết là file valid_login.robot, có 2 phần Settings và Test Cases. Phần Settings ở file này chứa 2 mục: Documentation để viết chi tiết về việc mà file này chạy đó là thử login với trường hợp đúng và phần Resource trỏ đến resource.robot – nghĩa là file valid_login này có thể sử dụng các Variables và Keywords được khai báo bên file resource có cùng thư mục. Phần Test Cases chỉ có 1 case duy nhất là Valid Login, từ đây nó gọi đến các Keywords bên resource.robot để thực hiện test từ việc mở trình duyệt đến trang login -> nhập username -> nhập password -> đăng nhập -> chuyển sang trang welcome rồi đóng trình duyệt lại.
Chuyển qua file resource.robot ta thấy nó phần Settings chứa 1 Library đã install phía trên: Selenium2Library. Ngoài ra, còn có 2 phần: Variables (gán các giá trị cụ thể) và Keywords (tập hợp các 'hành động'). Để ý một chút ta thấy phần Variables đã sửa 1 lần ở trên đối với ${BROWSER}, còn phần Keywords có Open Browser To Login Page, Input Username… được gọi từ file valid_login. Ở đây, chúng lại gọi đến những Keywords của thư viện Selenium2Library như: Open Browser hay Maximize Browser Window… (tra cứu: Selenium2Library)
Như vậy, đại khái mỗi file .robot có 4 phần (xem thêm RobotFrameworkUserGuide):
*** Settings ***: chứa Documentation, Resource, Library; ngoài ra còn có Suite Setup, Test Template…
*** Test Cases ***: chứa các trường hợp cần test. Tên trường hợp đó và bên trong là gọi đến các Keyword
*** Variables ***: khai báo giá trị. Cấu trúc: ${NAME} ${VALUE} . Khoảng cách giữa tên và giá trị là ít nhất 2 ký tự trống, tên không phân biệt hoa thường
*** Keywords ***: chứa các keyword khác mà thư viện hỗ trợ (mặc định: BuiltIn hay: Collections, DateTime,… hoặc là tự viết). Một keyword cũng có tên không phân biệt hoa thường, có thể viết tách nhau bởi ký tự trống nhưng trước nó thì không có; còn các lệnh phía dưới thì cách đầu dòng như nhau. Keyword có thể có các [Arguments] khai báo ở ngay trên đầu, cách nhau ít nhất 2 ký tự trống (như trong resource.robot: Input Username có [Arguments] ${username}); để gọi đến nó cần truyền vào tham số cũng phải cách ít nhất 2 ký tự (trong valid_login.robot: Input Username demo)
Em nó thích cái gì nhỉ 😛
Tiếp theo, nên viết như thế nào khi có quá nhiều các trường hợp phải test?
Đó là nhóm nó vào thành một format cụ thể, dùng nó như một template cho tất cả các test case. Mở file invalid_login.robot ta thấy: thứ nhất trong phần Setting có thêm Suite Setup, Suite Teardown, Test Setup và Test Template; phần Test Case gồm các test case với một dòng duy nhất mà không phải là một loạt những Keyword phía dưới như trong valid_login nữa. (xem thêm: Setting table)
Ở đây, các câu lệnh phức tạp hơn. Các phần trong setting vừa nêu trên sẽ thực thi các Keyword theo sau nó trong các sự kiện đặc biệt khi test.
Ví dụ: Suite Setup Open Browser To Login Page . Suite Setup sẽ chạy khi bắt đầu test, là ngay sau khi chạy lệnh robot invalid_login.robot trong dòng lệnh, ở đây nó sẽ chạy đến Keyword Open Browser To Login Page được khai báo trong file resource. Suite Teardown thì ngược lại, nó chạy sau khi tất cả các test case đã thực hiện xong. Test Setup lại chạy trước khi mỗi một test case bắt đầu, như ở đây có 6 test case thì nó sẽ chạy 6 lần, trước khi mỗi test case bắt đầu chạy.
Và Test Template chính là lý do tại sao trông các test case lại đơn điệu như vậy: không có Keyword nào, chỉ có hai tham số cho mỗi case. Đó là bởi chúng được gọi luôn vào Keyword đã set trên Test Template, việc còn lại chỉ là truyền Arguments vào nữa mà thôi. Cách viết này giúp tập trung vào việc xét các trường hợp với đầu vào dữ liệu khác nhau (recommended).
Tương lai giữa hai ta sẽ thế nào 😀
Vậy là có 2 loại test case: luồng làm việc và hướng dữ liệu. File invalid_login phía trên thể hiện loại test hướng dữ liệu. Còn file valid_login và gherkin_login viết theo kiểu luồng làm việc; gherkin_login.robot được viết dưới dạng Gherkin, cú pháp của nó có các từ: Given, When, Then, And, But. Đọc test case Valid Login trong file này là hiểu ngay được luồng chạy sẽ phải thế nào:
Given browser is opened to login page
When user "demo" logs in with password "mode"
Then welcome page should be open
Đấy là 2 hướng để viết một file test bằng robot framework. Lựa chọn hướng nào tuỳ vào tình huống cụ thể.
Tuy em nó có phần bá đạo, nhưng khá ưa nhìn và giản dị. Điều quan trọng là phải hiểu mới chinh phục được 😉
Link tham khảo:
Hầu hết thông tin: Trang chủ Robot Framework
Tài liệu: Documentation chứa hướng dẫn, thư viện để tra cứu từ khoá và các công cụ Built-in
Tra cứu từ khoá thư viện kiểm thử web: Selenium2Library
Cách viết test case tốt: How to write good test cases using Robot Framework
anh còn bài nào về Robot Framework k post tiếp đi a . Thanks ạ 🙂
Bài viết rất hay, 1 hướng tiếp cận nhanh cho những người mới tìm hiểu. Cảm ơn anh!
Hi,
I wanted to quickly catch up and see if you have received my email below.
Eagerly awaiting your reply.
===============================Original message==============================
Hey,
Saw your post on AngulerJs at http://134.209.103.32/seal.deha.vn/robot-framework-va-huong-chinh-phuc-em-no/ , and noticed that you’ve shared http://robotframework.org/
Just thought that we published AngulerJs tutorial might be valuable to your readers and followers.
https://www.guru99.com/angularjs-dependency-injection.html
Can you link to us?
I did be happy to share your page with our 40k Facebook/Twitter/Linkedin Followers as a thank you.
Thanks!
Alex
Thank you for your interest in my blog.
But I’m afraid my blog doesn’t match with your tutorial’s content.
So I’m sorry, I might to refuse your request.
MạnhNV