Автоматизированное тестирование сайтов

Введение

В рамках платформы есть механизм, позволяющий проводить автоматизированные тесты в браузере Chrome и выдавать результат тестов в виде лога, а также отправлять на почту результаты (об успехе или провале тестов). 

Инфраструктура для работы тестов: 

  • Таблицы с префиксом fc_ 
  • Хранимый процедуры с префиксом as_fc_
  • Страница /frontchecker

Порядок создания теста

Для того, чтобы создать необходимо сделать следующее: 

1. Создать тест в разделе /frontchecker

2. Реализовать процедуру с JSON сценария теста (процедура GetItems). 

3. Реализовать процедуру проверки корректности полученных результатов (процедура Assert). 

Запуск теста

Тест можно вызвать через внешнее действие типа frontchecker, которому передается actions (коды тестов через запятую). 

Таким образом, вы можете запускать тест из формы, с периодических событий. 

Также вы можете проверить тест из таблицы на /frontchecker (запуск по иконке стрелки, после выполнения теста результаты можно посмотреть в логе). 

Процедура GetItems

ALTER PROCEDURE [dbo].[fc_example_getItems]
	@parameters ExtendedDictionaryParameter readonly,
	@username nvarchar(64)
AS
BEGIN


declare @num int , @us nvarchar(256)
set @num = ABS(CHECKSUM(NEWID()) % (100000 - 1 + 1)) + 1
set @us = 'tst_crm'+cast(@num as nvarchar)

select '' Msg,
	1 Result,
	'
	{
    "actions": [
		{"command":"goto", "url": "http://demo.web-automation.ru/", "delay": 500},
		{"command":"click", "selector": ".as-form-modal[data-code=registrationUserOnDemo]", "delay": 1200, "beforeCloseModal": 1, "beforeOkModal": 1},
		{"command":"clearField", "selector": ".as-form-item[data-code=login] input", "delay": 100, "beforeCloseModal": 1, "beforeOkModal": 1},
		{"command":"setValue", "selector": ".as-form-item[data-code=login] input", "value": "'+@us+'", "delay": 100, "beforeCloseModal": 1, "beforeOkModal": 1},
		{"command":"click", "selector": ".modal .modal-footer .btn-primary", "delay": 1500},
		{"command":"wait",  "delay": 4000},
		{"command":"goto", "url": "http://demo.web-automation.ru/account/login", "delay": 1000},
        {"command":"getUrl", "code": "loginUrl" },
    	{"command":"clearField", "selector": "#UserName", "delay": 400},
		{"command":"clearField", "selector": "#Password", "delay": 400},
    	{"command":"setValue", "selector": "#UserName", "value": "'+@us+'", "delay": 100},
		{"command":"setValue", "selector": "#Password", "value": "123", "delay": 100},
		{"command":"click", "selector": "#loginForm input[type=submit]", "delay": 1000},
        {"command":"goto", "url": "http://demo.web-automation.ru/cabinet", "delay": 500},
		{"command":"getUrl", "code": "cabinetUrl" }
		]
	}
	' json,
	'ru@rudensoft.ru' errorEmail,
	'ru@rudensoft.ru' successEmail,
    'testResultMessage' emailTemplate

	/*
    	{"command":"getAttr", "selector": "#loginForm input[type=submit]", "attr": "attr1", "code": "title1"},
     	{"command":"getCSS", "selector": "#loginForm input[type=submit]", "style": "color", "code": "code2" },
     	{"command":"getText", "selector": "#loginForm input[type=submit]", "code": "code3"},
     	{"command":"getUrl", "selector": "code": "url1"},
     	{"command":"wait", "delay": 1000},
    */
END

На входе: 

  • username-  под каким пользователем происходит проверка.
  • parameters - массив параметров (сделано для будущей совместимости).

