1. 程式人生 > >Robot Framework與Web介面自動化測試學習筆記:簡單例子

Robot Framework與Web介面自動化測試學習筆記:簡單例子

一、自動化測試 與 人工測試

在開始編寫用例之前,我們先來思考下自動化測試和人工測試的區別。對於web頁面的人工測試,我們想下,如果去測試,怎麼操作呢?不外乎如下的基本動作:

1)開啟瀏覽器

2)輸入url (前提web伺服器要正常啟動執行著)

3)等待頁面顯示出來

4)用眼睛看頁面顯示的內容是否與自己想象的一致,如果一致,認為功能正常,否則,會認為程式有問題。

5)通過滑鼠、鍵盤執行相關的操作,通過頁面的變化和內容顯示繼續進行檢查功能是否正常。

那麼什麼是自動化測試呢?其本質就是將人的操作過程(開啟瀏覽器、輸入url、滑鼠點選、鍵盤輸入等)以及驗收標準(在人腦中驗收)轉換為測試程式碼。

有了測試程式碼,就可以讓其自動運行了。

二、登入用例設計

一個登入功能,想象下如果是人工測試,那基本的測試過程一般如下:

1)開啟瀏覽器、輸入登入url

2)輸入使用者名稱、密碼(也許還有別的輸入項,如驗證碼,則取決於程式本身),點選登入按鈕

3)如果是正確的使用者名稱密碼,應該出來相應的頁面;如果是錯誤的,應該出來錯誤頁面或錯誤提示資訊。

那我們看看利用Robot Framework怎麼寫用例。

三、 用例編寫

1、成功登陸的用例1

successLogin
    open browser    http://localhost/nau/login    ff
    input text   

 id=userid    xxx
    input password    id=password    yyy
    click button    id=loginBtn
    Wait Until Element Is Visible    id=userid
    close browser

下面我們看下上面程式碼的含義

1)successLogin是用例名,是自己取的

2)後面的語句,每句都是 “關鍵字+引數(0個或多個)”的格式,其中藍色的片語就是關鍵字。這個例子的關鍵字是rf框架中的內建關鍵字。

使用者可以定義自己的關鍵字。

open browser    http://localhost/nau/login    ff

這句程式碼的含義,其實看上去就能理解。open browser是關鍵字,表示開啟瀏覽器;http://localhost/nau/login 是第一個引數,是要開啟的頁面url;ff是第二個引數,代表要用的瀏覽器型別,其中ff表示是firefox瀏覽器,gc表示是chrome瀏覽器,ie表示是Internet Explorer瀏覽器。這裡我們用的是firefox瀏覽器。

input text    id=userid    xxx

這句程式碼,input text  是關鍵字,表示要在html元件(如文字框)中輸入資訊, id=userid 是 第一個引數,用於定位用來輸入的html元件,這裡的id表示通過元素的id來定位,userid就是元素的id值。如果頁面中存在一個id為userid的輸入框,則就能找到。 xxx是第二個引數,表示要輸入的值。想象下,如果是人工操作,就是在介面中找到這個輸入框,敲擊鍵盤輸入xxxx這幾個字元。

看到這裡,我們可以把關鍵字當作一個函式(其實它本質上就是一個函式),後面跟的是函式引數,有的關鍵字有引數,有的沒有。

input password    id=password    yyy

這句程式碼,也非常好理解了,就是在密碼框中輸入密碼了。其中input password為關鍵字。

click button    id=loginBtn

這句程式碼,看上去也明白了,click button 是關鍵字,表示點選按鈕;id=loginBtn是第一個引數,用於定位要點選的按鈕,這裡也是用id來定位的。

Wait Until Element Is Visible    id=userid

前面的幾句程式碼,進行的相關的操作,這句程式碼就是檢查操作結果。如果登入成功,會出現新的頁面,並且頁面上應該有個元素會顯示使用者的登入名。

這裡的Wait Until Element Is Visible  是關鍵字,顧名思義,就是等待元素可見; id=userid就是要顯示的元素,這裡同樣是通過id定位。

實際上這個檢查是不完善的,這裡只是檢查了是否有id為userid的元素,但元素的內容呢(正常內容應該是xxx),沒有檢查。這點我麼在下個用例介紹。

close browser

