Robot Framework操做

Robot Framework 介紹

RobotFramework是一款基於python的開源自動化測試框架,遵照Apache License 2.0協議,在此協議下全部人均可以避免費開發和使用。由於Robot Framework 是靈活和可擴展的,因此它很合適用於測試具備多種接口的複雜軟件:用戶接口,命令行,web service,編程接口等。RF提供不少的擴展庫供使用。Robot的測試用例和配置使用HTML,TXT等格式文件進行編輯,html是比較經常使用的一種格式。html

 

關鍵字驅動java

關鍵字驅動使得咱們的自動化用例具有很是高的可讀性,只要由測試開發人員封裝好關鍵詞庫,即便是業務測試人員也能夠很方便地編寫自動化用例;其次,能夠在基本關鍵詞的基礎上構造高級關鍵詞,這使得咱們的自動化有了無限擴展的可能;例如以測試計算器功能爲例:這邊其實包括了4個測試用例,及連續輸入、簡單加、複雜運算、復位功能,「Push Button」、「Result should be」都是咱們在關鍵詞庫中預先定義好的關鍵詞,實現了簡單的操做及斷言功能;python

 

數據驅動android

數據驅動引入了一個很是有效的「模板」概念,在不少測試場景下,測試人員輸入的操做是有必定重複性的,區別只在於輸入的數據,仍是以登錄爲例,除了包含正常的測試用例,還須要有其餘的異經常使用例覆蓋才能保證登錄接口的正確性。基於橫向構造不一樣的測試數據輸入來判斷不一樣的測試結果,即爲數據驅動。行爲能夠封裝成模板。git

該用例定義了兩個模板,一個是Calculate計算模板,一個是錯誤模板。而後直接根據測試數據執行便可。github

 

行爲驅動web

行爲驅動是一種在關鍵詞驅動之上更加抽象更加高級的自動化測試手段;一般結構是「Given-When-and-Then」,即在一個什麼樣的前置條件下,當用戶觸發了什麼操做,產生了一個什麼樣的結果,結果該是怎麼樣。仍是以測試及計算器爲例。sql

 

1、RF轉義字符

Rf的測試數據轉義字符是反斜槓 ( \ )數據庫

2、Robot Framework文件類型 

1.RF文件編程

Robot Framework測試數據以表格形式進行定義,可使用的格式包括超文本標記語言(HTML),製表符分隔值(TSV),純文本或者新結構化文本(reST)。Robot Framework根據文件的擴展名來爲這些以不一樣格式存儲的測試數據選擇解析器。擴展名不區分大小寫,可識別的擴展名包括HTML的.html,.htm和.xhtml,TSV的.tsv,純文本的.txt和新結構化文本的.rest。針對HTML和TSV格式有不一樣的測試數據模板,使你輕易就能夠開始動手編寫用例。在HTML文件中,測試數據經過分隔的表格進行定義。Robot Framework基於首個單元格里的文原本識別這些測試數據表。全部可識別表格以外的參數都自動忽略。你可使用任何你喜歡的編輯器來編輯HTML文件中的測試數據,可是推薦使用能夠實實在在看到表格的圖形化編輯器。

RF文件一般以.robot爲後綴名,而且提供了不少的編輯工具,方便的進行robot文件的編輯。官方的RIDE是很好的選擇,純圖形化界面,方便團隊沒有開發經驗的人蔘與其中。一個RF文件一般包括三個節點(也稱爲表):

表格名稱

做用

別名

Setting表

一、  加載測試庫文件、資源文件和變量文件;

二、  爲測試文件和測試用例定義中間變量;

Setting, Settings, Metadata

Variable表

變量定義,這些變量能在整個測試數據中使用。

Setting, Settings, Metadata

Test Case表

利用存在的關鍵字建立測試用例;

Test Case, Test Cases

Keywords 表

利用已存在的低級關鍵字建立用戶級關鍵字;

keyword能夠理解爲一個公用的方法,供test case使用

Keyword, Keywords, User Keyword, User Keywords

 

2.Resource資源文件的結構

其實resource文件與普通robot文件沒多大區別,只不過它是被導入的庫文件,一般用來定義一些公用的變量和keywords:

