2009-07-29 61 views
5

我們有一個python項目,我們要使用buildbot開始測試。它的單元測試包括只能在某些平臺上運行的測試。所以,我們已經得到了應通過在所有平臺應通過對平臺的測試,應該只對1個特定平臺上運行測試,測試,B,C和傳遞B測試和D.如何分發和執行平臺特定的單元測試?

是什麼這樣做的最好方法是什麼?簡單的套件會很麻煩,因爲如上所述,每個測試都可以有不同的目標平臺列表。我想添加一些與平臺相匹配的「@run_on」和「@ignore_on」裝飾器來測試方法。有更好的嗎?

回答

0

我們決定與裝飾去,當使用平臺模塊等,檢查測試是否應執行,如果不是簡單地讓它通過(雖然,我們看到python2.7已經在其主幹中有一個SkipTest異常,在這種情況下可能會引發,忽略測試)。

+1

SkipTest也很有用,非常方便 - 無跳過選項。 – Almad 2009-12-23 17:36:08

0

聽起來像是一個測試裝載一個方便的地方。

退房http://docs.python.org/library/unittest.html#unittest.TestLoader.loadTestsFromName

如果你提供你也許可以創建基於您的測試命名約定套房一些合適的命名約定。

如果我有在AIX,Linux(所有)和32位Windows上運行的測試A,運行在Windows 64,Linux 64和Solaris上的測試B,並測試除HPUX之外的所有設備上運行的C,並測試D在一切上運行...有什麼可能的命名約定是在這裏?

class TestA_AIX_Linux2_Win32(unittest.TestCase): 

class TestB_Win64_Linux64_Solaris(unittest.TestCase): 

class TestC_AIX_Linux2_Win32_Win64_Linux64_Solaris(unittest.TestCase): 

class TestD_All(unittest.TestCase): 

困難的部分是「不是HP/UX」。避免負面的邏輯使你的生活變得更簡單。在這種情況下,您只需列出所有不是HP/UX的操作系統。名單很短,增長緩慢。

「所有」測試只是多數民衆贊成合併與測試,以創建一個完整的套件當前平臺的列表單獨的文本搜索。

你可以嘗試像

class TextC_XHPUX(unittest.TestCase): 

您的文字匹配規則通常是"_someOSName";你的例外將是一個奇怪的文本過濾器,以弄亂"_X"名稱。

「我們不能有操作系統的。如果我們增加什麼新的OS的肯定列表嗎?我們必須每次測試,明確列入其重命名?」是。新的操作系統市場發展緩慢,管理起來並不痛苦。

另一種方法是包括每個類(即,類級功能)或裝飾器內的信息,並使用一個定製的類加載器,用於評估類級功能。

+0

我不明白它如何幫助準確。如果我有在AIX,Linux(所有)和32位Windows上運行的測試A,在Windows 64,Linux 64和Solaris上運行的測試B,並測試運行於除HPUX之外的所有設備上的C,並測試運行於所有設備上的D ......這有什麼可能的命名約定? – abyx 2009-07-29 12:40:43

2

一對夫婦的情況下,我用這個非常簡單的方法在測試模塊:

import sys 
import unittest 

if 'win' in sys.platform: 
    class TestIt(unittest.TestCase): 
     ... 

if 'linux' in sys.platform: 
    class TestIt(unittest.TestCase): 
     ... 
相關問題