Александр Логунов, инженер по тестированию КОМПАС-3D, рассказывает, как при минимальных усилиях облегчить тестирование с помощью инструментов Python, а также приводит примеры уже реализованных задач.
От «Привет, мир» до автоматизации в тестировании
Год назад я прошел курс «Python для начинающих»: сначала нас научили писать «Привет, мир», а в конце уже показывали, как работать с файлами и подключать библиотеки. Этих знаний достаточно для мелкой автоматизации в тестировании, которой в том числе подлежат следующие виды работ:
разовые работы с большим объемом данных. К примеру, у нас есть 20 тыс. текстовых документов, в которых нужно что-либо найти и изменить. Это можно сделать вручную, но уйдет много времени, а можно за полчаса написать скрипт;
повторяющиеся действия. Если мы регулярно воспроизводим одну и ту же последовательность кликов, грех не заменить её одним нажатием мыши;
работы, которые можно выполнить только программно. Иногда на «механическую» реализацию какой-либо операции потребуется столько ресурсов, что и жизни не хватит – их с самого начала проще запрограммировать.
Теперь разберем каждый из пунктов подробнее.
Ускорение автотестов
О разовых работах с большим объемом данных я расскажу на примере ускорения автотестов. Для автоматизированного тестирования мы используем систему собственной разработки «Магнитофон». Подробнее о ней читайте здесь, а я ограничусь краткой справкой о том, как она устроена: тестировщик кликает на кнопку «Начать запись», выполняет какие-либо операции в КОМПАС-3D, все они записываются в xml-файл. Это и есть автотест.
Неоднократно при прохождении магнитофонных тестов в master или командных ветках появлялись нестабильные тесты, которые на протяжении месяца могли несколько раз выполниться с ошибкой или завершиться провалом. На их нестабильность влияло очень долгое воспроизведение сценария теста.
На скриншоте изображен фрагмент автотеста в xml-файле. Эта строка отвечает за разовое перемещение курсора из точки А в точку Б. Рамкой выделены точки координат, описывающие траекторию движения курсора. Возникает закономерный вопрос: можно ли удалить из этой строки все точки, кроме финальной, чтобы курсор сразу переходил в нужное место? Однако у нас 11 тыс. автотестов и мы не знаем, какие из них содержат лишние координаты. Поэтому для оперативного решения этой задачи нужен скрипт по поиску автотестов с лишними координатами.
Условиями данного скрипта были:
поиск в репозитории тестов в test.xml;
в параметре MouseMoveQueue количество точек должно быть больше 1.
Этот скрипт должен открыть xml-файл, найти строки, отвечающие за перемещение курсора по какой-либо характерной комбинации символов, и удалить из этих строк все координаты, кроме последней точки, затем сохранить изменения в этом файле, открыть следующий и так далее, пока мы не обработаем все наши автотесты.
Избавились от вредной информации
После воспроизведения скрипта оказалось, что из 11 тыс. автотестов более 1300 имели лишние координаты и только в семи из них была важна траектория движения курсора. В результате время выполнения обработанных тестов на одной машине уменьшилось на 52 минуты или на 12%, а размер папки с автотестами стал «легче» на 563 Мб. Так мы избавились от очевидно «вредной» информации, которая замедляла наши тесты и влияла на их стабильность.
Для подготовки такого скрипта не требуется каких-либо специфических навыков: достаточно знать, что такое условный оператор, цикл, уметь открыть файл, внести в него изменения и закрыть. Этой «базой» можно овладеть на любых курсах, а пригодиться она может далеко не только в тестировании.
Конвертация в обменные форматы через автотест и API
Теперь об автоматизации повторяющихся действий на примере конвертации в обменные форматы. Как известно, КОМПАС поддерживает многие распространенные форматы 3D-моделей. В свою очередь, тестировщикам, как только появляется какая-либо новая фича или возможность спроектировать новый объект, необходимо обязательно экспортировать его во всевозможные форматы, чтобы проверить корректность работы. Вручную это делается долго, и есть два способа ускорить процесс: через автотест и API КОМПАС-3D.
В API КОМПАС-3D есть разные методы сохранения и экспорта файлов:
SaveAsEx – сохранение в предыдущие версии;
SaveAsToAdditionFormat – экспорт в обменные форматы;
SaveToRasterFormat – экспорт в растровые форматы.
Чтобы написать такой скрипт, нужны уже перечисленные навыки, а также необходимо научиться подключаться к API КОМПАС и изучить методы экспорта (они описаны в документации по API).
Этот экспорт выполняется в фоновом режиме, он оперативен и не отвлекает от основной работы.
Поиск КОМПАС-документов
Часто при тестировании и разработке требуется найти какой-либо документ с определенными параметрами – для этого у нас тоже есть программа, написанная на Python. Она предназначена для поиска моделей по различным параметрам, например, позволяет найти специальные документы, которые сохранены в определенных версиях, содержат определенное количество компонентов и определенные операции.
В верхнем поле мы вводим путь к папке, в которой собираемся найти наш документ. Можно перечислить несколько папок, они будут просматриваться на всю глубину. Далее мы можем указать специализацию документа – трубопровод, металлоконструкция и прочее. Кроме того, заполняется строка «Версии Компаса» и «Количество компонентов в сборке»: это часто требуется при тестировании производительности. После того как будут введены все интересующие нас параметры, программа запускает «невидимый КОМПАС», по очереди открывает документы в указанной папке и проверяет на соответствие запросу. При появлении первых результатов в папке с программой формируется список найденных документов в формате txt.
Обращу внимание на поле time-out, куда вводится время в секундах, которое мы даем нашей программе на открытие документа. Если за заданное время документ не открылся, то мы просто переходим к следующему. Поле нужно для обхода зависаний: если документ создан в процессе разработки в промежуточной версии, то, возможно, он будет открываться с задержкой, или просто может попасться большая сборка, которая сейчас нам не нужна.
Параллельно с поиском во вкладке «журнал» можно следить за работой «невидимого» Компаса и отлавливать таким образом возникшие зависания.
Чтобы разработать такую программу, необходимы все те же, уже перечисленные навыки, а также нужно изучить тему «потоки», так как функция обхода зависаний выполняется параллельно с основной программой, и методы API для получения информации из документа.
Первая версия поисковика не имела графического интерфейса и справлялась со своими задачами. Но, если хочется сделать работу с программой более удобной для пользователя, можно освоить библиотеки для создания GUI. В данном случае использована библиотека tkinter.
Мы используем Python и для решения других задач, например, для измерения производительности или для фильтрации результатов прогонов автотестов. Уже разработанные скрипты можно применять в качестве заготовки для новых инструментов.
Александр Логунов, инженер по тестированию КОМПАС-3D
Комментарии (5)
AirFlare
03.08.2023 16:05Хорошая статья. Кстати, как там с нативной версией под Linux? Судя по планам, бета должна быть в этом году, но что-то ни слуху ни духу. Может успокоите страждущих каким-нибудь скриншотом или информацией? А то что-то совсем грустно.
kompas_3d Автор
03.08.2023 16:05Вот скриншот) Надеюсь вам теперь не так грустно)
kompilainenn2
03.08.2023 16:05под wine?
kompas_3d Автор
03.08.2023 16:05Под Wine обычный КОМПАС работает, там скриншот ничем не отличается от винды.
asmailiks
КДПВ шикарна