2013-03-28 27 views
5

Tôi đang sử dụng py.test để xây dựng khung kiểm tra chức năng, vì vậy tôi cần có khả năng xác định các thử nghiệm chính xác để chạy. Tôi hiểu vẻ đẹp của bộ sưu tập thử nghiệm năng động, nhưng tôi muốn có thể chạy kiểm tra sức khỏe môi trường kiểm tra đầu tiên của tôi, sau đó chạy kiểm tra hồi quy của tôi sau; phân loại đó không loại trừ các thử nghiệm trong các bộ này đang được sử dụng cho các mục đích khác.chạy bộ kiểm thử (một bộ sưu tập tùy ý) với py.test

Các bộ thử nghiệm sẽ được gắn với các dự án xây dựng Jenkins. Tôi đang sử dụng osx, python 2.7.3, py.test 2.3.4.

Vì vậy, tôi có một trường hợp thử nghiệm như sau:

# sample_unittest.py 
import unittest, pytest 

class TestClass(unittest.TestCase): 

    def setUp(self): 
     self.testdata = ['apple', 'pear', 'berry'] 

    def test_first(self): 
     assert 'apple' in self.testdata 

    def test_second(self): 
     assert 'pear' in self.testdata 

    def tearDown(self): 
     self.testdata = [] 

def suite(): 
    suite = unittest.TestSuite() 
    suite.addTest(TestClass('test_first')) 
    return suite 

if __name__ == '__main__': 
    unittest.TextTestRunner(verbosity=2).run(suite()) 

Và tôi có một bộ kiểm tra như thế này:

# suite_regression.py 
import unittest, pytest 
import functionaltests.sample_unittest as sample_unittest 

# set up the imported tests 
suite_sample_unittest = sample_unittest.suite() 

# create this test suite 
suite = unittest.TestSuite() 
suite.addTest(suite_sample_unittest) 

# run the suite 
unittest.TextTestRunner(verbosity=2).run(suite) 

Nếu tôi chạy sau từ dòng lệnh chống lại các bộ, test_first chạy (nhưng tôi không nhận được thông tin bổ sung mà py.test sẽ cung cấp):

python functionaltests/suite_regressi on.py -v

Nếu tôi chạy sau đây đối với các bộ, 0 xét nghiệm được thu thập:

functionaltests py.test/suite_regression.py

Nếu tôi chạy sau chống lại các testcase, test_first và test_second chạy:

py.test functionaltests/sample_unittest.py -v

01.

Tôi không thấy cách thực hiện py.test bằng từ khóa sẽ giúp tổ chức các thử nghiệm thành các bộ. Đặt testcases vào một cấu trúc thư mục và chạy py.test với các tùy chọn thư mục sẽ không cho phép tôi tổ chức các bài kiểm tra theo vùng chức năng.

Vì vậy, câu hỏi của tôi:

  1. Có một cơ chế py.test để xác định các nhóm độc đoán của các bài kiểm tra trong một định dạng tái sử dụng được?
  2. Có cách nào để sử dụng unittest.TestSuite từ py.test không?

EDIT: Vì vậy, tôi đã thử các dấu kiểm tra py.test, cho phép tôi gắn cờ các hàm thử và phương pháp thử với nhãn tùy ý, sau đó lọc cho nhãn đó tại thời gian chạy.

# conftest.py 
import pytest 

# set up custom markers 
regression = pytest.mark.NAME 
health = pytest.mark.NAME 

Và tôi trường hợp thử nghiệm Cập nhật:

# sample_unittest.py 
import unittest, pytest 

class TestClass(unittest.TestCase): 

    def setUp(self): 
     self.testdata = ['apple', 'pear', 'berry'] 

    @pytest.mark.healthcheck 
    @pytest.mark.regression 
    def test_first(self): 
     assert 'apple' in self.testdata 

    @pytest.mark.regression 
    def test_second(self): 
     assert 'pear' in self.testdata 

    def tearDown(self): 
     self.testdata = [] 

def suite(): 
    suite = unittest.TestSuite() 
    suite.addTest(TestClass('test_first')) 
    return suite 

if __name__ == '__main__': 
    unittest.TextTestRunner(verbosity=2).run(suite()) 

Vì vậy, chạy thu thập lệnh sau và chạy test_first:

functionaltests py.test/sample_unittest.py -v -m healthcheck

Và điều này thu thập và chạy test_first và test_second:

py.test functionaltests/sample_unittest.py -v -m hồi quy

Vì vậy, trở lại của tôi câu hỏi: đánh dấu là một giải pháp từng phần, nhưng tôi vẫn không có cách nào để kiểm soát việc thực hiện các bài kiểm tra được đánh dấu đã thu thập.

+0

khi bạn nói * "không có cách nào để kiểm soát việc thực hiện các bài kiểm tra được đánh dấu đã thu thập" * ý của bạn là gì? mệnh lệnh? –

+0

Có, tôi muốn kiểm soát việc thực hiện theo một thứ tự tùy ý và không dựa vào bất kỳ thứ tự mặc định nào của các thử nghiệm được thu thập. – sophe

Trả lời

2

Hiện tại không có cách nào trực tiếp để kiểm soát thứ tự thực hiện kiểm tra. FWIW, có một móc plugin pytest_collection_modifyitems mà bạn có thể sử dụng để thực hiện một cái gì đó. Xem https://github.com/klrmn/pytest-random/blob/master/random_plugin.py cho một plugin sử dụng plugin để triển khai ngẫu nhiên.

+0

Điều này mang lại cho tôi một cách để tiến lên phía trước, cảm ơn. – sophe

+0

@sophe kiểm tra trong một thư mục vẫn được thực hiện theo thứ tự bảng chữ cái :) mặc dù Holger có thể nói "không dựa vào nó" –

2

Tôi đoán đó là hơi muộn, nhưng bây giờ tôi chỉ cần hoàn thành một plugin lựa chọn tương tác với tài liệu ở đây:

https://github.com/tgoodlet/pytest-interactive

Tôi thực sự sử dụng móc Holger nêu trên.

Nó cho phép bạn chọn một lựa chọn kiểm tra ngay sau giai đoạn thu thập bằng cách sử dụng IPython. Đặt hàng các bài kiểm tra khá dễ dàng bằng cách sử dụng các slice, subscripts hoặc tab-completion nếu đó là những gì bạn đang theo dõi. Lưu ý rằng đó là một công cụ tương tác có nghĩa là để sử dụng trong quá trình phát triển và không quá nhiều cho chạy hồi quy tự động.

Để đặt hàng liên tục sử dụng các dấu hiệu tôi đã sử dụng pytest-ordering thực sự khá hữu ích, đặc biệt nếu bạn có các thử nghiệm tiên quyết cơ sở trong một bộ hồi quy dài.

Các vấn đề liên quan