Вердикт в тестировании решает, пройден тестовый случай или нет; с модулем автоматизации TSMaster тестовую логику реализовать просто. Но как корректно оценить результат после выполнения логики? В статье — методы вердиктов в модуле автоматизации TSMaster.

Ключевые слова: модуль автоматизации, вердикт, check verdict, signal checker, add check with time, add check with trigger.

1. API-функции вердиктов

Для оценки результата теста нужен ряд связанных с вердиктами API-функций. Простой пример: требуется проверить, что сигнал температуры двигателя находится в диапазоне 0–50 градусов.

1.1. Автосимуляция

В установочных файлах системы возьмите демонстрационную базу CAN_FD_Powertrain и перетащите её в среду TSMaster для загрузки (рис. 1). Через симуляцию шины активируйте все узлы, разрешите автосимуляцию и запустите симуляцию виртуальных узлов.

Загрузка демо-базы
Рис. 1. Загрузка демонстрационной базы CAN_FD_Powertrain

1.2. Проверка диапазона значения сигнала температуры

В модуле автоматизации в точке входа нажмите Enter, добавьте действие и откройте его двойным щелчком. Тип действия — вызов API-функции: в списке системных функций мини-программ введите «verdict» и выберите check verdict — эта функция немедленно проверяет диапазон значения сигнала (рис. 2).

Функция check verdict
Рис. 2. Добавление функции check verdict

У функции 4 параметра: отображаемое имя, текущее значение параметра, допустимые минимум и максимум. Имя — произвольное, например «engine temp»; эта строка попадёт в отчёт. Текущее значение свяжите с сигналом температуры двигателя. В min и max задайте 0 и 50 — проверяется, лежит ли сигнал между 0 и 50: если да, проверка пройдена, иначе — провалена (рис. 3).

Параметры check verdict
Рис. 3. Параметры проверки диапазона

Запустите программу: при текущем значении 0 проверка успешна. Измените engine temp на 100 и запустите снова — проверка провалена, и появится сообщение: текущая температура 100 не входит в диапазон 0–50. Это метод немедленной проверки в тесте.

2. Серия API Signal Checker

Если температура двигателя постоянно меняется и нужно проверять её на интервале времени, универсальный способ — цикл (for в C или переходы в графическом языке) с непрерывной проверкой. Но это неэффективно, а при одновременной проверке нескольких сигналов логика становится сложной. Поэтому прямая реализация — не лучший вариант: здесь нужны API серии Signal Checker в TSMaster.

2.1. add check with time

Допустим, нужно проверять, что температура двигателя в интервале от 0 до 15 секунд остаётся в пределах 0–50 градусов. Воспользуйтесь функцией проверки с ограничением по времени: отфильтруйте по строке «checker» функции signal checker — первая из них, add check with time, проверяет, что значение сигнала на заданном интервале находится в диапазоне (рис. 4).

add check with time
Рис. 4. Функция add check with time

2.2. Восемь параметров

  1. Тип сигнала. Нажмите «константа» и введите «checker»: у signal type три варианта — CAN-сигнал, LIN-сигнал или системная переменная. Выбираем CAN-сигнал.
  2. Тип проверки. Нажмите «константу» и отфильтруйте по ключевому слову Signal checker — отобразятся типы проверки.
  3. Тип статистики. Минимум, максимум, среднее и т.п. Выбираем «проверять всегда». Далее имя сигнала — сигнал температуры двигателя engine temp; важно удалить префикс CAN в начале строки, чтобы это была сама строка.
  4. Минимум допустимого значения — 0.
  5. Максимум — 50 градусов.
  6. Время начала проверки — по умолчанию 0.
  7. Время окончания проверки — 15 с или с запасом 30 с.
  8. Дескриптор добавляемой проверки.

2.3. Добавление проверяемого сигнала

