#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