3、變量

變量是RF的完整特徵,它們能在測試數據的大多數地方被使用。最多見的是在測試用例表和關鍵字表中被用於關鍵字的參數。一個普通的關鍵字名稱不能使用變量來指定,但使用內建關鍵字Run Keyword 能夠。RF的變量無需特定聲明,只要有初始化賦值便可使用。不區分大小寫、空格和下劃線

•標量變量:${scalar}。當在測試數據中使用標量變量時,他們將被分配的值所代替。

•列表變量:@{LIST}。列表變量是複合變量,能夠分配多個值給它。

•字典變量:& {DICT}。

•數字變量:能夠用來建立一個全是整型和浮點型的數字:整形8080、浮點型{3.14}

•Boolean變量:${true/false}

•Null/None變量: ${null/None}

•空格SPACESPACE和空{EMPTY}變量

•操做系統變量

 

 

1、標量變量、列表變量、元組變量、字典變量

訪問單個列表項

能夠訪問一個特定值的變量列表的語法 @ {名稱}(指數) ,在那裏 指數 是選擇的索引值。 指數 從0開始,負指標能夠用來訪問項目的結束, 和試圖訪問一個值太大索引會致使一個錯誤。 指數會自動轉換爲整數,還能夠 使用變量指標。 可使用列表項以這種方式訪問 一樣做爲標量變量。

*** Test Cases ***

List Variable Item

    Login    @{USER}

    Title Should Be    Welcome @{USER}[0]!

 

Negative Index

    Log    @{LIST}[-1]

 

Index As Variable

    Log    @{LIST}[${INDEX}]

 

標量變量、列表變量、字典變量建立和引用有何區別:

 

實際案例展現

這裏咱們直接建立了這三種數據,

 

而後,咱們新建一個case,來驗證一下咱們可否引用這些數據類型

1行爲單個數據scalar,二、三、4行是list,5行是dic

咱們中間在二、3行使用了一個循環語法,來循環的輸出列表中的內容

 

二、數字變量 

 

3、布爾變量和None/null 

 

四、space和empty 

 

5、操做系統變量

變量

解釋

$ { CURDIR }

目錄的絕對路徑,測試數據文件所在的位置。 這個變量是區分大小寫的。

$ { TEMPDIR }

系統臨時目錄的絕對路徑。 在類unix系統一般 / tmp ,在窗戶 c:\Documents and Settings\ <用戶> \ Temp \本地設置。

$ { EXECDIR }

目錄的絕對路徑測試執行 從開始的。

$ { / }

系統目錄路徑分隔符。 / 在類unix 系統和 \ 在Windows。

$ {:}

系統路徑元素分隔符。 : 在類unix 系統和 ; 在Windows。

$ { \ n }

系統行分隔符。 \ n 在類unix系統和 \ r \ n 在Windows。 2.7.5新版本。

*** Test Cases ***

Example

    Create Binary File    CURDIRCURDIR{/}input.data    Some text here${\n}on two lines

    Set Environment Variable    CLASSPATH    TEMPDIRTEMPDIR{:}CURDIRCURDIR{/}foo.jar 

4、RF庫

一、標準庫 
Robot Framework能夠直接導入使用的庫,包括:

•Builtin:包含常常須要的關鍵字。自動導入無需import,所以老是可用的

•Dialogs:提供了暫停測試執行和從用戶的輸入方式。

•Collections:提供一組關鍵詞處理Python列表和字典。

•OperatingSystem:容許執行各類操做系統相關的任務。容許執行各類操做系統相關的任務,使各類操做系統相關的任務在robotframework正在運行的系統中執行。

•Remote:遠程庫接口的一部分。沒有本身的任何關鍵字,做爲robotframework和測試庫之間的代理的特殊庫。實際測試庫能夠在不一樣的機器上運行,可使用任何編程語言支持XML-RPC協議的實現。

•Screenshot:提供關鍵字來捕獲和存儲桌面的截圖。

•String:用於處理字符串並驗證它們的內容的庫,用於生成、修改和驗證字符串

•Telnet:支持鏈接到Telnet服務器上打開的鏈接執行命令。

•XML:用於生成、修改和驗證XML文件的庫。

