Перейти к содержимому

Фотография

Запуск отдельных тестов из набора


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2

#1 Azur

Azur

    Новый участник

  • Members
  • Pip
  • 54 сообщений
  • ФИО:Александр Згнетов
  • Город:Омск

Отправлено 09 мая 2012 - 05:52

Добрый день. Пишу на питоне тесты для webdriver. Не могу совместить нормальный вывод в логи (текст, хтмл) и запуск выборочных тестов. Или одно работает или другое.
С такой концовкой работает запуск отдельных тестов из командной строки вида python test1.py TestClass.test1
if __name__ == "__main__":
	unittest.main()
Но при этом вывод юниттеста перенаправить в файл нельзя обычными средствами. Поэтому остается смотреть результат теста в консоли, а хочется логов.

Так реализован вывод лога в файл, но при любом вызове тестов всегда прогоняется весь набор целиком. С HTMLTestRunner так же.
if __name__ == "__main__":
	with open('test.log','w') as logf:
		suite = unittest.TestLoader().loadTestsFromTestCase(TestClass)
		unittest.TextTestRunner(verbosity=2, stream = logf).run(suite)

Я плохо понимаю питон, помогите понять как совместить одно с другим. Чтобы можно было вызывать отдельные тесты и при этом результат выводился в лог.
Может кто-то предложит иной вариант для отладки отдельных тестов в большом наборе.
  • 0

#2 Гость_nuc_*

Гость_nuc_*
  • Guests

Отправлено 09 мая 2012 - 15:37

Во 2-ом случае все тесты выполняются из-за того, что объекту suite передаются все тесты из класса TestClass. Для создания определенных наборов тестов нужно использовать метод TestSuite unittest'a.
Пример из документации (http://docs.python.o...y/unittest.html):
def suite():
    suite = unittest.TestSuite()
    suite.addTest(WidgetTestCase('test_default_size'))
    suite.addTest(WidgetTestCase('test_resize'))
    return suite

В вашем случае это будет выглядеть примерно так:
def suite():
    suite_new = unittest.TestSuite()
    suite_new.addTest(TestClass('test1'))
    suite_new.addTest(TestClass('test2'))
    return suite_new

После вызова функции suite в переменной suite_new будет список добавленных тестов. Таким образом можно создавать различные наборы тест кейсов. Либо создать общий набор и затем закомментировать ненужные для исполнения в определенный момент тест кейсы.

Запуск с логированием:
if __name__ == "__main__":
        with open('test.log','w') as logf:
                unittest.TextTestRunner(verbosity=2, stream = logf).run(suite())

Если что-то не заработает, пишите, будем смотреть. Сам в данный момент пишу тесты на питоне и вопрос логирования нужно будет окончательно решить в ближайшем будущем, так как смотреть результаты в консоли не очень удобно.

Полный пример:
# -*- coding: utf-8 -*-

from selenium import webdriver
import unittest

class testsall (unittest.TestCase):
    
    def test_open_page(self):
        wd = webdriver.Firefox()
        wd.maximize_window()
        wd.implicitly_wait(60)
        wd.get("http://ukr.net")
        wd.close()
    
def suite():
    suite1 = unittest.TestSuite()
    suite1.addTest(testsall("test_open_page"))
    return suite1

if __name__ == "__main__":
    with open('/home/andrey/test.log','w') as logf:
                unittest.TextTestRunner(verbosity=2, stream = logf).run(suite())


#3 Azur

Azur

    Новый участник

  • Members
  • Pip
  • 54 сообщений
  • ФИО:Александр Згнетов
  • Город:Омск

Отправлено 09 мая 2012 - 16:17

Спасибо. С этим я разобрался. Конечно не так, как планировал, но тоже устраивает. Я сделал основной тест с выводом на HTMLTestRunner, а для отладки использую отдельные файлы, ссылающиеся на основной. Это позволило еще и выводить результаты отладки в консоль, не ломая вывода основного теста.
  • 0


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных