2014-09-02 65 views
3

我有一大堆的Perl的測試:參數的perl * .T證明現有的測試

  1. 功能測試
  2. 機械化測試
  3. 實際單元測試,斷言上的功能和返回值等
  4. 測試涉及到外部服務,如Web服務
  5. DB中心的測試
  6. REST測試

我通過證明運行它們,理論上將它們重新排列到各種目錄中,並運行諸如find t/ -name '*.t' ! -name '*timeout*' | xargs prove -l之類的東西,但是以特定的方式命名測試變得非常困難(並且不是很好的工程),所以我們可以通過解析它們find

當我們通過命令行運行測試時,是否有一種方法可以將通配符列表傳遞給prove
如果沒有,是否有比我們目前使用的更理智的方法?

+1

這太含糊了。你想要參數化哪些軸?通常情況下,有沒有一種模式,你需要一個簡單的命名方案或一個擴展到任何可以想象的測試組合的高級解決方案? – tripleee 2014-09-02 19:07:56

+0

尋找https://nose.readthedocs.org/en/latest/(nose)提供的類似於https://nose.readthedocs.org/en/latest/plugins/attrib.html的屬性,屬性可以是「MYSQL在Python /鼻子中,「DB」「SLOW」的屬性被聲明爲@attr('mysql'),通常情況下運行ALL,對於模式,用戶應該能夠創建自己的模式。希望有道理的 – kamal 2014-09-02 20:56:59

回答

3

通常的方法是通過環境變量。測試文件檢查它是否應該運行,如果它不是很快skip_all

例如:

use strict; 
use warnings; 
use Test::More; 

BEGIN { 
    plan skip_all => "not running extended tests" unless $ENV{EXTENDED_TESTING}; 
}; 

# your slow tests here 

done_testing(); 

現在通常是測試將被跳過。但是,如果將EXTENDED_TESTING環境變量設置爲"1",它將運行。

Standard環境變量包括EXTENDED_TESTING,RELEASE_TESTINGNONINTERACTIVE_TESTINGNO_NETWORK_TESTING也正在迎頭趕上。

有各種不同的模塊,這個如Test::Is允許簡單的語法自動化:

use strict; 
use warnings; 
use Test::More; 
use Test::Is "extended"; 

# your slow tests here 

done_testing(); 

如果你有一些其他的應用程序特定的類別,你就必須自己創造一些環境變量。如果你認爲它們看起來普遍有用,那麼寫一些關於它們的博客,也許它們會成爲標準的環境變量。

1

我想我找到了答案Test::Less

測試::少 - 測試分類和子集執行

測試更少通常保持標籤和測試文件之間的映射的索引文件,在文件中被稱爲T /測試少/ index.txt。您可以使用--file選項或TEST_LESS_INDEX環境變量覆蓋它。

Tags are strings matching /^[\w\-]+$/. 

的-list和-prove命令採取所謂的標籤規範。

規範是標籤列表和可能的文件名稱。

測試少-prove富酒吧巴茲

運行所有測試FOO,酒吧測試和巴茲測試。

test-less -prove foo,bar,baz 

我能修復的Test ::較少的編譯錯誤甚至後,我仍然無法運行使用測試::少自2009年以來已被打破任何測試,所以在看的Test ::類可能的答案:

http://search.cpan.org/~ether/Test-Class-0.46/lib/Test/Class.pm

有時候,你只是想運行一個測試。評論其他測試或編寫代碼以跳過它們可能很麻煩,因此您可以指定TEST_METHOD環境變量。該值應該是一個有效的正則表達式,如果存在,則只運行名稱與正則表達式匹配的測試方法。啓動,設置,拆卸和關機測試仍將運行。

這樣做的一個簡單方法是在runtests方法被調用之前指定環境變量。

Running a test named customer_profile: 



#! /usr/bin/perl 
use Example::Test; 

$ENV{TEST_METHOD} = 'customer_profile'; 
Test::Class->runtests; 

    Running all tests with customer in their name: 

    #! /usr/bin/perl 
    use Example::Test; 

    $ENV{TEST_METHOD} = '.*customer.*'; 
    Test::Class->runtests; 
+0

剛剛發現Test :: Less不會編譯或得到安裝在CentOs上,而最後一次Test :: Less在8年前有任何活動,因爲Perl的愛可以讓任何人修復Test :: Less – kamal 2014-09-08 03:30:30

+0

ref :http://www.cpantesters.org/cpan/report/150f01a0-5ea2-11e2-992e-e7c00a4a7996 for Test :: Less test Failure – kamal 2014-09-08 04:45:31