•Process:系統中運行過程的庫。

•DateTime:日期和時間轉換的庫,支持建立和驗證日期和時間值以及它們之間的計算

 

二、擴展庫 
Robot Framework須要下載安裝後才能使用的庫,包括:

•Android library:全部android自動化須要的測試庫,內部使用的是Calabash Android

•iOS library:全部iOS自動化須要的測試庫,內部使用Calabash iOS服務

•appiumlibrary:Android和iOS測試庫,內部使用的是appium

•HTTP library (livetest):內部使用LiveTest工具的HTTP測試的庫。

•HTTP library (Requests):內部使用request工具的HTTP測試的庫。

•MongoDB library:使用pymongo和MongoDB交互的庫。(MongoDB是一個基於分佈式文件存儲的數據庫)

•Database Library (Java):基於Java的數據庫測試庫。也可以使用Jython和Maven central.

•Database Library (Python):基於Python數據庫測試庫。支持任何Python解釋器,包括Jython。

•watir-robot:使用Watir的工具的Web測試庫。

•seleniumlibrary:Web測試庫,內部使用比較流行的selenium工具。利用早期的selenium1.0和自己已通過時。

•selenium2library:使用selenium2的Web測試庫。替換了大部分老的seleniumlibrary。

•selenium2library java:selenium2library的java接口

•Django Library:爲Django的庫,一個Python Web框架。

•sudslibrary:一種基於泡沫基於SOAP的Web服務的功能測試庫,動態的SOAP 1.1的客戶端。

•Archive library:處理.zip和.tar壓縮包的庫。

•Diff Library:比較兩個文件的庫。

•FTP library:Robot Framework上測試和使用FTP服務的庫。

•SSHLibrary:經過SSH鏈接的在遠程機器上執行命令。還支持使用SFTP進行文件傳輸

•rammbock:通用的網絡協議測試庫;提供簡單的方法來指定網絡數據包,並檢查發送和接收數據包的結果。

•imagehorizonlibrary:跨平臺、基於圖像識別的GUI自動化純Python庫。

•autoitlibrary:Windows的GUI測試庫,使用AutoIt的免費工具做爲驅動。

•Eclipse Library:使用SWT窗口小部件測試Eclipse RCP應用程序的庫。

•robotframework-faker:一個服務faker的庫,faker的測試數據生成器。

•swinglibrary:用Swing GUI測試java應用程序庫

•remoteswinglibrary:使用swinglibrary庫測試和鏈接一個java進程,尤爲是java web 
start的應用。(Java Web Start 是基於 Java 技術的應用程序的一種部署解決方案,它是鏈接計算機和 Internet 
的便捷通道,容許用戶在徹底脫離 Web 的狀況下運行和管理應用程序)

•MQTT library:測試MQTT brokers和應用的庫。

 三、用戶自定義的Test Library

在實際的工做中,確定會發現有些功能RF自身的Library,或者第三方的Library都沒法實現,這個時候咱們就得本身寫library來實現它了。

1)編寫Library
假設你有3個方法,你須要寫成本身的library
1:公式:(a+b)的a次方,a,b是正整數
2:有一網址(字符串),http://www.example.com?ip=192.187.111.198&code=12345&name=cat,想獲得ip內容,即192.187.111.198
3:(用戶名+10位隨機數+一個key)進行md5加密

好比我這樣子已經寫好了,編譯調試一下,確保本身沒有錯誤哦。如果有錯誤,導入RF會失敗。而後,將這個文件保存的文件名要和這個class的類名同樣,因此我把他保存成MyLibrary.py

2)放置位置及導入
最後,咱們把這個文件放在了RF項目的同一目錄下,便可。若是你放在其餘地方,也是能夠的,可是導入的時候,地址要寫對哦

來到RF中,咱們導入它(記得寫.py)

3)確認導入成功
按F5,是否是看到本身寫的那些關鍵字了?並且還有本身的中文註解哦

4)使用library
使用這3個關鍵字,咱們跑一下

5)查看結果
運行結果

 

四、Robot Framework自定義Library

