-
Notifications
You must be signed in to change notification settings - Fork 126
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Autotest api #754
Autotest api #754
Conversation
…естирования плюс тесты на это
В тесте только подключается и отключается клиент, тест проходит но приложение клиента не закрывается, потому что отключение вызывается раньше чем откроется окно клиента.
…ты_УтвержденияBDDForms. Проходят тесты подключение, открытие списка, отключение.
… текущей строки, Отключение. Методы в ТестКлиенты и УтвержденияBDD плюс тесты в Тест_УтвержденияBDDForms. Более-менее устоялась идеология.
…зова уверждений через точку.
…Списке, Проведение C их помощью реализован тест проведения документа и проверки количества его движений по регистру в Тест_УтвержденияBDDForms. Тест выполняется на данных \Tests\1Cv8_xUnitFor1CForms.dt. Конфигурация там из тестовой базы, в один документ добавлена обработка проведения.
…без изменений. Тестовые данные создаются и удаляются в тестах. Добавил cf тесовой конфигурации из ветки master в \Tests. В модуль формы Тесты_УтвержденияBDDForms добавил процедуры для работы с таблицей параметров на форме. На сервере записываем, на клиенте читаем. Хотел использовать для передачи параметров между тестами но потом сделал передачу через контекст ядра.
Хорошее дополнение, но мне не нравится, что смешаны 2-е функциональности - Утверждения и работа с тест-клиентом Предлагаю разделить эту функциональность.
или предложите другие варианты @agaltsoff @VladFrost @nixel2007 @EvilBeaver что скажете? |
|
||
УбедитьсяЧтоЭтоСпискок(); | ||
|
||
ТестируемыйЭлемент.ВыделитьВсеСтроки(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Здесь опасность: если в списке больше 1000 строк, платформа выведет предупреждение и выполнение будет приостановлено, пока пользователь вручную не закроет предупреждение.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Вот да, надо придумать как количество строк в таблице получать.
Нормального метода не нашёл.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тут похоже концептуальная проблема невозможности определения количества строк в динамическом списке разумными средствами.
Сделал проверку на пустой список потому что по сути нужна только она.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Все же странно в сценарных тестах увидеть такой объем данных в списках.
Про данную особенность помнить надо, но решать ее сейчас особого смысла нет.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@kuntashov как вариант, если тесты прогоняются на типовой демобазе: там вполне может быть несколько тысяч строк в списках.
&НаКлиенте | ||
Функция ЗабытьЗапущенныйКлиент(ИмяПользователя, Порт) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Про эту функцию я не понял, как она должна использоваться.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Удалять клиента из списка после отключения.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Это да. Но она не экспортная, и вызовов её в этом модуле нет.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Хотел использовать, но как-то обошлось без неё потом. Удалю.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Удалил.
#Область ИнтерфейсАвтоматическогоТестирования | ||
|
||
&НаКлиенте | ||
Функция ПодключениеКлиентаТестирования(ИмяПользователя = "", Пароль = "", Порт = 1539) Экспорт |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Почему номер порта стал 1539? По-умолчанию же 1538.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
1538 менеджер тестирования использует по умолчанию.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
И почему здесь нужен 1539?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
У меня не получалось найти клиент запущенный на одном порту с менеджером. Возможно причина была в другом. Сейчас проверил, так работает.
Вернул 1538.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Вот такие ошибки теперь периодически появляются:
{Обработка.ТестКлиенты.Форма.Форма.Форма(106)}: Не смогли установить соединение с тестовым приложением для пользователя Администратор! {Обработка.ТестКлиенты.Форма.Форма.Форма(97)}: Ошибка при вызове метода контекста (УстановитьСоединение): Ошибка подключения к клиенту тестирования. Менеджер не может управлять сам собой.: Ошибка подключения к клиенту тестирования. Менеджер не может управлять сам собой.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Там ещё веселее всё. Конфигуратор при запуске Предприятия берёт параметры из строки Стартера даже те, которые были туда добавлены после запуска Конфигуратора.
Т.е. я запустил конфигуратор, потом добавил /TESTCLIENT чтобы запустить эту базу вручную в режиме тестирования и после этого уже запустил Предприятие как менеджер тестирования из Конфигуратора.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Да я так и делаю. Просто после того как конфигуратор запустил понадобилось эту же базу запустить как тест клиент. В стартере поставил параметр в строке запуска, запустил, потом через какое-то время запустил предприятие из конфигуратора. И он взял этот параметр из стартера, хотя на момент запуска конфигуратора флага ещё не было.
И вообще, почему конфигуратор берёт параметры предприятия из списка баз из строки с которой он был запущен? Странно...
Сейчас просто сделал отдельную строку для запуска базы в режиме клиента тестирования чтобы не путаться.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А зачем его отдельно запускать? Плагин же сам его запускает: https://github.com/xDrivenDevelopment/xUnitFor1C/blob/develop/src/Plugins/%D0%A2%D0%B5%D1%81%D1%82%D0%9A%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D1%8B/Form/%D0%A4%D0%BE%D1%80%D0%BC%D0%B0/%D0%A4%D0%BE%D1%80%D0%BC%D0%B0.bsl#L77
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Что-то нужно было проверить руками, разовый случай.
|
||
#КонецОбласти | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Пустые строки
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Чтобы последнюю строку с текстом можно было поместить в середину монитора при редактировании.
|
||
Если ИнформацияОбОшибке <> Неопределено Тогда | ||
ОписаниеОшибки= | ||
НСтр("ru='Описание=';en='Description='") + ИнформацияОбОшибке.Описание + "'" + Символы.ПС + |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Здесь хочется видеть СтрШаблон()
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Это из синтаксис-помощника))
Исправлю.
|
||
&НаКлиенте | ||
Процедура УбедитьсяЧтоЭтоСпискок() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Опечатка в имени процедуры
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Исправлю))
КонецФункции | ||
|
||
&НаКлиенте | ||
Функция ПоискВСписке(СтруктураПоиска) Экспорт |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Чем "ПоискВСписке" отличается от "НайтиВСписке"?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
УтвержденияBDD.ПоискВСписке вызывает ТестКлиенты.НайтиВСписке, анализирует результат и при возникновении ошибки вызывает ВызватьОшибкуПроверки.
ТестКлиенты.НайтиВСписке непосредственно выполняет поиск в списке через механизм автотестирования.
Т.е. ТестКлиенты это low level, УтвержденияBDD это high level.
Названия методов в утверждениях выбраны так чтобы они сочетались с Ожидаем.
СтатусыРезультатаТестирования = Новый ФиксированнаяСтруктура(СтатусыРезультатаТестирования); | ||
|
||
#КонецОбласти | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Пустые строки
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Чтобы последнюю строку с текстом можно было поместить в середину монитора при редактировании.
Внутри так всё и происходит. УтвержденияBDD при инициализации загружает ТестКлиенты и вся работа с механизмом автоматического тестирования идёт через него. Например Ожидаем.ОткрытиеВСписке вызывает ТестКлиенты.ОткрытьВСписке, анализирует результат и в случае ошибки вызывает стандартное исключение которое потом красиво выводится. Можно в модуле теста сделать глобальную переменную и при инициализации теста записать труда ссылку на ТестКлиенты загруженный в УтвержденияBDD. Тогда можно будет вызывать методы, больше относящиеся к механизму автотестирования чем к функционалу самого теста напрямую. Только нужно определится какие. Например то же ОткрытиеВСписке вроде бы относится к автотестированию, но если мы проверяем настройки прав доступа, это уже и сам тест. |
Внутри может быть все что угодно. Пусть методы API ТестКлиента внутри себя вызывают необходимые утверждения и выбрасывают красивые ошибки. Общая схема работы - проще и удобнее через ТестКлиент, а не через Ожидаем. |
Методы API должны помочь клиенту продукта. |
Я не хочу постоянно дорабатывать Утверждения. Более сложные утверждения д.б. реализованы в других плагинах. Тем более, что самое сложное (методы) Вы уже реализовали. |
Понятно. Так даже проще будет. Из Утверждений работу с автотестированием убираем в отдельный плагин для Утверждений автотестирования? |
Только предлагаю новый плагин все-таки назвать "ТестКлиент", а не "Утверждения автотестирования" :) |
Так есть же уже один ТестКлиенты. Путаницы не будет? |
Ещё есть УтвержденияПроверкаТаблиц. Видимо утверждения для специальных случаев. На мой взгляд по аналогии будет УтвержденияBDDАвтотест. BDD потому что ОткрытиеВСписке сочетается с Ожидаем. Без BDD тогда Открыть... Однако как скажете. Вы же здесь BDFL )) |
Все-таки мне больше нравится
|
Честно, УтвержденияBDDАвтотест - жесть. Длинно, странно, невнятно Потом все время по коду удивляться над |
ПерейтиКСтроке на пустом списке вызывает ошибку. Добавил везде перед вызовом этой функции проверку количества строк в списке.
…н, когда они не проходят все предыдущие окна закрываются
…ого выбора типа данных
Обновил ИР до 4.37
…ошибке теста с новой строки.
…. Проверено. Отладка работает через раз.
… БСП в инициализацию.
…шибок при отсутствии БСП.
…а, ТестКлиенты переименовал в МенеджерТестКлиентов
В xddTestRunner инициализацию плагинов сделал после загрузки всех плагинов чтобы плагину в инициализации был доступен любой другой плагин.
@artbear Сделал. |
@agaltsoff Очень много изменений/коммитов. Можешь достаточно коротко описать финальное состояние ? |
…лагиныНаСервере Поисправлял мелкие ошибки менеджере тест клиентов. Ошибки ещё остались. В ТестКлиент заменил старое название плагина ТестКлиенты на МенеджерТестКлиентов, как название файла плагина. Отладка по HTTP внешних обработок БСП заработала после перерегистрации библиотек ИР. Наимнование обработки в справочнике ДОЛЖНО СОВПАДАТЬ С ИМЕНЕМ ФАЙЛА обработки.
…ке через расширенный поиск. В поле даты при выборе открывалось окно календаря вместо окна выбора типа данных и текущее окно становилось неопределено. В поле строки окно выбора типа данных не открывалось, но проверка выдавала что оно открыто. Раньше вроде такого не было. Смена платформы повлияла? Отладка вызова методов управляемых форм без их открытия через внешние обработки БСП по HTTP пока работает.
Не работает установка отбора перед поиском в списке чтобы поиск выполнялся быстрее. Не работает вызов метода Утверждений BDD в тест клиенте потому что они неопределены хотя инициализация объекта плагина выполняется. Без этих двух ошибок тесты проходят.
При активизации Что искать для простого типа данных окно списка становится активным окном приложения и оно закрыввалось вместо окна списка выбора, которое открывается для ссылочного типа.
…оходит. Утверждения BDD вызывались у объекта обработки ТестКлиент, а он не был инициализирован. Пробовал инициализировать объекты форм плагинов при получении форм при тестировании на клиенте, но не до конца разобрался с типами. Сделал использование утверждений в тест клиенте BDD через форму плагина УтвержденияBDD как в-общем то и надо было сделать изначально. Вопрос, нужно ли инициализировать объекты форм плагинов при использовании плагинов в виде форм на клиенте и как это сделать.
@artbear Да там вроде кроме
должны быть только изменения для тестирования через внешние обработки БСП. Я тогда посмотрю по diffview какие ещё bsl файлы менялись кроме ТестКлиент МенеджерТестКлиентов УтвержденияBDD из тех что остались и сделаю описание изменений. |
@agaltsoff Ага, жду описания |
В итоге сделал branch с того места где мы договорились
и скопировал туда конечный результат всех последующих изменений. Вроде получилось то что надо. Видны только результаты изменений без промежуточных шагов. Назвал autotest. Из него сделал pull request, описание там, а этот закрою. Пробовал конечно join commit и merge, но не взлетело. Видимо не до конца разобрался с этим ещё. |
Реализация #753
Сделанные доработки
Реализован минимальный набор методов API автоматического тестирования и утверждений, позволяющий оценить синтаксис законченного теста.
Утверждения в УтвержденияBDD
ПодключениеКлиентаТестирования
ОтключениеКлиентаТестирования
ОткрытиеФормыСписка
ПоискВСписке
УстановкаОтбораВСписке
ОткрытиеВСписке
КоличествоСтрокВСписке
Проведение
Описание
Методы для работы с механизмом автоматизированого тестирования содержатся в ТестКлиенты.
УтвержденияBDD использует эти методы в утверждениях автоматизированого тестирования.
ТестКлиенты сохраняет значение окна и элемента, которые были получены при выполнении каждого метода. Последующие действия выполняются относительно этих значений. Эти значения можно получить с помощью соответствующих методов интерфейса ТестКлиенты.
Открытие окон в ТестКлиенты это процедуры, поиск значений - булевые функции
ТестКлиенты выполняет действия без проверок, все проверки выполняются в УтвержденияBDD.
Пример теста