上面是這個用例的最後一個語句。這很好理解了,就是關閉瀏覽器。close browser是關鍵字,該關鍵字沒有引數。

執行該用例。如果系統存在使用者名稱為xxx和密碼為yyy的使用者,則該用例就會成功。

2、成功登陸用例2

上面是一個最基本的用例。上面用例存在一個問題,就是檢查用例成功的標準是看希望的html元素是否存在。但很多時候不僅需要判斷希望的元素是否存在,還需要判斷元素的內容是否符合預期。就上面這個用例,希望 id為userid的元素的內容是xxx。那用例應該如何寫呢?

successLogin2
    open browser    http://localhost/nau/login    ff
    input text    id=userid    xxx
    input password    id=password    yyy
    click button    id=loginBtn
    ${value}    get text    id=userid
    Should Be Equal    ${value}   xxx
    close browser

和上個用例相比,區別就是檢查語句(上面紅色的2行)。

其中${value}    get text    id=userid的含義是 利用關鍵字 get text   獲取id為userid元素的內容放到變數${value}中。

而 Should Be Equal    ${value}   xxx 語句,Should Be Equal  是關鍵字,用來斷言兩個引數的值是否相等,如果不等,則表示失敗。

3、失敗登入用例

上面是驗證成功登入的用例。那應該也有驗證登入失敗的用例。其思路差不多,就是當登入失敗後的頁面是啥。通過程式碼來進行檢查。

我們假設登入失敗後會出現一個新的頁面,頁面中有文字 “使用者名稱或密碼錯誤”字樣。那麼用例就可以這麼寫。

errorLogin
    open browser    http://localhost/nau/login    ff
    input text    id=userid    xxx
    input password    id=password    yyy123
    click button    id=loginBtn
    Wait Until Page Contains    使用者名稱或密碼錯誤
    close browser

相比前面的用例,區別還是驗收語句。上面的驗收語句一看就明白,Wait Until Page Contains    是關鍵字,用於檢查頁面中是否包含預期的資訊。

4、自定義關鍵字

可以看出,上面3個用例,前面的4個語句,區別只是輸入的引數 使用者名稱和密碼的值區別,我們自然會想到,可以把這4個語句封裝成一個關鍵字,包含兩個引數使用者名稱和密碼。

關鍵字定義如下:

login
    [Arguments]    ${username}    ${password}
    open browser    http://localhost/boot/login    ff
    input text    id=userid    ${username}
    input password    id=password    ${password}
    click button    id=loginBtn

使用該關鍵字的用例如下

loginSuccessWithKeywords
    login   xxx  yyy
    ${value}    get text    id=userid
    Should Be Equal    ${value}    xxx
    close browser

loginErrorWithKeywords
    login   xxx  yyy123
    Wait Until Page Contains    使用者名稱或密碼錯誤
    close browser

5、用例的setup和teardown

每個用例,從整個實現講。一般包括如下三大部分:

1)執行條件設定部分(setup部分):因為用例的執行,通常需要一些條件。如前面的登入成功用例,需要使用者已經存在。

2)用例執行部分:包括該用例進行的操作,對結果的驗證

3)清理部分(teardown部分):在自動化測試中,我們希望用例執行後,對當前環境不會有任何破壞。因此一般需要做些清理工作,包括第一部分條件設定對系統造成的影響和用例執行過程中對系統造成的影響。

rf對這也提供了支援,可以把一個用例分成三部分。雖然我們寫成一部分,從最終效果上講沒區別。但分開了,會更加符合邏輯,用例也非常清楚。

對於我們這個登入用例,可以看出,每個用例完成的最後一步都要關閉瀏覽器,這裡用的是close browser。

因為各個用例都是公共的,我們可以把這放到用例包的teardown中。

*** Settings ***
Test Teardown     close browser

這樣每個用例的最後語句close browser都不需要了。

把一些語句放到teardown中,還有一個好處是,無論用例執行部分出現什麼問題,最後的teardown都會保證被執行。

三、小結

本篇文章,我們通過一個登入例子來介紹了rf在web介面自動化測試上的基本應用。雖然比較簡單,但已經把用例編寫最核心的概念和步驟做了介紹。其它功能的用例與之區別在於用例的複雜程度區別(比如準備測試條件、用例執行步驟、結果驗證的複雜性、用例執行影響的清理)。