RobotFrame Work爲咱們提供了包括OS、Android、XML、FTP、HTTP、DataBase、Appium、AutoIt、Selenium、 Watir等大量的庫。在使用過程當中,除這些庫以外,對於某些咱們本身特定的應用邏輯,咱們還須要開發本身的Library,以便於進行自動化測試。本篇咱們以baidu搜索英文時的自動翻譯爲例,介紹一下如何開發本身的Library。

咱們此次使用的示例的業務邏輯以下,打開baidu,搜索英文單詞「Test」,查看頁面中是否含有Test的自動翻譯結果(咱們以翻譯結果「檢驗」作驗證),手動執行效果如圖

 

1.編寫腳本

咱們使用Python的urllib編寫測試腳本,並保存到當前RobotFrame Work的測試項目目錄下,文件名爲MyLibrary.py 。

# -*- coding=utf-8 -*-

import urllib

import urllib2

class MyLibrary():

    def Is_Translate(self,english,chinese):

        u'''

        檢查輸入的英文單詞在進行baidu搜索時,是否調用了baidu英文翻譯引擎

        '''

        #url地址

        #url='https://www.baidu.com/s'

        url='http://www.baidu.com/s'

        #參數

        values={

                'ie':'UTF-8',

                'wd':'test'  

                }

        #進行參數封裝

        data=urllib.urlencode(values)

        #組裝完整url

        #req=urllib2.Request(url,data)

        url=url+'?'+data

 

        #訪問完整url

        #response = urllib2.urlopen(req)

        response = urllib2.urlopen(url)

        html=response.read()

 

        x=chinese in html

        print x

 

def test():

    lib=MyLibrary()

    lib.Is_Translate( "Test", "測驗")

 

if __name__ == '__main__':

    test()

    print 'finished'

 

在本地運行腳本,檢驗腳本的正確性。

 

2.引用自定義Library

在TestSuit節點上進行編輯,添加Library,Library名稱爲咱們的腳本文件名MyLibrary.py 。

 

按F5鍵,查看剛剛引入的Library

 

3.添加測試用例

新建一個測試用例,命名爲「百度翻譯」。添加測試步驟「Is Translate」

 

此時看到所編輯行的兩個單元格變爲了紅色,表示該關鍵字須要兩個必填變量,對應咱們的腳本中的兩個參數。

 

添加變量,英文輸入「Test」,對應檢驗結果爲「測驗」

 

4.運行測試

運行測試,此時,測試不經過

 

檢查錯誤信息,錯誤信息爲

 

Starting test: 百度搜索測試.兼容性測試.百度翻譯

20150824 16:59:37.014 :  FAIL : UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 490: ordinal not in range(128)

Ending test:   百度搜索測試.兼容性測試.百度翻譯

 

表示是咱們的TestCase中的中文字符編碼格式錯誤,此時須要調整如下RobotFrame Work在調用腳本進行運行時的系統編碼格式。

 

5.增長中文支持

向腳本中添加代碼,設置系統默認編碼爲utf8

        #添加中文支持

        reload(sys)

        sys.setdefaultencoding('utf8')

 

6.再次執行

 

再次執行測試,測試經過,結果爲Pass,表示被打開的頁面中出現了咱們所須要的「測驗」字符。(做爲簡單示例,此時暫不考慮其它搜索結果中的輸出問題,如 果要進行嚴格的測試,應該對搜索後返回的html作解析,先定位到baidu翻譯引擎的div位置,再對位置中的翻譯結果作檢查。)

五、Robot Framework開發系統關鍵字

對於特定的需求,工具沒提供相關的Library和關鍵字的時候,就只能放棄了。還好robot framework提供了 Evaluate 關鍵字,對於Evaluate 關鍵字的使用等有時間再講。當robot framework 不能解決需求,我是直接寫個.py 程序,經過Evaluate 關鍵字調用。而後,就受到了批評,不能這麼玩,動不動就這麼幹的話其實robot framework 就成了雞肋,因此,規範的作法是去封裝系統關鍵字。

其實個人需求也很是簡單,接收一個目錄路徑,自動遍歷目錄下以及子目錄下的全部批處理(.bat)文件並執行。

首先在..\Python27\Lib\site-packages目錄下建立CustomLibrary目錄,用於放自定義的library庫。在其下面建立runbat.py 文件:

