2013-09-12 3 views
1

В настоящее время у меня есть тестовый пример, который проходит через словарь словарей, каждый из которых содержит отдельное значение, которое я хочу протестировать на веб-странице (я использую Selenium Webdriver, хотя это необязательно относящихся к вопросу). Этот тестовый пример по существу проверяет, что все возможные пути покупки продукта работают правильно, а это примерно 200 различных путей. Я хочу, чтобы код был простым и не проводил проверку для каждого. Ниже приведен пример того, что я сделал, чтобы сократить код:Soft Asserts in unittest python

self.templates = {"sales": self.sales", ...) 
self.template_keys = ["sales",....] 
self.sales - {"locator1": "<locataor info>, ...) 
.... <more dictionaries> 

for key in self.template_keys: 
    for template in self.templates[key]: 
     <do purchase path in selenium webdriver> 
     assert end_url == expected_end_url # Would like failure to not end test 

Мой вопрос заключается в том, чтобы получить уверенно утверждать, вложенная цикл не фатально неудачу и перейти к следующему шагу. У меня есть read this stackoverflow article, и это похоже на то, что он решил сделать свое дело, не давая никакой информации о том, что он сделал. Я знаю, что это анти-шаблон, но мне не стоит писать все отдельно. Мне интересно, есть ли у кого-то хорошее решение, что работает like soft asserts in Groovy.

+0

попробуйте использовать ['assertEqual()'] (http://docs.python.org/dev/library/unittest.html#unittest.TestCase.assertEqual) – Serdalis

+0

Идея состоит в регистрации сбоя, но продолжайте идти, поэтому вы тоже видите другие неудачи, верно? – user2357112

+0

Будет ли это держать утверждение от остановки теста при неудаче? – derigible

ответ

0

Почему не просто поймать исключение:

for key in self.template_keys: 
    for template in self.templates[key]: 
     <do purchase path in selenium webdriver> 
     try: assert end_url == expected_end_url # Would like failure to not end test 
     except AssertionError: // do something. 
+0

Это имеет смысл, мне было интересно, было ли что-то еще, что сделали люди. Наверное, нет. – derigible

2

Сбор отчет нескольких неудач: Заменить assert с помощью if и создать дескриптор для каждого сбоя в его теле. Собрать эти дескрипторы в списке (первоначально пустые: failures = []):

if end_url != expected_end_url: 
    failures.append(end_url + ' != ' + expected_end_url) 

В конце концов, assert список пуст, и использовать его в качестве сообщения об ошибке, если это не так:

assert(failures == [], str(failures)) 

Много более читаемым, чем уловки исключений - и очень гибкий.