Настройки SELECT 1

  • Result, Msg-  стандартные поля выдачи результата операции. 
  • json - JSON сценарий действий теста. По сути это набор команд, которые будут исполняться в браузере.
  • emailTemplate - задает код шаблона письма, который будет использован для отправки результата теста на почту. В шаблоне можно использовать следующие переменные: {testName}, {result}, {msg}, {errorCount}.
  • successEmail - если он указан, и результат теста положительный, то будет выполняться отправка на указанную почту.
  • errorEmail - если он указан, и результат теста отрицательный, то будет выполняться отправка на указанную почту.

Обработка внезапных модальных окон

Если при тесте возникнет внезапное модальное окно, то это не позволит установить значение для неактивного поля или кликнуть на скрытую окном ссылку. 

В этом случае перед командами click, setValue, clear необходимо проверить если ли окно и нажать Ок или Отмена. Для этого используются настройки 

beforeCloseModal, beforeOkModal. Если одна из них равна 1, то происходит проверка есть ли открытое модальное окно и выполняется выбранная команда (ok или close). 

Формирование JSON сценария

Основной раздел - это actions - массив действий. Действия выполняются последовательно в том порядке, как они указаны в массиве actions. Если будет где-то допущена ошибка, она сохранится в логе и дальше продолжится выполнение сценария.  

Действия и их параметры: 

  • goto - переход на адрес url с задержкой после этого на delay мс
  • click - клик по элемента с селектором selector с задержкой после этого на delay мс
  • clearField - очистка поля с селектором selector с задержкой после этого на delay мс
  • setValue - установка значения value для элемента с CSS селектором selector с задержкой после этого на delay мс
  • wait - задержка на delay мс
  • getUrl - получить URL текущей страницы (и сохранить в логе с кодом code)
  • getTitle - получить тег Title текущей страницы (и сохранить в логе с кодом code)
  • getCSS - получить для элемента с селектором selector CSS стиль style  (и сохранить в логе с кодом code)
  • getAttr - получить для элемента с селектором selector атрибут attr  (и сохранить в логе с кодом code)
  • getText - получить значение элемента с селектором selector (и сохранить в логе с кодом code)

Примечание: 

по полю code в дальнейшем можно провести анализ сохраненных данных в процедуре assert

Процедура Assert

ALTER PROCEDURE [dbo].[fc_example_assert]
	@logID int,
	@username nvarchar(64)
AS
BEGIN

declare @cabinetUrl nvarchar(256) = ''
select @cabinetUrl = lower(value) from as_fc_logItems where logID = @logID and lower(itemCode)='cabineturl'

if(CHARINDEX('cabinet', @cabinetUrl)<1) begin
	select 'cabinetUrl неверный' Msg, 0 Result
	return
end

select '' Msg, 1 Result


END

На входе: 

  • logID - id лога сохраненных данных теста (таблица as_fc_logs). 
  • username - текущий пользователь, под которым выполняется тест. 

На выходе: 

  • Result - задает результат теста (1/0). Если были ошибки в результате выполнения теста, то результат будет все равно 0.
  • Msg - сообщение (оно сохранится как примечание в логе для этого теста). 

Примечание: 

в тесте мы извлекаем данные по code из таблицы as_fc_logItems (извлекаем value по itemCode) и может проверить ожидаемые значения. Именно поэтому необходимо задать уникальные значения code для извлекаемых данных в настройках JSON. 

Как просмотреть результаты тестов

Краткое оповещение о результате приходит на почту (если настроить SuccessEmail, ErrorEmail и EmailTemplate в GetItems SELECT 1)

Полный лог выполнения тестов можно посмотреть в подтаблицах на /frontchecker

Платформа Falcon Space

Это снижение стоимости владения

за счет меньшего количества людей для поддержки

Это быстрое внесение изменений

по ходу эксплуатации программы

Это современный интерфейс

полная адаптация под мобильные устройства

Бесплатное обучение разработке на Falcon Space

Вы можете разрабатывать самостоятельно или сотрудничать с нами в плане веб-разработки на платформе Falcon Space.
Примечание