Для написания автотестов использовал Python версии 3.13.0, все зависимости в requirements.txt. Рекомендуется запускать командой pytest -s --html=pytest_report.html (-s - для более детального вывода в консоль, --html - для генерации html репорта).
Для запуска используется конфиг, путь к которому можно указать в параметрах запуска pytest --config=<PATH>, по умолчанию, берется конфиг из корневой папки config.json.
Есть возможность сгенерировать более читаемый репорт, для простоты использовал pytest-html. Пример уже готового репорта в pytest-report.html (папка assets тоже относится к репорту).
Важно: нужно заполнить путь к сформированному Balances.xml по пути в конфиге balances_xml.path, а также, для того чтобы автотесты корректно считали поля из окна приложения "Зачислено" и "Списано", и разницу из "Осталось", заполнить поля конфига application_amounts: debit_total для Зачислено, credit_total для Списано и difference для Осталось, т.к. взять эти данные из .exe-файла автоматически думаю не входит в список задач.
Опишу кратко структуру автотестов: написаны в файле test_balance.py - логически разделены на 2 группы: 1-ая проверяет структуру XML файла и выводит ошибки по нему; 2-ая проверяет бизнес логику операций, например что не происходит дебета или кредита самого себя, проверка валидности сумм и т.д.
Много ошибок по описанию и формированию XML-файла:
- "Документ состоит из Узла Balance": в документе ошибка
Ballance - " и его детей Operation": в документе все дети находятся в нодах
Oper - "-date": в документе ошибка
dataво всех элементах - "dbt или cdt": должен быть только 1 аттрибут из указанных, но в некоторых нодах оба.
- "corAcc": должен быть аттрибутом, но в некоторых нодах является подэлементом.
- Вышеуказанные проверки написаны в автотестах, касающихся XML-части, также автотесты проверяют бизнес логику, и найдены следующие проблемы: некоторые операции в качестве корреспондирующего счета указывают изначальный счет; разные даты в операциях, хотя насколько я понимаю, дата должна быть одна; и сумма выполненных операций не сходится с указанной в окне - ни дебетовая, ни кредитовая, ни итоговая разница.
- Ошибка в окне приложения "Итогог"
Автотесты написаны написаны в файле test_epd.py.
- По требования пункта 1 почти все работает как указано (правда функционал приложения открывается и без введения корректного ключа активации, а случайного текста - но в реализации не сказано, что ДОЛЖНО работать только с реальным ключом - тут немного непонятно). Найдена ошибка, при которой после ввода ключа активации не отображается модальное окно с подтверждением успешности ввода («Успешно!»).
- Шаги пункта 2 полностью автоматизированы и проверяются автотестами. Выявлены баги в данных: например в 17-ом элементе
BICDirectoryEntryотсутствует элементAccounts:<BICDirectoryEntry BIC="047003001"><ParticipantInfo NameP="ОТДЕЛЕНИЕ ТУЛА БАНКА РОССИИ" Rgn="70" Ind="300000" Tnp="г" Nnp="Тула" Adr="ул Советская, зд. 88, к. 1" PrntBIC="044525000" DateIn="1994-01-20" PtType="12" Srvcs="3" XchType="1" UID="7003001000" ParticipantStatus="PSAC"></ParticipantInfo></BICDirectoryEntry>Также по логике кол-во теговBICDirectoryEntryдолжно быть в 2 раза больше, чем сформированных вPacketEDPтеговED101, т.к. на каждого получателя и отправителя приходится по оддному тегуBICDirectoryEntry(для заполнения), но это количество было больше чем в 2 раза. Также после определенного количества (у меня вышло 9) большинство полей, указанных в пункте 2 начинают заполняться неверно из-за несоответсвия полей. - Не совпало количество пакетов
ED101и их сумма, указанных в окне Import -> PacketEDP, с данными, посчитанными в автотесте, сумму отличается почти в 2 раза, количество на 1 меньше. Если пытаться делать импорт безPacketEPD.xmlв директории, то выходит окно с корректной ошибкой. - Экспорт в csv работает корректно: имя верное, и в окне удачного экспорта указано верное кол-во записей, не уменьшенное.
- Экспорт в json работает некорректно: экспорт происходит в файл
PacketEPD.jsonвместоED101.json, но количество записей тоже верное. - Пункт меню "Выход" реализован не так, как ожидалось: находится не отдельно в меню, а в пункте "Convert" и на другом языке.
- Время в окне не соответствует текущему, если оно конечно должно.