утверждение pytest приводит к ложному, но не дает дополнительной информации о сбое

#python #pytest #assert

Вопрос:

Я новичок в pytest, и ниже приведен мой код. Я использую утверждения. Утверждение работает правильно, что является ложным, так как данные не совпадают. Мне нужна помощь в определении того, какие данные не совпадают.

  def test_content_database():  records_src = [(1,James,smith,123),(2,Granpa,smith,124),(3,Linda,smith,123)]  records_trg = [(1,James,smith,**124**),(2,Granpa,**ron**,124),(3,Linda,smith,123)]  print("ASSERTION RESULTED IN : ", all([a == b for a, b in zip(records_src, records_trg)]))  assert all([a == b for a, b in zip(records_src, records_trg)]), "DATA IS NOT MATCHING"  

**Вывод консоли является ложным, что правильно, но я хотел бы зафиксировать, какие данные не совпадают **

  main_test.py:8 (test_content_database) def test_content_database():  records_src = dbcon.get_data_connection_src()  records_trg = dbcon.get_data_connection_trg_diff()  print("ASSERTION RESULTED IN : ", all([a == b for a, b in zip(records_src, records_trg)])) gt; assert all([a == b for a, b in zip(records_src, records_trg)]), "DATA IS NOT MATCHING" E AssertionError: DATA IS NOT MATCHING E assert False E   where False = all([False, False, True, True, True, True, ...])  main_test.py:13: AssertionError  

Комментарии:

1. Ты не можешь. all само по себе не возвращает больше информации, чем True или False . Если вы хотите точно знать, какие элементы есть False , вам придется вручную перебирать список

2. Я бы рекомендовал не упаковывать так много в одно строчное утверждение-вам лучше всего иметь фактический цикл с отдельным утверждением в нем (и тогда pytest покажет вам различия).

Ответ №1:

Как насчет assert records_src == records_trg того, что вы все равно проверяете равенство?

В качестве примечания вы можете добавить опцию pytest cli — --show-locals