#-*- coding:utf-8 -*-

from robot.api import logger

import os

class Runbat(object):

    def run_all_bat(self,path):

        u'''接收一個目錄的路徑,並執行目錄下的全部bat文件.例

         | run all bat                   | filepath                 |

        '''

        for root,dirs,files in os.walk(path):

            for f in files:

                if os.path.splitext(f)[1] == '.bat':

                    os.chdir(root)

                    #print root,f

                    os.system(f)

 

    def __execute_sql(self, path):

        logger.debug("Executing : %s" % path)

        print path

 

    def decode(self,customerstr):

        return customerstr.decode('utf-8')

if __name__ == "__main__":

    path = u'D:\\test_boject'

    run = Runbat()

    run.run_all_bat(path)

注意在run_all_bat()方法下面加上清晰的註釋,最好給個實例。這樣在robot framework 的幫助中能看到這些信息,便於使用者理解這個關鍵字的使用。

  對於建立普通的模塊來講這樣已經ok了。但要想在robot framework啓動後加載這個關鍵字,還須要在CustomLibrary目錄下建立__init__.py文件,而且它不是空的。

 

from runbat import Runbat

class CustomLibrary(Runbat):

"""

這裏也能夠裝x的寫上咱們建立的CustomLibrary如何如何。

"""

    ROBOT_LIBRARY_SCOPE = 'GLOBAL'

這個文件中其實有用的信息就三行,但必不可少。robot framwork 在啓動時會加載這個文件,由於在這個文件裏指明瞭有個runbat文件下面有個Runbat類。從而加載類裏的方法(run_all_bat())。

下面,啓動robot framework RIDE,按F5:

 

找到了咱們建立的關鍵字,下面就是在具體的項目或測試套件中引用CustomLibrary

 

而後,在具體的測試用例中使用「run all bat」 關鍵字。

 

六、Robot Framework 鏈接Oracel數據庫

Robot Framework 提供了多種Library。其中Database Library可用來鏈接操做數據庫。

1.安裝Database Library

打開Robot Framework官網,找到Database Library,選擇Python版的。地址:http://franz-see.github.io/Robotframework-Database-Library/

Database Library的運行需求包括:

Python環境
Robotframework
Database API Specification 2.0 Python Module

其中的Python與Robot Framework咱們已經安裝過,如今須要安裝一個Database API Specification 2.0 Python Module,也就是用於鏈接數據庫的Python模塊。這裏的邏輯是這個樣子的,Database Library其實是一個處在Robot Framework和Database Interfaces 中間的代理模塊,Robot Framework 經過Database Library 所提供的接口,間接的調用各數據庫的Database Interfaces,從而實現操做數據庫的目的。

打開Database Interfaces頁面,找到Oracle的API驅動及下載地址,找到你對目前python環境對應版本的安裝文件,下載安裝http://sourceforge.net/projects/cx-oracle/files/

以後,下載安裝DatabaseLibrary。安裝完成後,在你的 \Python27\Lib\site-packages目錄下,能夠看到Database Library文件夾和cx_Oracle.pyd文件

 

2.編寫測試腳本

咱們編寫一個數據庫查詢的測試用例,腳本以下:

Connect To Database Using Custom Params    cx_Oracle    'bpm','bpm','orcl'

@{data}    query    select * from sys_user

log many    @{data}

log    ${data[0][1]}

countGetlengthcountGetlength{data}

log    ${count}

Disconnect From Database

 

運行腳本,結果以下

 

運行後查看Log,表中的中文所有變成了亂碼。cx_Oracle的默認編碼不是Utf-8,須要人工轉換一下。DataBaseLibrary自身沒有提供轉換函數,爲了解決這個問題,咱們須要對DataBaseLibrary進行擴展。

 

3.解決Database Library中文亂碼問題

打開安裝目錄下的 query.py文件,添加一個decode函數,用於對字符串進行解碼

 

def decode(self,customstr,mode):

       return customstr.decode(mode)

更改測試腳本,增長轉碼過程

 

再次運行,獲得系統輸出,測試經過

 

七、Robot Framework 使用條件表達式

