JEXL-тесты#
JEXL-тесты используются для автоматизации проверок в системе Global ERP. Они позволяют описывать тестовые сценарии на языке JEXL, запускать их вручную из интерфейса или автоматически через REST-сервис и анализировать результат выполнения по ошибкам и предупреждениям.
Механизм JEXL-тестов можно использовать для автоматизации тестирования обновлений. После установки новой версии платформы или прикладных модулей можно запустить заранее подготовленный набор тестов и проверить, что ключевые сценарии продолжают работать корректно.
С помощью JEXL-тестов можно автоматизировать проверки:
создания, изменения и поиска объектов;
выполнения бизнес-операций и API-методов;
корректности расчётов и бизнес-правил;
наличия или отсутствия данных в базе данных;
результата выполнения SQL-запросов;
работоспособности прикладных сценариев после обновления.
Тест состоит из последовательных шагов. Каждый шаг содержит JEXL-скрипт, который выполняет действие, проверяет результат или записывает диагностическую информацию в лог. Для проверки результата используются методы tst.assertTrue и tst.shouldBeTrue, а для записи информации в лог — методы tst.info, tst.warning и tst.error.
JEXL-тесты можно объединять в группы и запускать через REST-сервис. Это позволяет включать их во внешние сценарии обновления, CI/CD-процессы или регламентные проверки тестового стенда.
В меню Настройки и сервисы > Сервисы JEXL > JEXL-тесты можно создавать, настраивать и выполнять JEXL-тесты.
Создание#
При создании jexl-теста ему необходимо задать план, который будет состоять из разных шагов, выполняемых друг за другом. Для каждого шага необходимо задать наименование и текст скрипта, который должен выполниться. Порядковый номер шага проставится автоматически.
На закладке «Глобальные переменные» можно задать переменные, к которым можно обращаться в тесте через методы
tst.setGlobalVar и tst.getGlobalVar. Для их создания необходимо указать системное имя переменной, которая должна быть уникальна для теста,
и ее значение в виде jexl-скрипта, который будет выполняться перед стартом теста.
Доступные методы#
tst.setVar#
Записывает в контекст выполнения jexl-теста переданное значение. Информация об изменении переменной записывается в лог выполнения теста с типом SETVAR.
Пример:
tst.setVar("param_name", param_value); //param_name - имя параметра, param_value - значение параметра
tst.getVar#
Достает из контекста значение параметра по его имени.
Пример:
var p = tst.getVar("param_name"); //param_name - имя параметра
tst.setGlobalVar#
Записывает в глобальные переменные выполнения jexl-теста переданное значение. Доступ к этим переменным есть на любом шаге теста, без необходимости получать нужный контекст.
Информация об изменении переменной записывается в лог выполнения теста с типом SETVAR.
Пример:
tst.setGlobalVar("param_name", param_value); //param_name - имя параметра, param_value - значение параметра
tst.getGlobalVar#
Получает значение глобальной переменной по ее имени.
Пример:
var p = tst.getGlobalVar("param_name"); //param_name - имя параметра
tst.findParentContext#
Возвращает контекст предыдущего шага выполнения теста. Из него можно получить параметры, записанные в контекст на предыдущем шаге.
Пример:
var parent = tst.findParentContext();
var parentParam = parent.getVar("param_name");
tst.info#
Записывает в лог выполнения теста переданный текст с типом INFO.
Пример:
tst.info("Текст с информацией");
tst.warning#
Записывает в лог выполнения теста переданный текст с типом WARNING.
Пример:
tst.warning("Текст с предупреждением");
tst.error#
Записывает в лог выполнения теста переданный текст с типом ERROR.
Пример:
tst.error("Текст с ошибкой");
tst.raise#
Выбрасывает ошибку с переданным текстом, а также записывает ее в лог выполнения с типом ERROR.
Пример:
tst.raise("Текст с ошибкой");
tst.assertTrue#
Проверят, что переданное условие истинно. Если оно ложно, то прекращает выполнение теста и записывает в лог выполнения ошибку. Если выполняется группа тестов и проверка не пройдена, то переходит к следующему тесту.
Пример:
tst.assertTrue(1 == 2); //запишет в лог "assertTrue не прошло проверку"
tst.assertTrue(1 == 2, "Число 1 не равно числу 2"); //запишет в лог переданный текст "Число 1 не равно числу 2"
tst.shouldBeTrue#
Проверят, что переданное условие истинно. Если оно ложно, то записывает в лог выполнения ошибку.
Пример:
tst.shouldBeTrue(1 == 2); //запишет в лог "shouldBeTrue не прошло проверку"
tst.shouldBeTrue(1 == 2, "Число 1 не равно числу 2"); //запишет в лог переданный текст "Число 1 не равно числу 2"
tst.sqlRows#
Возвращает количество строк, полученных в результате выполнения переданного запроса.
Пример:
var count = tst.sqlRows(`select t.id from RplTst_AllDbTypes t where t.idObjectType = 120`);
Выполнение#
Выполнение теста осуществляется в помощью операции Выполнить тест в карточке теста или списке тестов. Для выполнения тестов целой группы необходимо в списке тестов выполнить операцию Выполнение всех тестов текущей группы.
Выполнение с помощью Rest сервиса:
Выполнение тестов также возможно с помощью Rest сервиса.
Путь для выполнения одиночного теста: http://{имя_сервера}/app/sys/rest/ss/pkg/Bts_TestPkg/runSingleTest
Путь для выполнения группы тестов: http://{имя_сервера}/app/sys/rest/ss/pkg/Bts_TestPkg/runTestForGroup
Тело обоих запросов является json-объектом, который состоит из ключа name и его значения, в виде системного имени теста или группы, соответственно.
Запрос выполнения одиночного теста возвращает json-объект, который содержит в себе следующие параметры: имя теста name,
наличие ошибок hasErrors, наличие предупреждений hasWarnings, количество ошибок countErrors и
количество предупреждений countWarnings.
Пример для одиночного теста:
//пример обращения
curl -H Database:pgDev -u admin:admin -d {\"name\":\"PRS_PurchReqTest\"} -H "Content-Type: application/json" -X POST http://localhost:8080/app/sys/rest/ss/pkg/Bts_TestPkg/runSingleTest
//пример результата
{"hasErrors":true,"hasWarnings":false,"countErrors":1,"countWarnings":0,"name":"Тест заявок на закупку услуг"}
Запрос выполнения группы тестов возвращает json-объект, который содержит в себе следующие параметры:
наличие ошибок hasErrors, наличие предупреждений hasWarnings, количество ошибок countErrors,
количество предупреждений countWarnings и результаты выполнения всех тестов tests в виде массива json-объектов
таких же, как при выполнении одиночного теста.
//пример обращения
curl -H Database:pgDev -u admin:admin -d {\"name\":\"Test1\"} -H "Content-Type: application/json" -X POST http://localhost:8080/app/sys/rest/ss/pkg/Bts_TestPkg/runTestForGroup
//пример результата
{"hasErrors":true,"hasWarnings":false,"countErrors":2,"countWarnings":0,"tests":[{"hasErrors":false,"hasWarnings":false,"countErrors":0,"countWarnings":0,"name":"test_ok"},{"hasErrors":true,"hasWarnings":false,"countErrors":1,"countWarnings":0,"name":"test333"},{"hasErrors":true,"hasWarnings":false,"countErrors":1,"countWarnings":0,"name":"test22"}]}