2011-08-09 23 views
5

Tôi cần phải làm một bộ đồ trăn lớn bao gồm các va li khác và testcase mà tôi đã thực hiện để thực hiện cùng nhau.TestSuite với testuites và testcases

Làm cách nào để thực hiện việc này?

Ví dụ, ở đây có một suitecase (suiteFilter.py) mà tôi muốn thêm:

import testFilter1 
import testFilter2 
import unittest 
import sys 

def suite(): 
    return unittest.TestSuite((\ 
     unittest.makeSuite(testFilter1.TestFilter1), 
     unittest.makeSuite(testFilter2.TestFilter2), 
     )) 


if __name__ == "__main__": 
    result = unittest.TextTestRunner(verbosity=2).run(suite()) 
    sys.exit(not result.wasSuccessful()) 

Và một cấu trúc testcase (Invoice.py):

from selenium import selenium 
import unittest, time, re 
from setup_tests import filename, fileForNrTest, username, password, server_url 
fileW=open(filename,'a') 


class TestInvoice(unittest.TestCase): 

    def setUp(self): 
     self.verificationErrors = [] 
     self.selenium = selenium("localhost", 4444, "*firefox", server_url) 
     self.selenium.start() 

    def test_invoice(self): 
     sel = self.selenium 
     [...] 

    def tearDown(self): 
     self.selenium.stop() 
     self.assertEqual([], self.verificationErrors) 


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

Cảm ơn bạn!

Trả lời

12

Bạn có thể cung cấp thêm một số thông tin như cấu trúc của các trường hợp/chương trình và bộ thử chương trình của bạn. Cách tôi làm điều đó là xác định một bộ() cho mỗi mô-đun. Vì vậy, tôi đã nói cho module UserServiceTest:

def suite(): 
    """ 
     Gather all the tests from this module in a test suite. 
    """ 
    test_suite = unittest.TestSuite() 
    test_suite.addTest(unittest.makeSuite(UserServiceTest)) 
    return test_suite 

if __name__ == "__main__": 
    #So you can run tests from this module individually. 
    unittest.main() 

Sau đó, tôi có một bài kiểm tra chính cho mỗi gói:

def suite(): 
""" 
    Gather all the tests from this package in a test suite. 
""" 
    test_suite = unittest.TestSuite() 
    test_suite.addTest(file_tests_main.suite()) 
    test_suite.addTest(userservice_test.suite()) 
    return test_suite 


if __name__ == "__main__": 
    #So you can run tests from this package individually. 
    TEST_RUNNER = unittest.TextTestRunner() 
    TEST_SUITE = suite() 
    TEST_RUNNER.run(TEST_SUITE) 

Bạn có thể làm điều này cho đến khi recursevly thư mục gốc của dự án của bạn. Vì vậy, thử nghiệm chính từ gói A sẽ thu thập tất cả các mô-đun trong gói A + thử nghiệm chính từ các gói con của gói A và như vậy. Tôi giả sử bạn đang sử dụng unittest vì bạn không đưa ra bất kỳ chi tiết bổ sung nào nhưng tôi nghĩ cấu trúc này cũng có thể được áp dụng cho các khung thử nghiệm python khác.


Edit: Vâng tôi không khá chắc chắn tôi hoàn toàn hiểu vấn đề của bạn, nhưng từ những gì tôi có thể hiểu được bạn muốn thêm cả bộ quy định tại suiteFilter.py và testcase quy định tại Invoice.py trong cùng một bộ? Nếu vậy, tại sao không chỉ thực hiện trong một ví dụ chính: Ví dụ:

import unittest 
import suiteFilter 
import Invoice 


def suite() 
    test_suite = unittest.TestSuite() 
    test_suite.addTest(suiteFilter.suite()) 
    test_suite.addTest(unittest.makeSuite(Invoice)) 


if __name__ == "__main__": 
    result = unittest.TextTestRunner(verbosity=2).run(suite()) 
    sys.exit(not result.wasSuccessful()) 

Bạn có thể thêm các thử nghiệm và suite giống với test_suite.

+0

Cảm ơn bạn, tôi đã cung cấp thêm thông tin bổ sung –

+0

Đã chỉnh sửa andswer của tôi. – Bogdan

+0

Cảm ơn rất nhiều! Bạn đã giải quyết được vấn đề của tôi! Có lẽ bạn có thể giúp tôi với một điều khác: Tôi muốn hoàn thành bộ suitecase lớn nếu một trong những suitecase hoặc testcase bên trong thất bại. Tại thời điểm này, nếu một trong số họ thất bại, suitecase lớn tiếp tục với vali/testcase tiếp theo. –