主要對如何在Robot Framework中使用條件表達式作過程控制做說明。按照Robot Framework的官方文檔介紹,Robot Framework並不建議在TestCase或Keyword的編寫中使用條件表達式,應爲這樣作會使TestCase變得難以理解。它提倡的是將邏輯過程寫在自定義的Test Library中,以後再執行Test Library中的方法,並獲取其執行結果。儘管如此,RobotFramework仍是提供了一些Keyword能夠用於條件判斷。

 

1. Run Keyword

Run Keyword能夠將一個關鍵字做爲一個參數,並執行該關鍵字,同時,該關鍵字能夠是從以前的內容中動態獲取的變量。舉例來講。

咱們在自定義的MyLibrary.py庫中,增長一個方法,用於進行條件判斷,並返回結果。

 

def get_result(self,arg):

        if int(arg) > 0:

            return 'LOG'

        else:

            return 'FAIL'

創建TestSuite「IF測試」,創建TestCase「Run_Keyword」,引用MyLibrary.py,編寫腳本。

1)編寫輸入數據>0的腳本

 

運行,並查看測試結果,此時,「Log」做爲「Get Result」的返回結果,賦值給了${key},並在Run Keyword時被執行

 

2)編寫輸入數據=0的腳本

 

運行,並查看測試結果,此時,「Fail」做爲「Get Result」的返回結果,賦值給了${key},並在Run Keyword時被執行

 

2. Run Keyword If / Run Keyword Unless

Run Keyword If 和 Run Keyword Unless 當知足條件表達式要求時,執行指定關鍵字。能夠用於簡單的IF/ELSE 邏輯。例如。咱們編寫腳本以下:

 

其中 … 用於語句分段。運行測試用例,執行結果爲:

 

對應的Run Keyword Unless的用例及執行結果爲:

 

3. Set Variable If

Set Variable If用於根據表達式,動態的設置變量值。咱們編寫腳本以下:

 

執行測試用例,執行結果爲:

 

以上的方法能夠用於作if/else簡單分支的邏輯處理,對於存在else if等狀況時,能夠採用以下方法:

 

對應的執行結果爲:

 

八、Robot Framework使用For循環

在自動化測試過程當中,使用For循環來對某個動做進行重複操做是很廣泛的行爲。在Robot Framework中,各類測試庫中均提供了多種方式的For循環結構,在其中覆蓋了大部分類型的循環類型。而Robot Framework自身也包含了多種的For循環語法結構,可用於獨立編寫帶循環結構的測試腳本。

 

For循環能夠在TestCase中進行使用,也能夠在KeyWrod中進行使用。除了特別簡單的測試用例外,通常建議在Keyword中進行使用,以便於將For循環的複雜性隱藏起來,保持測試用例結構上儘量的簡單。

 

1.普通的For循環

在一個普通的For循環中,循環開始的關鍵字是 :FOR ,其中的:用於與通常關鍵字作區分,對於循環結構體內的每一行,使用 \ 做爲改行的行首關鍵字。對於循環中的變量,能夠在 IN 關鍵字後給出全部變量,也能夠從一個列表中進行賦值,每次循環從列表中取出一個值。例如:

1)給出全部變量

 

2)從列表中進行賦值

執行測試用例,輸出結果爲:

2.嵌套循環

 

Robot Framework自己並不支持直接使用嵌套循環,可是能夠經過在一個循環結構中使用另外一個包含有循環結構的關鍵字來實現。例如

*** Keywords ***

Handle Row

    [Arguments]    @{row}

    : FOR    ${cell}    IN    @{row}

    \    log    ${cell}

 

Handle Table

    [Arguments]    @{table}

    : FOR    @{row}    IN    @{table}

    \    Handle Row    @{row}

 

在使用時,調用Handle Table,Handle Table再調用內層循環Handle Row,從而實現嵌套循環的目的。

 

3.For-in-range循環

除了針對序列的循環以外,有些時候還須要可以進行特定迭代次數的循環。Robot Framework中經過FOR index IN RANGE limit來實現,其語法與Python中的使用方式類似。

 

1)只使用數據上限

只使用數據上限時,數據從0開始,每次+1,數據從0直到指定數據,但不包含該數據。例如:

 

