Вопрос: Как при фейле базового теста не запускать все остальные? Давно пытаюсь решить проблему, пока не осилила. Подскажите пожалуйста способ не запускать тысячи тестов если зафейлился базовый кейс. test_suites\basic\login.py import unittest class LoginBase(TestCaseBase): def testconnect(self): """Basic""" pass test_suites\tests\tests.py import unittest class Example1233(TestCaseBase): @connect def testLoader123(self): """ TEST #1"""""" pass class Example6675(TestCaseBase): @connect def testLoader456(self): """TEST #2""" pass @connect def testLoader4556(self): """ TEST #3"""""" pass @connect def testLoader4564(self): """ TEST # N"""""" pass Сейчас если connect фейлится, то фейлятся все тесты, это лишняя трата времени и лишня работа агента СI который запустил тесты. В результяте запуска тестов ..\.. \python\python.exe ..\..\..\ python\Scripts\nosetests-script.py --all-modules --with-path=. -v --nocapture pause получается очень очень много тестов и все FAIL Basic ...FAIL TEST #1 ...FAIL TEST #2 ...FAIL TEST #3 ...FAIL TEST #N ...FAIL Можно ли как-то сделать либо через батник либо через методы unittest чтоб первым делом запускался test_suites\basic\login.py Если он ФЕЙЛ, то другие модули с тестами запускать не нужно. Basic ...FAILTEST #1 ...FAIL TEST #2 ...FAIL TEST #3 ...FAIL TEST #N ...FAIL
вот хороший мануал помог:
http://gahcep.github.com/blog/2013/02/10/qa-in-python-unittest/
я так понимаю, что проблема уже решена
если не трудно, кинь сюда результат
а еще, я так понимаю, что тесты пишутся в стиле unittest, а просто запускаются с помощью nosetests?
вариантов решения есть несколько
1. сделать отдельный запуск на CI основного теста и если он прошел, то запускать следующий билд план. А если нет, то нет
2. использовать декорадоторы unittest.skip или unittest.skipIf
3. написать main функцию запуска одного теста, и прогона последующих тестов в зависимости от его результата
4. ну и можно написать програмный запуск тестов и для теста сделать декоратор @critical например и проверять, если для теста с @critical получили fail тогда останавливать весь прогон
а также в самом nose есть nose.plugins.skip, а там есть Skip, SkipTest
Пропустила ответ на свое сообщение, мне стыдно(
Да спасибо! Самые простые способы - это 2 и 3.
Вот быстрый пример того как сделала я:
import unittest
class TestSmoke(unittest.TestCase):
“”“Smoke test”""
def test_1(self):
self.failIfEqual(100, 100)
class OtherTest(unittest.TestCase):
“”“Some cases - not need to run them if smoke test fails”""
def test_2(self):
self.assertListEqual([1, 2, 3], [1, 2, 3])
def test_3(self):
self.assertListEqual([10, 6, 7], [10, 6, 7])
#################################################################################
if name == ‘main’:
tests = unittest.defaultTestLoader.loadTestsFromTestCase(TestSmoke)
smoke_tests = unittest.TextTestRunner(verbosity=2).run(tests)
smoke_result = unittest.TextTestResult.wasSuccessful(smoke_tests)
# wasSuccessful() - Return True if all tests run so far have passed, otherwise returns False.
if smoke_result:
#If smoke tests pass successful run other:
all_tests = unittest.defaultTestLoader.loadTestsFromTestCase(OtherTest)
unittest.TextTestRunner(verbosity=2).run(all_tests)
Результат если базовый тест прошел успешно:
test_1 (main.TestSmoke) … ok
Ran 1 test in 0.000s
OK
test_2 (main.OtherTest) … ok
test_3 (main.OtherTest) … ok
Ran 2 tests in 0.000s
OK