Для написания автотестов использовал 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" и на другом языке.
- Время в окне не соответствует текущему, если оно конечно должно.