輸出結果爲0、一、二、三、四、五、六、七、八、9,數據從0開始至9結束,輸出結果不包含10.

 

2)使用開始和結束數據

使用開始和技術數據時,數據從「開始數據」開始,每次+1,至「結束數據」結束,但不包含結束數據。例如:

輸出結果爲二、三、四、五、六、七、八、九、10,數據從2開始至10結束,輸出結果不包含11.

 

3)使用開始、結束、步長

使用 開始、結束、步長 時,數據從「開始數據」開始,每次+「步長數據」,至「結束數據」結束,但不包含結束數據。例如:

輸出結果爲二、五、8,數據從2開始至11結束,每次累加3,輸出結果不包含11.

 

4.For-in-enumerate循環

有些時候須要知道當前循環中的循環位置的index編號,此時可使用FOR index ... IN ENUMERATE ...關鍵字。在取index編號時,固定使用 ${index} 做爲變量名,例如

運行結果爲

  

5.多變量循環

與Python中的for循環相似的是,當列表中的變量數量能夠被必定數量整除時,能夠直接使用等於該數量的變量作循環。例如

 

6.For-in-zip 循環

對於有些測試來講,可能會用到多個列表的數據,在循環中須要對這些數據進行組合使用。Robot Framework提供了一個叫作For-in-zip的關鍵字,該關鍵字來自於python內置的zip函數,可用於對列表進行組合。例如

這裏注意,咱們在定義一個列表變量時,可使用使@forinzip使使列表名,也可使用@列表名,而在for−in−zip循環中使用該關鍵字時,只能使用{列表名}。執行測試用例,結果以下:

 

7.跳出循環

通常來講一個循環結構的用例須要遍歷完全部數據後再退出。某些狀況下,須要提早終止並跳出循環時,可使用Exit For Loop 或者 Exit For Loop If。例如

或是使用

執行測試用例,輸出結果爲:

 

8.在循環中使用continue

有些時候,須要在循環中使用continue來跳過循環結構體中的某些過程。在Robot Framework中,可使用Continue For Loop 或者 Continue For Loop If。具體用法與跳出循環時的Exit用法一致,這裏再也不作演示。

 

9.重複執行單一關鍵字

某些狀況下,循環結構可能只須要對一個關鍵字作執行次數的循環。Robot Framework提供了一個關鍵字Repeat Keyword,只需指明循環次數和循環中的關鍵字便可。而在描述循環次數時,有時爲了讓測試用例易於理解,能夠在次數後面添加一個times 或 x 例如:

 

 

 

5、Robot Framework分層思想

談到Robot  Framework 分層的思想,就不得不提「關鍵字驅動」。在程序設計的講究設計模式,設計模式其實就是根據需求使用抽象與封裝,其實就是分層思想。把一個實現過程分紅不一樣多層。提升的靈活性,從而達到可擴展性和可維護性。再回到自動化的話題上,咱們能夠把操做步驟封裝一個一個的方法(關鍵字),經過調用關鍵字來實現測試用例。

 

我如今要寫5條百度搜索的用例:

   能夠在Search測試套件下建立5條測試用例。其實對於每一條測試用例來講,只是搜索的內容不一樣,腳本步驟是徹底同樣的。這樣作無疑增長的腳本的冗餘,並且不便於維護。假如,百度輸入框的定位方式變了,我不得不打開每一條用例進行修改。

 

咱們能夠過建立關鍵字的方式,從而實現分層的思想來解決這個問題。

 

Robot  Framework 關鍵字                      

 

一、建立資源

右鍵「測試項目」選擇「new resource」建立資源。

 

輸入資源名稱:

 

二、建立關鍵字

右鍵「業務關鍵字」選擇「new User Keyword」 來建立用戶關鍵字。

 

 輸入關鍵字的名稱:

 

三、編輯關鍵字

 

分析:

對於一個測試用例來講,用戶關心的是輸入什麼內容,獲得什麼結果。

因此,對於「百度搜索」關鍵字來講,須要建立兩個接口變量searchsearch和{result} 兩個變量,用於接收輸入內容和預期結果。

