目錄
介紹
概述
安裝
運行demo
介紹樣例應用程序
測試用例
第一個測試用例
高級別測試用例
數據驅動測試用例
關鍵詞keywords
內置關鍵詞
庫關鍵詞
用戶定義關鍵詞
變量
定義變量
使用變量
組織測試用例
測試套件
啟動和卸載
使用標簽
創建測試庫
介紹
概述
Robot Framework 是一個關鍵詞驅動的自動測試框架。測試用例位於HTML或者TSV(以tab分隔值)文件,使用在測試庫中實現的關鍵詞來在測試中運行程序。因為Robot Framework 是靈活和可擴展的,所以它很合適用於測試具有多種接口的復雜軟件:用戶接口,命令行,web service,編程接口等。
Robot Framework 是開源軟件和安裝包,源碼和相關文檔可通過http://robotframework.org獲得。本篇指南計划介紹Robot Framework 的基本概念。如果需要詳細的技術描述,請查閱Robot Framework User Guide.
安裝
安裝Robot Framework 的前提是Python被安裝。另外,需要使用用Java編寫的測試庫, Jython 必須被安裝。對使用本篇快速入門來說Pyhon已經足夠了。
共有三種不同的安裝Robot Framework 的方法,從而可以選擇最合適你的方式。詳細安裝說明可以在project web pages上找到.
- 有用於windows平台的二進制安裝包。雙擊安裝包按照提示安裝即可。
- 在所有平台上Robot Framework 都可以從源碼安裝。想要安裝源碼,解壓源碼發行包運行命令python setup.py install 。
- 如果Python包管理系統Easy Install 可以使用, Robot Framework 可以通過命令easy_install robotframework 安裝。在windows下你可以手動運行robot_postinstall.py 腳本。
框架安裝好后,將包含有啟動腳本的安裝目錄添加到PATH環境變量中。在UNIX-like 系統中應該可以自動完成,但在windows系統必須從 Control Panel > System > Advanced > EnvironmentVariables 添加如下例子. C:/Python25/Scripts to PATH.
安裝成功后可以用命令pybot –version測試,應該輸出如下:
$ pybot --version
Robot Framework 2.0.3 (Python 2.5.2 on linux2)
運行demo
本篇快速入門指南使用一個可執行的demo。為了運行它啟動一個命令shell,cd到本文件目錄,在命令行輸入下面的命令:
pybot quickstart.html
在本文件內的測試將被執行並產生如下報告:
report.html
測試結果概述
log.html
測試結果細節
output.xml
以輕型XML保存的測試結果,便於與其他工具集成
在瀏覽器中打開 report.html (此鏈接只有在本指南被執行后才能工作), 然后打開此鏈接查看結果。report.html 文件鏈接着 log.html 文件。
有一些命令行選項可以用來控制測試執行和產生的結果。完整列表可以使用pybot –help 來顯示。例如如下命令修改了日志文件和頂層測試套件的名字:
pybot --log mylog.html --name My_Fine_Tests quickstart.html
注意
使用jybot啟動腳本執行本快速入門指南不能與Jython 2.2工作。使用Jython2.5執行需要使用-Dsys.executable 選項設置可執行文件。
介紹樣例應用程序
本篇指南的樣例應用程序是一個經典登陸樣例的變種: 它是一個使用Python編寫的基於命令行的認證服務器。 樣例應用允許用戶做三件事情:
- 使用有效的密碼創建一個用戶。
- 使用有效的用戶名和密碼登陸。
- 修改已存在賬戶的密碼。
應用程序在sut目錄下,可以使用命令python sut/login.py 來執行。嘗試使用不存在的用戶賬戶或者錯誤密碼登錄將會長生同樣的錯誤信息:
> python sut/login.py login nobody P4ssw0rd
Access Denied
在使用有效的密碼創建一個用戶賬戶后成功登錄:
> python sut/login.py create fred P4ssw0rd
SUCCESS
> python sut/login.py login fred P4ssw0rd
Logged In
一個有效的密碼必須滿足兩個要求: 它必須是7-12 字符長, 它必須包含大寫或者小寫字母和數字,但是不能包含特殊字符。嘗試使用非法的密碼創建用戶會失敗:
> python sut/login.py create fred short
Creating user failed: Password must be 7-12 characters long
> python sut/login.py create fred invalid
Creating user failed: Password must be a combination of lowercase and
uppercase letters and numbers
使用非法信任狀修改密碼會產生和使用非法信任狀登錄一樣的錯誤。新密碼的有效性將會被驗證,如果不合法如下錯誤信息會被顯示:
> python sut/login.py change-password fred wrong NewP4ss
Changing password failed: Access Denied
> python sut/login.py change-password fred P4ssw0rd short
Changing password failed: Password must be 7-12 characters long
> python sut/login.py change-password fred P4ssw0rd NewP4ss
SUCCESS
本應用程序使用一個簡單的數據庫文件來追蹤用戶的狀態。文件在操作西洞庭的臨時文件目錄。
測試用例
第一個測試用例
Robot Framework 測試用例使用一種簡單表格語法。下表含有兩個樣例:
- 用戶可以創建賬戶並登入
- 用戶使用錯誤密碼無法登入
Test Case |
Action |
Argument |
Argument |
User can create an account and log in |
Create Valid User |
fred |
P4ssw0rd |
|
Attempt to Login with Credentials |
fred |
P4ssw0rd |
|
Status Should Be |
Logged In |
|
|
|
|
|
User cannot log in with bad password |
Create Valid User |
betty |
P4ssw0rd |
|
Attempt to Login with Credentials |
betty |
wrong |
|
Status Should Be |
Access Denied |
|
注意 這些測試比起自動測試用例更像用英語手工寫的測試。Robot Framework 使用關鍵詞驅動的方式,支持用自然語言來編寫可以抓住動作和期望值的本質的測試。測試用例由關鍵詞(通常在第二列)和它們可能的參數組成。
高級別測試用例
測試用例也可以通過使用不攜帶參數的高級別關鍵詞來創建。這種風格允許使用完全的自由文本以便於進行交流,即使是和非技術人員或者其他利益相關者。T Robot Framework 不強制使用任何風格來編寫測試用例,它可以用於行為驅動開發behavior-driven development (BDD)推薦的given-when-then 格式的樣例,如下所示。
Test Case |
Steps |
User can change password |
Given a user has a valid account |
|
when she changes her password |
|
then she can log in with the new password |
|
and she cannot use the old password anymore |
這種測試用例或者用戶故事風格的測試用例的類型很適合用於acceptance test-driven development (ATDD). 在 ATDD 中接收測試在實現實際產品特性前編寫並且他們反映了需求。
數據驅動測試用例
通常部分測試用例除了部分不同的輸入或者輸出數據外都.在這些情況下數據驅動,如下面六個測試用例,允許在不復制工作流的情況下改變測試數據 。
Test Case |
Action |
Password |
Expected error message |
Too short password |
Creating user with invalid password should fail |
abCD5 |
${PWD INVALID LENGTH} |
Too long password |
Creating user with invalid password should fail |
abCD567890123 |
${PWD INVALID LENGTH} |
Password without lowercase letters |
Creating user with invalid password should fail |
123DEFG |
${PWD INVALID CONTENT} |
Password without capital letters |
Creating user with invalid password should fail |
abcd56789 |
${PWD INVALID CONTENT} |
Password without numbers |
Creating user with invalid password should fail |
AbCdEfGh |
${PWD INVALID CONTENT} |
Password with special characters |
Creating user with invalid password should fail |
abCD56+ |
${PWD INVALID CONTENT} |
在這些測試中每個測試用例只有一個關鍵詞,它用於用給定的密碼創建用戶並檢查創建過程失敗返回的錯誤信息。注意錯誤信息使用variables 變量指定。
關鍵詞keywords
測試用例使用關鍵詞創建,關鍵詞可以從三種來源得到:總是可用的built-in keywords 內置關鍵詞,從導入的測試庫中得到的library keywords 庫關鍵詞和使用同樣表格語法創建的用於創造測試用例的user keywords 用戶關鍵詞。
內置關鍵詞
一些常見有用的關鍵詞如Get Time 和 Should Be Equal 總是可用的。技術上來說這些關鍵詞來自於BuiltIn 測試庫,你可以通過它的文檔查看到所有可用的關鍵詞的列表。
庫關鍵詞
所有最底層的關鍵詞都是在測試庫中定義的,它們通過使用標准編程語言實現。 Robot Framework本身具有部分庫,包括用於支持常見的操作系統函數的OperatingSystem 庫,和用於捕捉屏幕焦點的Screenshot 庫。在這些標准庫之外,還有其他的庫分布在不同的開源項目中,例如SeleniumLibrary 用於 Web 測試。當 沒有合適的庫可用時實現自己的庫implement your own libraries也是很容易的。
想要使用一個測試庫提供的關鍵詞,這個庫必須被啟用。本文件中的測試需要從標准OperatingSystem 庫 (例如,Remove File)和用戶自定義LoginLibrary庫(例如Attempt to login with credentials)中定義的關鍵詞。這兩個庫都是使用下面叫做setting 表的表格導入。
Setting |
Value |
Library |
OperatingSystem |
Library |
testlibs/LoginLibrary.py |
Meta: Version |
1.0 |
用戶定義關鍵詞
Robot Framework 最有用的特性之一就是很容易的從其他關鍵詞中創建新的高級別關鍵詞。創建用戶定義關鍵詞,簡稱用戶關鍵詞,的語法和創建測試用例的語法很相似。前面測試用例用到的所有高級別關鍵詞都是在下面keyword 表中定義的。
Keyword |
Action |
Argument |
Argument |
Clear login database |
Remove file |
${DATABASE FILE} |
|
|
|
|
|
Create valid user |
[Arguments] |
${username} |
${password} |
|
Create user |
${username} |
${password} |
|
Status should be |
SUCCESS |
|
|
|
|
|
Creating user with invalid password should fail |
[Arguments] |
${password} |
${error} |
|
Create user |
example |
${password} |
|
Status should be |
Creating user failed: ${error} |
|
|
|
|
|
Login |
[Arguments] |
${username} |
${password} |
|
Attempt to login with credentials |
${username} |
${password} |
|
Status should be |
Logged In |
|
|
|
|
|
# Used by BDD test cases (this is a comment) |
|
|
|
Given a user has a valid account |
Create valid user |
${USERNAME} |
${PASSWORD} |
When she changes her password |
Change password |
${USERNAME} |
${PASSWORD} |
|
... |
${NEW PASSWORD} |
|
|
Status should be |
SUCCESS |
|
Then she can log in with the new password |
Login |
${USERNAME} |
${NEW PASSWORD} |
And she cannot use the old password anymore |
Attempt to login with credentials |
${USERNAME} |
${PASSWORD} |
|
Status should be |
Access Denied |
|
用戶定一個經常可以包含從其他用戶定義關鍵詞,內置關鍵詞或者庫關鍵詞定義的動作。如在本例中所示,用戶定義關鍵詞可以攜帶參數。它們可以返回值設置包括FOR循環。現在重要的是用戶定義關鍵詞使測試創建者能夠為常用的動作序列創建可重用的步驟。用戶定義關鍵詞還可以幫助測試作者在不同的環境下盡可能保持測試測試可讀性和使用恰當的抽象級別。
變量
定義變量
變量是Robot Framework 的組成部分。通常在測試中的可能變化的數據最好定義為變量。定義變量的語法非常簡單,如下表所示:
Variable |
Value |
${USERNAME} |
janedoe |
${PASSWORD} |
J4n3D0e |
${NEW PASSWORD} |
e0D3n4J |
|
|
${DATABASE FILE} |
${TEMPDIR}${/}robotframework-quickstart-db.txt |
|
|
${PWD INVALID LENGTH} |
Password must be 7-12 characters long |
${PWD INVALID CONTENT} |
Password must be a combination of lowercase and uppercase letters and numbers |
變量也可以從命令行給定,以便於測試需要在不同的環境中執行。例如本demo可以像下面一樣執行:
pybot --variable USERNAME:johndoe --variable PASSWORD:J0hnD0e quickstart.html
除了用戶定義變量之外,還有一些內置變量也很有用。這些變量包括在上表中使用的${TEMPDIR} 和${/} 。
使用變量
變量可以在測試數據的大部分地方使用。如下面的測試用例所示它們最常用作關鍵詞的參數。關鍵詞的返回值也可以復制給變量以便在后面使用。例如下面的Database Should Contain 用戶關鍵詞設置數據庫內容給${database} 變量,然后使用內置關鍵詞Should Contain 驗證內容。庫和用戶定義關鍵詞口可以返回值。
Test Case |
Action |
Argument |
Argument |
Argument |
User status is stored in database |
[Tags] |
variables |
database |
|
|
Create Valid User |
${USERNAME} |
${PASSWORD} |
|
|
Database Should Contain |
${USERNAME} |
${PASSWORD} |
Inactive |
|
Login |
${USERNAME} |
${PASSWORD} |
|
|
Database Should Contain |
${USERNAME} |
${PASSWORD} |
Active |
Keyword |
Action |
Argument |
Argument |
Argument |
Database Should Contain |
[Arguments] |
${username} |
${password} |
${status} |
|
${database} = |
Get File |
${DATABASE FILE} |
|
|
Should Contain |
${database} |
${username}/t${password}/t${status} |
|
組織測試用例
測試套件
在Robot Framework中測試用例的集合叫做測試套件。每個包含測試用例的輸入文件組成一個測試套件。當運行本demo時,可以在控制台輸出上看見測試套件Quickstart 。這個名字來自於文件名並且在報告和日志都可見。
可以通過將測試用例文件放置在目錄中並將這些目錄放在其他目錄中來組織測試用例的層次。所有這些目錄自動創建以目錄名命名的高層次測試套件。因為測試套件知識文件和目錄,它們很容易放置到任何版本管理系統中。
你可以通過在本指南的目錄下運行如下命令來測試運行一個目錄作為一個測試套件:
pybot .
啟動和卸載
如果你希望讓一系列動作在每個測試執行之前或之后發生,使用Test Setup 和 Test Teardown 設置如下:
Setting |
Value |
Test Setup |
Clear Login Database |
Test Teardown |
|
同樣你也可以使用Suite Setup 和 Suite Teardown 設置來指定在整個測試套件執行之前和之后執行的動作。
使用標簽
Robot Framework 允許為測試用例設置標簽以便給他們自由的元數據。allows setting tags for test cases to give them free metadata. 標簽可以使用如下表中Default Tags 和 Force Tags settings為一個文件中的所有測試用例設置。也可以像前面User status is stored in database 測試中那樣為單獨的測試用例設置標簽。
Setting |
Value |
Value |
Force Tags |
quickstart |
|
Default Tags |
example |
smoke |
當你在一個測試執行后查看報告時,可以發現測試與標簽相關聯並且按照標簽同級生成。標簽還可用於很多其他目的,其中一個很重要的就是用於選擇想要執行什么測試。你可以嘗試下面的命令:
pybot --include smoke quickstart.html
pybot --exclude database quickstart.html
創建測試庫
Robot Framework 為創建測試庫提供了一個簡單的API,包括Python 和 Java。 user guide包括有具有例子的詳細說明。
下面是本文中LoginLibrary 的源碼。可以看到關鍵詞Create User 是如何映射到方法create_user 的實際實現。
import os
import sys
class LoginLibrary:
def __init__(self):
self._sut_path = os.path.join(os.path.dirname(__file__),
'..', 'sut', 'login.py')
self._status = ''
def create_user(self, username, password):
self._run_command('create', username, password)
def change_password(self, username, old_pwd, new_pwd):
self._run_command('change-password', username, old_pwd, new_pwd)
def attempt_to_login_with_credentials(self, username, password):
self._run_command('login', username, password)
def status_should_be(self, expected_status):
if expected_status != self._status:
raise AssertionError("Expected status to be '%s' but was '%s'"
% (expected_status, self._status))
def _run_command(self, command, *args):
command = '"%s" %s %s' % (self._sut_path, command, ' '.join(args))
process = os.popen(command)
self._status = process.read().strip()
process.close()