2011-11-10 61 views
3

長時間的互聯網搜索後,我想問你以下問題。Jenkins + RobotFramework測試自動化

我們使用Jenkins構建和單元測試用C++編寫的模擬代碼。

這很有效。在研究了fitnesse和robotframework之後,我仍然無法運行以下測試問題。

我的程序是一個命令行程序,它讀取一些輸入文件並計算一些輸出數據。 (例如simcode.exe -j輸入## INP - > output.dat)

我尋找我可以經由web接口創建一個測試套件的方法。這意味着我爲每個測試用例提供了一個輸入文件和一些引用輸出數據,並且在成功構建Jenkins之後執行測試套件。根據輸出數據和參考輸出數據之間的差異結果,應該創建一個可以提供給Jenkins的xml文件。這個XML文件應該包含所有測試用例結果的信息(例如成功與否)。

xml文件的信息應該再次顯示在Jenkins中。

我正在尋找一種方法,我不需要將任何庫編譯到我的程序中。

我會非常感謝任何解釋如何實現與RobotFramework的提示。 (它甚至有可能嗎?)

在此先感謝!

回答

1

機器人框架是一個自動化測試工具......你可以做很多不同的事情與...

我真的不明白你的意思是通過一個Web界面的測試套件...但一般你所描述的功能,似乎可以用RobotFramework做...

簡訊

您可以創建具有例如,你可以有onef或者你希望每一個輸入文件許多測試用例測試套件去檢查!

OperatingSystem Build In Library有關鍵字投放,或許您可以使用,或者如果你正在運行的命令遠程您可以使用從可選SSHLibrary

執行命令對於每個測試實例,你可以創建一個運行了一步命令和另一個驗證輸出文件是否符合您的預期。如果它們匹配的測試用例被標記爲合格,否則被標記爲失敗...

RobotFramework可以產生同時運行的是HTML格式的日誌和報告文件中的每個測試套件。

詹金斯和Hudson有RobotFramework一個插件,你可以用一個非常好的方式來顯示這些輸出文件! 即有多少測試用例已通過/失敗

0

你想要什麼似乎是一個銀彈。 這是可行的,你不需要編譯一個東西,但你仍然需要寫一些關於機器人框架的邏輯。

  1. 據我瞭解,你需要調用的東西在CLI - 這是小事,機器人已經這樣做了
  2. 它有一個輸入文件和一些輸出數據 - 平凡, - 機器人已經這樣做了
  3. 您需要將實際輸出數據與預期輸出數據進行比較 - 在​​這裏您需要一些手肘潤滑脂。
  4. 打包日誌 - 機器人已經做到了這一點。
  5. 在詹金斯展示他們 - 微不足道 - 機器人已經做到了這一點。

所以所有的繁重工作已經完成。

  1. 調用CLI - 如果你想有一個靈活的方式來輸入的東西使用OperatingSystem的

    *** Settings *** 
    Library OperatingSystem 
    
    *** Test Cases *** 
    Basic test 
        Run Me A Command simcode.exe -j input01.inp 
    
    *** keywords *** 
    Run Me A Command 
        [Arguments] ${command} 
        ${rc} ${output} =  Run and Return RC and Output ${command} 
        Log ${output} 
        Should Be Equal As Integers ${rc} 0 
    
        Should Not Contain ${output} FAIL 
    
  2. *** settings *** 
    Library OperatingSystem 
    
    *** Test Cases *** 
    Combinations 
        [Template] Basic test 
        input01.inp 
        input02.inp 
        input03.inp 
    
    *** keywords *** 
    Basic test 
        [Arguments] ${input} 
        Run Me A Command simcode.exe -j ${input} 
    
    
    Run Me A Command 
        [Arguments] ${command} 
        ${rc} ${output} =  Run and Return RC and Output ${command} 
        Log ${output} 
        Should Be Equal As Integers ${rc} 0  
    
        Should Not Contain ${output} FAIL 
    
  3. 接下來,我們需要比較兩個文件的內容... 假設您將文件移到了一個方便的位置,您可以爲自己寫一個密鑰字內容

    *** settings *** 
    Library OperatingSystem 
    
    *** Test Cases *** 
    Combinations 
        [Template] Basic test 
        ../resources/input01.inp ../resources/expectedoutput01.out 
        ../resources/input02.inp ../resources/expectedoutput02.out 
        ../resources/input03.inp ../resources/expectedoutput03.out 
    
    *** keywords *** 
    Basic test 
        [Arguments] ${input} ${expected_output} 
        Run Me A Command simcode.exe -j ${input} 
        Log File output.data 
        Compare Files ${expected_output} output.data 
    

假設內容是一個參數列表,在INI格式進行比較。 例如,讓我們假設您計算輸入文件中存在的數字的平方根

我們如何存儲預期數據? 假設我們有一個名爲expected.dat

[defaults] 
n_1=1 
n_4=2 
n_9=3 

文件,我們還有output.data

[defaults] 
n_1=1 
n_4=2 
n_9=2 

然後我們需要給自己寫一個文件比較。 要麼你去DIFF和OperatingSystem的圖書館,如果你有信心,文件應該是相同的,或者你可以編寫一個簡單的比較:

def get_param(self,theFile) 
    config = ConfigParser.RawConfigParser() 
    config.read(theFile) 
    return config.items("defaults") 


def compareMyDict(self, expected, actual): #There are better ways of doing this 
    for k, v in actual: 
     if v != expected[k]: 
      print("error message") 
      print(k) 
      print(v) 
      print(expected[v]) 
      #print whatever you deem fit 
      return 
     print("Matched OK " + str(k)) 
     print(k) 
     print(v) 
     print(expected[v]) 

def compare_files(self, expectedFile, actualFile): 
    ''' 
    From sourceFile formatted 
    [defaults] 
    key=value 
    ''' 

    d1 = get_param(expectedFile) 
    d1 = get_param(actualFile) 

    compareMyDict(d1,d2) 
    checkLenghts(d1,d2) 
    criteria2(d1,d2)  
    #etc. 

4和5運行後,您可以使用發佈假象併發布機器人結果插件以將格式良好的輸出傳遞給Jenkins。

瞧!

PS:代碼可能無法運行 - 我在一個簡單的編輯器中寫了自由式,沒有語法突出顯示,我沒有測試它。