點擊Arguments輸入框,定義變量,多個變量從用「|」隔開。

 

在百度用戶中使用參數化變量。

 

四、添加建立的資源

切換到測試套件(Search)頁面,添加資源(業務關鍵字.txt)

五、調用關鍵字

如今就能夠在測試用例中使用建立的關鍵字了(百度搜索)。

 

對於每一條用例來講,調用「百度搜索」關鍵字,輸入搜索內容,輸入預期結果便可。不一樣關心用例是如何執行的。若是百度輸入框的定位發生了變化,只用去修改「百度搜索」關鍵字便可,不用對每一條用例作任何修改。大大提升的用例的維護性和擴展性。

 

繼續分層的設計:

 

到此,Robot  Framework +selenium 自動化測試粗獷的講完了。固然還有更多API 的使用,和細枝末節的設置沒有介紹。但咱們已經能夠拿它來開展自動化工做了。

 

流程與數據分離

將搜索測試中的內容繼續分層,仍是要把一些底層的代碼級關鍵字繼續拆分出來

下面對res1.txt進行操做

 

1.打開瀏覽器

 2.輸入搜索內容

3.點擊搜索

4.校驗標題

5.關閉瀏覽器

 

接着咱們把對應的搜索測試中的代碼都換成相應的關鍵字,記得添加參數${url}

最後該運行了

至此,咱們這個案例就已經完成分層了,由於案例比較簡單,因此只分了3層,分別是案例層,流程層,元素層。他們的調用關係也是逐層深刻的

 

流程與數據分離的好處不單是爲了之後維護方便,也使得案例的架構層級清晰。越是靠近上層的部分,腳本越貼近天然語言,或者說很像咱們的測試案例;越靠近下層的部分,越是接近頁面元素的代碼級部分。這樣之後若是發生維護的時候,根據須要維護的內容,只須要在不多的地方進行調整便可。好比一個元素的id變了,那我只要在elements裏面更新就好了。好比測試的流程調整了,之前是ABC的頁面順序,如今是ACB的頁面順序,那麼只要在testflow層進行調整便可。實際上目前咱們的流程都集中在testflow以及下面的部分,而數據通常都是在案例層去給流程層傳遞,這就是咱們的流程與數據分離了。固然,咱們還能夠再進一步的分離,把數據放到外面,脫離咱們的案例,在運行的時候才傳遞進行,也是能夠實現的。後面我會作個簡單的例子給你們看。

 

Robotframework+jenkins配置

假設咱們完成了一個模塊的用例設計,但是想晚上9點或凌晨運行,這時候該怎麼實現呢?jenkins能夠很好解決咱們的疑難。

Jenkins安裝

這裏簡單說下安裝,建議下載war包在tomacat中啓動或是直接在cmd中使用命令啓動jenkins(若是已經使用.msi安裝成windows服務了,下面會提到解決方法)。

配置

  • 基本信息

在jenkins主頁中,新建 一個自由風格的項目,配置項目的名稱等基本信息如圖

 

由於這裏沒有使用svn或git,文件直接保存在本地,因此沒有使用源碼管理,若是使用了源碼管理的能夠根據實際狀況配置源碼管理的配置信息。

  • 構建觸發器

這裏選擇使用Build periodically,進行定時構建,如圖

 

這裏設置的是天天凌晨2點進行構建。

這裏注意選擇的是build Periodically,選擇的是定時構建,無論代碼是否有更新;而另一個構建方式Poll SCM,則是svn或git代碼有更新纔會再製定的時間內進行構建

  • 構建

接下來就是構建過程,這裏是windows環境,因此使用的是Execute Windows batch command

使用命令執行要運行的用例如pybot.bat -d F:\outputdir F:\test\cswx\,這裏-d是將執行結果保存在F:\outputdir目錄下,而F:\test\cswx\是須要執行用例的文件夾

 

  • 構建後操做

這裏提早須要安裝一個插件Public Robot Framework test result

 

若是構建的時候,使用的是默認的輸出目錄,那麼這裏的Directory of Robot output 默認爲空。

  • 添加接收郵箱

 

  • 執行結果

構建以後查看結果如圖

 

相關文章
相關標籤/搜索