簡體   English   中英

Python中的批處理測試(單元測試)

[英]Batch tests (unittest) in Python

我有一個單元測試,用於測試url的連接。 個別地它可以工作,但是我有幾個要測試的URL,所以我試圖調用此測試模塊並對它們進行批處理! 但是在調用測試函數時出現錯誤。 你可以幫幫我嗎?

test.py:

class TestConnector(unittest.TestCase):

    def setUp(self):
        [...]

    def test_connection(self, url):
        conn = Connector(self.user)
        self.assertNotEqual(conn.read(url), None)

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

現在我想測試幾個URL,所以我用它們創建了文件,並嘗試調用測試函數:

import test

with open('URL_list.txt') as f:
    urls = f.readlines()

suite = unittest.TestLoader().loadTestsFromModule(test.TestConnector)

for url in urls:
    unittest.TextTestRunner().run(suite)

而且我收到此消息的次數與我獲得的網址一樣多:

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK

----------------------------------------------------------------------

怎么了?

您的測試方法將被忽略,因為它帶有一個參數。 測試方法從不接受參數。 這與Python永遠不會神奇地將局部變量名傳遞給函數作為參數這一事實完全無關。 您必須顯式傳遞它。

而是將您的url加載集成到測試本身中:

class TestConnector(unittest.TestCase):

    def setUp(self):
        [...]

    def test_connections(self):

        with open('URL_list.txt') as f:
            for url in f:
                conn = Connector(self.user)
                self.assertNotEqual(conn.read(url.strip()), None)

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

或動態創建測試方法:

class TestConnector(unittest.TestCase):
    def setUp(self):
        [...]

def generate_test(url):
    def test(self):
        conn = Connector(self.user)
        self.assertNotEqual(conn.read(url), None)

if __name__ == '__main__':
    with open('URL_list.txt') as f:
        for i, url in enumerate(f):
            test_name = 'test_{}'.format(i)
            setattr(TestConnector, test_name, generate_test(url.strip()))

    unittest.main()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM