Unittest和robot Framework 的區別



鏈接:https://www.zhihu.com/question/263687755/answer/271878708

單從做Web UI 自動化來說,這兩種方案沒什么區別。看個人喜好!接下來我從實現原理和優缺點兩方面來介紹這兩種方案。

Selenium 支持不同的編程語言,說白了就是針對不同的編程語言都寫一遍API。

SeleniumHQ/selenium

不理解的可以去看 selenium開源項目的目錄,其中 java目錄就是針對java語言的,py目錄是針對python語言的,rb目錄就是Ruby語言的...

那針對 robot framework的呢?

robotframework/SeleniumLibrary

在這里,不過不是由 selenium團隊維護,而是由 robot framework 團隊維護。

問題來了,不同的團隊去寫Selenium 的實現不會有偏差么?

一般不會,因為大家都遵循 WebDriver 規范。

WebDriver

包括瀏覽器廠商,以及他們自家出的瀏覽器驅動。所以,你才可以這么順暢的寫一遍Selenium 腳本,任意切換瀏覽器來執行。

所以,這兩個方案的對比,重點是 unittest 單元測試框架和 robot framework 框架的對比!題主問到點上了,說明對這兩個工具還是有所了解的。(不過,你的unittest單詞拼錯了噢!哈哈!)

unittest 是基於Python的單元測試框架,所以,本質上在使用它的時候,寫的還是Python語言。

from selenium import webdriver
import unittest


class MyTest(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Firefox()
        self.base_url = "https://www.baidu.com"

    def test_baidu(self):
        driver = self.driver
        driver.get(self.base_url)
        driver.find_element_by_id("kw").send_keys("selenium")
        driver.find_element_by_id("su").click()

    def tearDown(self):
        self.driver.quit()


if __name__ == "__main__":
    unittest.main()

這里貼了一個用unittest + selenium寫UI 自動化測試的demo,你可以感受一下它有語法。

優點:

靈活,只要你懂Python開發,想怎么玩就怎么玩。想實現什么功能就實現什么功能(自動發郵件,定時任務...)。

缺點:

學習成本高,我們寫的UI自動化項目也是項目啊。開發考慮的問題,我們也需要,比如封裝,設計模式等。

什么都要自己來,如果你想生成HTML格式的報告,還需要去找HTMLTestRunner這樣擴展。

 

robot framework也是基於Python的一個測試框架,不過,它是專門為了解決自動化問題而生的。並且,它封裝了一套自己的語法

*** Settings ***
Library           SeleniumLibrary

*** Test Cases ***
Baidu search case
    Open Browser    http://www.baidu.com    chrome
    Input text    id=kw    robot framework
    click button    id=su   
    close Browser

這里貼一個robot framework + seleniumLibrary 寫的UI 自動化測試的的demo。你可以再來感受一下。

優點:

1、不需要懂編程也可以用。

2、有豐富的測試庫:AutoItLibraryAppiumLibraryHTTP library (Requests) ... ,所以,滿足了主流的各種自動化測試需求。

3、實再滿足不了測試需求,只要你懂Python,也可以自己去開發關鍵字來用。

4、便於團隊推廣,不是所有測試團隊都懂編程的,也不是每個測試都對技術有追求的。這個時候,只要團隊中有一個人懂python開發robot famework 關鍵字,其它人會關鍵字就可以。

5、集成了非常棒的HTML測試報告,還帶錯誤截圖噢!

缺點:

1、一樣有學習成本。robot framework 也不帶錄制功能;不是錄個腳本隨便跑的那種。

2、robot framework 目前對Python3 的支持性不好,主要是它的擴展庫的問題。

3、我不太喜歡 robot framework的語法(我說的是我)。

鏈接:https://www.zhihu.com/question/263687755/answer/271878708

 

Robot Framework: 自定義自己的python庫

 

利用Robot Framework編寫測試用例,往往需要開發自己的關鍵字,有的關鍵字需要通過自己編寫python代碼來實現。這在rf中,就需要自己定義python庫。這個過程其實不復雜,本文來介紹下。

1、在python安裝目錄下的 Lib\site-packages 目錄下 新建一個目錄,目錄名就是庫名,如 NewLibrary

2、在新建的NewLibrary目錄下創建一個python文件,任何合法的文件名即可,擴展名為py。如:myclass.py

其內容如下

復制代碼
class MyClass(object):
    def __init__(self):
        pass
 
    def printMsg(self,msg):
        print "hello "+msg
復制代碼

上面代碼定義了一個python類,其中除構造方法 _init_ 外,還定義了一個printMsg方法,該方法其實就是rf中的關鍵字,可以直接在rf中使用。下面我們介紹。

3、在新建的NewLibrary目錄下創建 __init__.py 文件,文件名必須固定這樣。該文件的功能,就是把關鍵字類暴露出來,讓rf能知道。
其內容如下:

from myclass import MyClass

class NewLibrary(MyClass):
    ROBOT_LIBRARY_SCOPE = 'GLOBAL'

4、通過前面三個步驟,一個最簡單的自定義的NewLibrary庫就創建好了,在rf工具中就可以使用了
1)先要導入 NewLibrary 庫

2)使用關鍵字printMsg。需要說明的是,在rf中引用時,既可以寫成 printMsg,也可寫成 print msg。一般習慣用空格把單詞分開。因為rf關鍵字不區分大小寫。

*** Test Cases ***
successsd
    print msg    god
    printMsg    ss
    printmsg    yy

5、增加新的關鍵字
增加新的關鍵字很簡單,只需在MyClass類中增加新的方法即可。如:

復制代碼
class MyClass(object):
    def __init__(self):
        pass
 
    def printMsg(self,msg):
        print "hello "+msg
        
    def join_info(self,a,b):
        print a+b
復制代碼

這里定義了 join_info方法。在rf中使用時,可以寫成 join  info 用空格分開。

上面介紹了最簡單的自定義模塊,雖然簡單,但實際可以滿足大部分自己開發的需求了。

https://www.cnblogs.com/51kata/p/5126227.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM