Запись взаимодействия с пользователем для автоматизации тестирования Tcl Tk - PullRequest
0 голосов
/ 02 октября 2018

Я хочу провести несколько тестов в нашем приложении tcl tk относительно взаимодействия с пользователем.Поскольку в приложении есть части, похожие на САПР, для которых важно каждое движение мыши, я хотел бы сделать что-то вроде записи всех событий некоторых пользовательских взаимодействий.Моей целью было бы воспроизвести эти события позже и при каждом изменении программы, чтобы обнаружить потенциальные изменения.Или даже лучше убедиться, что GUI ведет себя всегда одинаково и выдает всегда одни и те же данные.

Я знаю, что могу генерировать некоторые события ввода движения и нажатия кнопок, но это не будет похоже на тысячи событийгенерируется реальным взаимодействием с пользователем.Но для меня очень важно иметь именно эти тысячи событий.

Есть ли возможность достичь этого?

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Мы начали так, как вы описываете: записывайте все эти тысячи событий движения и т. Д. Включая точные временные параметры, которые также чрезвычайно важны для приложения с графическим интерфейсом.

Быстро стало очевидно, что эти записи стали слишкомтрудно поддерживать.Они также чрезмерно хрупкие в свете изменений пользовательского интерфейса.Еще одна проблема, где жестко закодированные значения времени.Переключение на более мощную машину (или процессор под нагрузкой) может нарушить выполнение.

Два самых больших улучшения, которые мы представили

  • Сжатие событий: распознайте high-level действие, которое пользователь хотел выполнить (например, выбор пункта меню).Записанная команда activItem будет затем выполнять необходимую работу (эмуляцию события) при воспроизведении.

  • Функции синхронизации: вместо того, чтобы полагаться на определенные команды синхронизации, такие как waitForObject ожидание появления объекта и готовности к взаимодействию.

Однако для того, чтобы это работало бегло, потребовалось несколько лет.Включая центральный репозиторий карты объектов, проверки свойств и скриншотов, описания тестов высокого уровня в BDD и другие.Не стесняйтесь взглянуть на продукт Squish for Tk , который вышел из этой работы.

0 голосов
/ 02 октября 2018

С помощью bind относительно легко записать события определенных типов - вы обнаружите, что <ButtonPress>, <ButtonRelease>, <Enter>, <Leave>, <FocusIn>, <FocusOut>, <KeyPress> и<KeyRelease> охватывает почти все, что вас интересует, а затем воспроизводите их с event generate.(Вам необходимо записать довольно много информации о каждом событии, чтобы правильно сгенерировать его, но базовая модель - это модель событий X с похожими именами.) Предполагается, что вы не хотите поддерживать функцию вырезания и вставки между приложениями.или перетаскивание для целей записи;это сильно усложняет.Скорее всего, у вас будет много событий;запись в базу данных SQLite может иметь большой смысл.

Однако вы должны тщательно продумать, какие части приложения вы хотите записать.Имеет ли значение, что порядок двух кнопок во внешней оболочке приложения вне CAD-подобной области поменялся местами?Для большинства пользователей, если вы четко понимаете, что делают кнопки (с помощью четких ярлыков и значков), это не очень важно, но для воспроизведения записанных событий это может иметь огромное значение.Вместо этого для частей приложения, представляющих собой простые кнопки и поля редактирования, я бы не записывал их детали, а вместо этого просто записывал бы, когда нажимаются кнопки и изменения в текстовом содержимом записейи так далее.По сути, он захватывает события более высокого уровня, и его намного легче правильно воспроизвести.Только когда пользователь находится в этой основной области САПР, вам нужна полная детализация.

Кроме того, остерегайтесь изменений в размерах шрифта и размерах экрана / масштабировании .Они могут изменить порядок вещей и произойти из-за изменений на уровне системы, выходящих за рамки вашего приложения.

...