Картинки из нейросетей сейчас везде, идём против тренда)
Картинки из нейросетей сейчас везде, идём против тренда)

Александр Логунов, инженер по тестированию КОМПАС-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)


  1. asmailiks
    03.08.2023 16:05
    +2

    КДПВ шикарна


  1. AirFlare
    03.08.2023 16:05

    Хорошая статья. Кстати, как там с нативной версией под Linux? Судя по планам, бета должна быть в этом году, но что-то ни слуху ни духу. Может успокоите страждущих каким-нибудь скриншотом или информацией? А то что-то совсем грустно.


    1. kompas_3d Автор
      03.08.2023 16:05

      Вот скриншот) Надеюсь вам теперь не так грустно)


      1. kompilainenn2
        03.08.2023 16:05

        под wine?


        1. kompas_3d Автор
          03.08.2023 16:05

          Под Wine обычный КОМПАС работает, там скриншот ничем не отличается от винды.