Một Keyword hay từ khoá, là một hành động hay một nhóm các hành động trong Robot Framework, tuỳ vào việc chúng ta đang sử dụng keyword có sẵn hay đang sử dụng keyword tự định nghĩa.
Built-in
Về cơ bản một keyword built-in sẽ phụ thuộc vào Standard Library hoặc External Library. Ví dụ, bản thân Robot Framework có một nhóm các keyword có thể sử dụng luôn, xem tại Built-in Keywords. Cơ bản nhất là các keyword dùng để kiểm soát flow của hoạt động test như
Run Keyword And Expect Error
Run Keyword And Ignore Error
Run Keyword And Return
Run Keyword And Return If
Run Keyword And Return Status
Run Keyword And Warn On Failure
Run Keyword If
Run Keyword If All Tests Passed
Run Keyword If Any Tests Failed
Run Keyword If Test Failed
Run Keyword If Test Passed
Run Keyword If Timeout Occurred
Run Keyword Unless
Run Keywords
Skip
Skip If
Hay các keyword để ép kiểu dữ liệu
Convert To Boolean
Convert To Bytes
Convert To Hex
Convert To Integer
Convert To Number
Convert To Octal
Convert To String
Và các keyword để thực hiện Assertion
Should Be Empty
Should Be Equal
Should Be True
Should Contain
Should Contain Any
Should Contain X Times
Should End With
Should Match
Should Match Regexp
Should Not Be Empty
Should Not Be Equal
Should Not Be True
Should Not Contain
Should Not Contain Any
Should Not End With
Should Not Match
Should Not Match Regexp
Should Not Start With
Should Start With
Cách sử dụng các từ khoá này các bạn có thể đọc cụ thể trong document của Robot Framework.
Ngoài ra như ở bài phần Library, có các Standard Library như Collections, DateTime, OperatingSystem,... cũng có các keyword sẵn để sử dụng. Bên cạnh đấy, tương tự cho các External Library như SeleniumLibrary, AppiumLibrary,...
User-defined
Keyword do người dùng tự viết ra sẽ nằm ở dưới section Keywords, kiểu dạng như sau, mình sẽ ví dụ với một số keyword của SeleniumLibrary
*** Keywords ***
Open Browser To Google
Open Browser http://google.com chrome
Thường thì chúng ta sẽ không viết keyword cho chỉ một keyword, nhưng nó cũng có thể được thực hiện nhằm che dấu logic thực hiện của keyword đó, giúp cho code dễ đọc hơn. Tưởng tượng thay vì nhìn thấy
Open Browser http://google.com chrome
Một người non-tech khi nhìn vào sẽ kiểu Ồ, chrome là gì, đây là mở browser vào google đúng không ?, thì với việc sử dụng keyword để che đi cú pháp
Open Browser To Google
Người đọc chỉ cần nhìn vào sẽ nắm được ngay cái gì đang được thực hiện trong keyword.
Đồng thời, chúng ta cũng có thể bổ sung một số keyword phụ trợ, ví dụ như
*** Keywords ***
Open Browser To Google
Open Browser http://google.com chrome
Maximize Browser Window
Arguments
Một keyword có thể nhận tham số, và tham số này có thể là một giá trị cố định hoặc một biến. Cũng như cách mà một function trong Python, việc định nghĩa keyword sử dụng tham số đều cần đưa vào một hay nhiều parameter với [Arguments] như sau
*** Keywords ***
Open Browser To Page
[Arguments] ${url} ${browser}
Open Browser ${url} ${browser}
Và keyword này có thể được gọi thẳng với giá trị
Open Browser To Page http://google.com chrome
Hoặc gọi với một biến đã được khai báo
*** Variables ***
${URL} http://google.com
${BROWSER} chrome
*** Test Cases ***
Test
Open Browser To Page ${URL} ${BROWSER}
Cũng có thể pass giá trị default cho tham số, trừ khi chúng ta gọi keyword với giá trị khác, thì giá trị default sẽ được sử dụng, giống hệt trong Python
*** Keywords ***
Open Browser To Page
[Arguments] ${url} ${browser}=chrome
Open Browser ${url} ${browser}
Return
Một keyword có thể trả về giá trị, và giá trị này có thể được sử dụng trong một keyword khác
*** Keywords ***
Calculate Sum
[Arguments] ${a} ${b}
${sum}= Evaluate ${a}+${b}
RETURN ${sum}
Và keyword này có thể được sử dụng trong một keyword khác
*** Keywords ***
Test
${sum}= Calculate Sum 1 2
Log ${sum}
Sử dụng keyword để thực hiện tính toán và trả về giá trị thật ra là một cái mà chúng ta nên tránh. Bản chất khả năng của Robot Framework cũng chỉ đơn giản gói gọn trong Python, vì nó phụ thuộc vào Python, vì thế các tác vụ như tính toán, vòng lặp, v.v... sẽ hoạt động chậm hơn trong Robot Framework. Vậy nên trong tình huống như trên, chúng ta nên viết một Library python để thực hiện tác vụ, mình sẽ hướng dẫn ngay ở phần dưới
Keywords from Self-defined Library
Một Library tự viết ra về cơ bản là một file python, và chúng ta có thể import nó vào Robot Framework để sử dụng. Ví dụ, mình có một file mylib.py như sau
# mylib.py
def calculate_sum(a, b):
return a+b
Bây giờ, import nó vào trong Robot Framework
*** Settings ***
Library mylib.py
*** Keywords ***
Test
${sum}= Calculate Sum 1 2
Log ${sum}
Kết quả cũng sẽ cho tương tự như ở trên, nhưng tốc độ nhanh hơn nhiều so với việc đi viết trong Robot Framework.
Bạn cũng nên để ý cách gọi tên keyword, với tên function là calculate_sum trong python, thì tên keyword sẽ là Calculate Sum trong Robot Framework, với cách viết gọi là Snake Case tức là viết thường hết rồi ngăn cách bằng dấu gạch dưới, và vào Robot Framework thì các từ sẽ được tách ra với dấu cách và viết hoa chữ cái đầu. Hay ví dụ như
get_user_info->Get User Infoget_user_info_by_id->Get User Info By Id
Dictionary trong Robot Framework cũng giống dictionary của python như cách list trong RB giống list của python, nhưng khác về cách khai báo, với dictionary thì sẽ dùng & thay vì @ như list.
Conclusion
Tóm lại, sau bộ bài viết
Và bài viết Keyword này, chúng ta đã có đủ kiến thức để viết một test suite đơn giản.
Task : Write a test case to verify the sum of two numbers - Hãy viết một test case để kiểm tra tổng của hai số
Hãy thử vào task trên, sau bài viết này mình sẽ đào sâu vào Browser Automation với SeleniumLibrary