нужно, чтобы тест останавливался, если метод empt_acc.product_connected_to_campaign(campaign_name=“Basic commission”) возвращает пустой список?
def product_connected_to_campaign(self,campaign_name):
campaign = list(db.campaigns.find({"name": campaign_name}))
for i in campaign:
product_id_list = i.get('promotions')
if len(product_id_list) == 0:
print("No products in campaign")
else:
for product_id in product_id_list:
print(product_id)
Смотря, что вы имеете в виду под остановился - это может быть статус failed, skipped или passed. Как показывали выше, у пайтеста есть методы для досрочного выхода. Но вообще делать условия в тестах - это плохая идея. Условия в тесте - это способ пропустить баг. Тест обычно заточен на конкретные условия и если эти условия не произошли, то тест должен падать. Если возвращается пустой массив, хотя не должно, то это выглядит как баг.
Обычно в таких случаях создают два теста: один проверяет поведение системы, когда нет продуктов, другой проверяет поведение, когда продукты есть.
P.S. и не используйте print в тестах Это функция для дебага, лучше логгер и ассерты.
Начнём с того, что я вообще не вижу, чтобы приведенный Вами метод что-то возвращал.
Мож, я, конечно, и неправ, но, по-моему, пачка принтов в цикле выведет список на экран, но не вернёт его в качестве списка наверх. Кроме того, какое вообще назначение данного метода? Если сделать
return (product_id_list)
в конце, вернётся список продуктов в последнем кампейне. Для того, чтобы сделать из матрицы nn матрицу вида 1n2, не мешало бы в последнем цикле сделать какой-нить add.
Если Вы хотите аварийной остановки теста по условию пустого product_id_list, я бы сделал так:
1). Переписал бы метод, чтобы он линеаризировал матрицу продуктов, как я написал выше.
2). В конце сделал бы ассершен на длину product_id_list.
Спасибо! В данном методе я как раз и хотела добавить условие для остановки теста. На счет assert если к примеру assert len(product_id_list) != 0, если len будет 0, то тест зафейлится, а хотела, чтобы просто при этом тест останавливался без ошибок.
Спасибо, это именно то, что мне нужно! Не знала, что skip можно делать также во время выполнения теста, использовала только в ключе @pytest.mark.skip(reason)
Эммм… Вы понимаете, что у теста логически должно быть 2 состояния: PASSED или FAILED? Состояние SKIPPED допустимо в случае, если тест не начал выполняться и был отключен заранее. Сделать самоскипаемый тест, конечно, реально, но это прямой путь к maintenance hell : откровенно неочевидные выходы с неочевидным статусом позволены студентам в лабораторках, но никак не в коммерческом продукте.
Это примерно то же самое, как если бы Вы выпрыгнули из окна, есть 2 исхода: Вы разбились или Вы уцелели. А исход “я вернулась обратно в окно, долетев до 4-го этажа” - это противоречит современной физике
Подумайте, какой подарок Вы оставите потомкам!