После регистрации модуля проверки программе возвращается его дескриптор — по нему программа может многократно получать результаты проверки. Дескриптор нужно связать с локальной переменной: добавьте локальную переменную, назовите её ID и свяжите в свойствах — проверка сигнала добавлена (рис. 5).

Добавление проверки сигнала
Рис. 5. Добавление проверки и связь дескриптора с локальной переменной

Далее — задержка 20 секунд методом wait (значение в миллисекундах — 20000; поле сообщения можно не заполнять, тогда ничего не печатается). Затем получение результата: снова фильтр по «checker», функция get result с 4 параметрами. CheckId — полученный ранее дескриптор, выбираем ID; следующие три — возвращаемые значения, их можно не заполнять (тогда они отбрасываются). В C эти значения обязательно связываются с переменными, а в графическом языке их можно отбросить. Последний — строковое представление результата: сохраним его, создав строковую переменную s и связав её. Проверку можно сделать автоматически запускающейся со стартом программы (рис. 6).

Получение результата
Рис. 6. Получение результата проверки

3. Запуск программы

3.1. Значения в норме

Нажмите «старт»: программа работает и находится в wait 20 секунд. В это время значение сигнала держится на 0 градусов. Его можно менять — например, ввести engine temp 35: значение меняется, проверка проходит успешно, выхода за пределы 0–50 нет (рис. 7).

Значения в норме
Рис. 7. Проверка при значениях в норме

3.2. Выход за норму

Измените engine temp на 66: в момент изменения проверка определяет выход сигнала за норму (не в диапазоне 0–50) и печатает сообщение об ошибке. А по завершении 20-секундного ожидания функция проверки сразу становится красной (рис. 8).

Выход за норму
Рис. 8. Провал проверки при выходе за диапазон

3.3. Проверка температуры двигателя с триггером

Реальная задача: проверять, что температура двигателя остаётся в пределах 0–50 градусов, пока обороты EngSpeed в диапазоне 3000–5000. Для этого нужна проверка с триггером. Вернитесь в модуль автоматизации и замените первую API-функцию проверки на add check with trigger. У неё 10 параметров: первые 5 сохранены — оставляем их значения; начиная с шестого идут параметры сигнала-триггера (рис. 9).

add check with trigger
Рис. 9. Функция add check with trigger

Триггер — обороты двигателя: тип триггера — константа, тип CAN-сигнала, введите TYPE_CAN; имя триггера — имя CAN-сигнала, выбираем EngSpeed (префикс CAN снова убираем, чтобы передать строку, а не значение). Далее минимум и максимум триггера — 3000 и 5000 об/мин, и последний — CheckId, связанный с локальной переменной. Каждый вызов функции добавления проверки добавляет проверочный модуль в движок проверок (рис. 10).

Параметры триггера
Рис. 10. Настройка параметров триггера

Перед началом или после окончания теста проверочные модули движка можно очистить: выберите вызов функции, снова отфильтруйте по «checker» — функция clear удаляет все проверки, после чего можно добавить новые. Теперь проверка связанного сигнала включена: проверка активна, только когда условие — обороты двигателя 3000–5000 — выполняется.

3.4. Увеличение задержки до 30 секунд

Увеличьте задержку до 30 секунд для удобства наблюдения и снова запустите программу. Пока обороты двигателя равны 0 — вне диапазона, проверка неактивна: Temp можно ставить хоть 100 — нарушения нет. Измените Speed на 4000 — проверка активируется (рис. 11).

Активация проверки триггером
Рис. 11. Проверка активна при оборотах в диапазоне

Если теперь задать температуру 66, проверка в момент установки проваливается — значение вне 0–50. Через 30 секунд ожидания видно, что функция checker вынесла вердикт: на интервале оборотов 3000–5000 температура не удовлетворяет требованию 0–50; фактические значения и возвращаемые значения API выведены (рис. 12).

Итоговый вердикт
Рис. 12. Итоговый вердикт проверки