LINUX.ORG.RU

Вышел Meta Test 2.0

 , , , ,


0

1

Meta Test — это российская программная платформа для создания и запуска автоматизированных тестов веб-приложений людьми без навыков программирования. В основе платформы лежит концепция языково-ориентированного программирования. Для описания тестов используется декларативный предметно-ориентированный язык, что позволяет избавится от создания тестового «фреймворка» и сложных для понимания концепций вроде Page Object Model. Но тем не менее поддерживается исполнения в тестах обычного кода на языке python, что позволяет гибко работать с источниками тестовых данных, отправлять API запросы и даже создавать новые команды для встроенного языка.

Основные изменения:

  • Расширения для поддержки браузеров chromium, edge и safari были перенесены из дистрибутива в репозиторий для расширений.
  • Улучшена система отчётов. Доработан отчёт для allure.
  • В механизм расширений была добавлена поддержка команд.
  • Изменено поведение большинства команд, некоторые команды были переименованы.
  • Добавлены команды для поддержки js-alerts.
  • Доработан раннер тестов. Добавлена поддержка статистики, что позволяет автоматически ранжировать тесты по времени запуска и запускать только упавшие тесты.
  • Добавлена начальная поддержка HTTP запросов. С их помощью можно напрямую обращаться к веб-серверу, минуя взаимодействия с браузером.

Этот механизм в первую очередь предназначен для дополнения браузерного тестирования, а не для создания самостоятельных API-тестов.

Например, тест, приведённый ниже, переходит на URL http://the-internet.herokuapp.com/download и получает все ссылки, находящиеся в контейнере с классом example. Затем для каждой ссылки выполняется HEAD запрос, код статуса которого должен быть равным 200.

from metatest import *

TEST["Проверка доступности ссылок для скачивание файлов"](
    URL("http://the-internet.herokuapp.com/download")
    
    , "Проверяем доступность всех URL файлов"
    , HEAD[ALL(".example > a", "attr::href")](
        STATUS == STATUS.OK
        , timeout=25
))

>>> Meta Test

★★★★★

Проверено: CrX ()
Последнее исправление: demidrol (всего исправлений: 3)
Ответ на: комментарий от Rodegast

Я автоматизацией тестирования занимаюсь почти 15 лет. Для меня DSL это то, что не зависит от инструмента/реализации, типичные примеры это TEX, SQL, HTML. Где ты в сабже разглядел то же самое, для меня загадка.

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

А вишенка на торте это функциональная ущербность даже по сравнению с открытыми и известными фреймворками. Ты же сам современные приложения наверное не на делфи будешь писать?

Lordwind ★★★★★
()
Ответ на: комментарий от Lordwind

Я автоматизацией тестирования занимаюсь почти 15 лет

Я тебе даже сочувствую.

Для меня DSL это то, что не зависит от инструмента/реализации, типичные примеры это TEX, SQL, HTML.

То что ты написал это внешние DSL, а сабж использует внутренний DSL. У каждого из них есть свои особенности и преимущества, но об этом ты в гугле почитаешь.

А вишенка на торте это функциональная ущербность даже по сравнению с открытыми и известными фреймворками.

Ну хорошо, расскажи в чём проявляется эта ущербность по сравнению например с selenide :D

Rodegast ★★★★★
() автор топика
Ответ на: комментарий от Rodegast

Основная идея сабжа в том что он предоставляет универсальный DSL

сабж использует внутренний DSL

Во, пошли отмазки.

Я тебе даже сочувствую

Ну хорошо, расскажи

Могу начать с того что такое ЧСВ, но об этом ты в гугле почитаешь)

Lordwind ★★★★★
()
Последнее исправление: Lordwind (всего исправлений: 1)
Ответ на: комментарий от Lordwind

Во, пошли отмазки.

В чём «отмазки»? Эти фразы друг другу не противоречат.

Могу начать с того что такое ЧСВ

Тут ЧСВ у всех есть. На ЛОР-е без него не выжить.

Rodegast ★★★★★
() автор топика
Ответ на: комментарий от Rodegast

Открываешь Capybara на github там в описании есть всё что нужно для работы с ней.

AleksK ★★★★
()
Ответ на: комментарий от Rodegast

ты столкнёшься с теми же рисками

Ты так упорно изображаешь идиота что я начинаю подозревать что тебе за это платят. С какого перепугу «теми же» если код selenide открыт и на его поддержку без проблем можно нанять хоть LLM, хоть мясных - в отличии от проприетарного убожества?

zabbal ★★★★☆
()
Последнее исправление: zabbal (всего исправлений: 1)
Ответ на: комментарий от zabbal

код selenide открыт и на его поддержку без проблем можно нанять хоть LLM, хоть мясных

Вот только бизнес решает свои задачи и тратить средства на поддержку того что и так работает он не будет.

Rodegast ★★★★★
() автор топика
Ответ на: комментарий от Rodegast

тратить средства на поддержку того что и так работает он не будет.

Пока работает. Какая гарантия, что в купленном метатесте никогда не будет ошибок?

А потом на какое-то описание теста падает ошибка или неправильно отрабатывает, а разработчик к этому времени закрылся и занимается чем-то совсем другим. И у этого «бизнеса» выбор из двух плохих решений: перейти на что-то ещё и переписать все тесты под другой синтаксис или просто ввести внутреннюю разметку «минного поля» (какие комбинации конструкций не использовать, потому что не работают).

А потом выходит http3 и надо писать прокси для того, чтобы устаревший метатест мог читать страницы по новому протоколу. А потом выходит какое-нибудь расширение HTML и приходится окончательно выкинуть устаревшее, так как обновить его нельзя. Видел такое многократно с программами, написанными на Delphi в 90-е.

monk ★★★★★
()
Ответ на: комментарий от monk

Какая гарантия, что в купленном метатесте никогда не будет ошибок?

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

а разработчик к этому времени закрылся и занимается чем-то совсем другим

С СПО ты получишь те же самые риски. Мы это уже обсуждали.

А потом выходит http3 ... А потом выходит какое-нибудь расширение HTML ...

Научись решать проблемы по мере их поступления.

Rodegast ★★★★★
() автор топика
Ответ на: комментарий от Rodegast

бизнес решает свои задачи

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

zabbal ★★★★☆
()
Ответ на: комментарий от zabbal

в отличии от свободных или открытых альтернатив, которыми можно спокойно пользоваться десятилетиями

А вот нет нормальных аналогов :D Да тут сказали про тесты на capybara напоминают Meta Test, но доверия она как то не вызывает.

Rodegast ★★★★★
() автор топика
Ответ на: комментарий от Rodegast

Но если ты найдёшь ошибку в метатесте, то сможешь ко мне обратится, а вот в случае с чем то другим с ошибкой будешь разбираться сам.

Только если ты ещё есть и продолжаешь поддерживать Метатест, а не вышел на пенсию, например.

А в случае с чем-то другим я могу искать не лично тебя, а любого программиста на питоне.

С СПО ты получишь те же самые риски. Мы это уже обсуждали.

Не те же. Я сопровождал медицинский диагностический центр, у которого был склад написанный на открытом решении (на базе Informix-4GL/LaTex/uucp/Redhat Linux) и регистратура с учётом услуг на закрытом решении. Оба разработчика несколько лет назад прекратили поддержку. В итоге с 4GL удалось разобраться, актуализировать печатные формы и модифицировать расчёт себестоимости. А в регистратуре пришлось делать альтернативное рабочее место (прикрутил MS Excel к СУБД).

Научись решать проблемы по мере их поступления.

Угу. Бухай/колись, живи быстро, проблемы ведь будут не сегодня, решай по мере их поступления, когда уже ломка и печень отвалилась.

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

monk ★★★★★
()
Ответ на: комментарий от Rodegast

Да тут сказали про тесты на capybara напоминают Meta Test, но доверия она как то не вызывает.

Со стороны внешнего пользователя capybara и Meta Test одинаково не вызывают доверия. Объективно надо или показывать, какой нужный пользователю тест из Meta Test невозможно или гораздо более сложно описать на capybara, или утверждение голословно.

monk ★★★★★
()
Ответ на: комментарий от Rodegast

Мета тест авторизацию по OAuth2 поддерживает?

monk ★★★★★
()
Ответ на: комментарий от monk

Выбирать закрытое решение можно либо когда оно безальтернативно для какой-либо задачи

Вот у тебя ручной тестировщик. Сможешь назвать открытое решение которое при минимальном уровне обучения позволит ему писать автоматизированные тесты?

утверждение голословно.

Это не утверждение, а моё ощущение. Что бы что то утверждать нужно препарировать эту капибару, у меня на это нет ни времени ни желания.

Мета тест авторизацию по OAuth2 поддерживает?

Мета тест поддерживает все что поддерживает python.

Rodegast ★★★★★
() автор топика
Ответ на: комментарий от Rodegast

Сможешь назвать открытое решение которое при минимальном уровне обучения позволит ему писать автоматизированные тесты?

Вот это, например:

  Capybara.current_driver = :mechanize # OAuth
  # Sign in to Twitter
  visit 'http://twitter.com/sessions/new'
  fill_in "Username or email", :with => 'my_app_test_account'
  fill_in "Password", :with => 'my_app_test_account_password'
  click_button 'Sign In'
  unless page.has_content?('Sign out')
    raise "Sign in failed! Manually sign in to reset the captcha"
  end

  # Sign in to app
  page.driver.get '/auth/twitter'
  page.driver.follow_redirect!

  if page.driver.response.redirect?
    page.driver.follow_redirect!
  else
    # Authorize the app on twitter
    click_button "Allow"
    click_link 'click here'
  end

  page.driver.follow_redirect!
  page.should have_content('Sign out')

Кстати, аналогичный пример на Мете как будет? Я у Data не вижу, куда можно текст поля ввести.

monk ★★★★★
()
Ответ на: комментарий от Rodegast

Мета тест поддерживает все что поддерживает python.

И как сделать, чтобы команда URL метатеста использовала OAuth1Session? Без него так:

from requests_oauthlib import OAuth1Session
twitter = OAuth1Session('client_key',
                            client_secret='client_secret',
                            resource_owner_key='resource_owner_key',
                            resource_owner_secret='resource_owner_secret')
url = 'https://api.twitter.com/1/account/settings.json'
r = twitter.get(url)

но полученный r нельзя запихнуть в TEST метатеста. Или можно?

monk ★★★★★
()
Ответ на: комментарий от monk

Вот это, например

Вот я смотрю на твой пример и кроме visit 'http://twitter.com/sessions/new' ничего не понимаю

И как сделать, чтобы команда URL метатеста использовала OAuth1Session?

Команда URL для этого не предназначена. Тебе нужно получить токен через OAuth1Session, а потом подсовывать в заголовки. Будет типа такого:


oauth = OAuth1Session(...)
token = oauth.fetch_request_token("...")

class AuthTrigger(BaseTrigger):
    def setup_test(self, browser, test_id, test_scope, test_args):
        # Авторизация пользователя
        return AUTH_BEARER(token)

CONFIG.TRIGGER = AuthTrigger

Rodegast ★★★★★
() автор топика
Последнее исправление: Rodegast (всего исправлений: 1)
Ответ на: комментарий от Rodegast

но доверия она как то не вызывает

Бгыы… заметьте, это говорит тип, закрысивший баблишко на оплату баннера и протащивший рекламу под видом новости. Доверия полные штаны, дааа :-D :-D :-D

zabbal ★★★★☆
()
Ответ на: комментарий от Rodegast

доверия она как то не вызывает

Научись решать проблемы по мере их поступления

Хрен с ним с фреймворком. Доверия не вызывают прежде всего люди без малейшего горизонта планирования. Впрочем на лорчике и так 99% кодеров не обладают даже минимальным пониманием STLC. Я уже увидел что ты автор этого поделия, поэтому вопросов больше нет.

Lordwind ★★★★★
()
Последнее исправление: Lordwind (всего исправлений: 1)
Ответ на: комментарий от Rodegast

Вот я смотрю на твой пример и кроме visit ‘http://twitter.com/sessions/new’ ничего не понимаю

  fill_in "Username or email", :with => 'my_app_test_account'
  fill_in "Password", :with => 'my_app_test_account_password'
  click_button 'Sign In'

==

  заполнить в поле "Username or email" значение 'my_app_test_account'
  заполнить в поле "Password" значение 'my_app_test_account_password'
  нажать кнопку с надписью 'Sign In'

разве не очевидно?

По мне, так гораздо легче понять, чем HEAD[ALL(".example > a", "attr::href")], причём HEAD даже на https://metatest.kybyc.xyz/doc-command нет.

monk ★★★★★
()
Ответ на: комментарий от Rodegast

CONFIG.TRIGGER = AuthTrigger

Ладно, возможно всё что необходимо, можно сконфигурировать. Спорить не буду, слишком подробно надо анализировать.

monk ★★★★★
()
Ответ на: комментарий от Lordwind

даже минимальным пониманием STLC

Ты точно с SDLC не перепутал? Или даже с SSDLC учитывая последние тенденции.

zabbal ★★★★☆
()
Ответ на: комментарий от zabbal

К разработке обычно вопросов нет, я про Software Testing Life Cycle. Там есть очень важный этап настройки окружения, что отражается на работе с ожиданиями. Это примерно как сейчас на каждом втором собесе спрашивают многопоточку, только автор за 18 лет так этому и не научился.

Lordwind ★★★★★
()
Ответ на: комментарий от monk

разве не очевидно?

А вот это зачем?

unless page.has_content?('Sign out')
    raise "Sign in failed! Manually sign in to reset the captcha"
  end

  # Sign in to app
  page.driver.get '/auth/twitter'
  page.driver.follow_redirect!

  if page.driver.response.redirect?
    page.driver.follow_redirect!
  else
    # Authorize the app on twitter
    click_button "Allow"
    click_link 'click here'
  end

  page.driver.follow_redirect!
  page.should have_content('Sign out')

По мне, так гораздо легче понять, чем HEAD[ALL(".example > a", «attr::href»)], причём HEAD даже на https://metatest.kybyc.xyz/doc-command нет.

Что бы это понять нужно внимательно прочесть документацию. HEAD описан в соседнем разделе https://metatest.kybyc.xyz/doc-http

Rodegast ★★★★★
() автор топика
Ответ на: комментарий от Lordwind

я про Software Testing Life Cycle. Там есть очень важный этап настройки окружения, что отражается на работе с ожиданиями

А это вообще причем?

Это примерно как сейчас на каждом втором собесе спрашивают многопоточку, только автор за 18 лет так этому и не научился.

У сабжа что то не так с «многопоточкой»?

Rodegast ★★★★★
() автор топика
Ответ на: комментарий от Rodegast

А вот это зачем?

Переброска авторизации на соседнюю страницу. На первой вкладке зашли в твиттер для дальнейшей авторизации, на приложении зашли в ‘/auth/twitter’. Если там подхватилось и прошёл редирект, значит авторизация уже прошла, если нет, в твиттере ткнули «Allow» и ссылку ‘click here’. Проверили, что в приложении есть строка ‘Sign out’, то есть авторизация прошла.

HEAD описан в соседнем разделе https://metatest.kybyc.xyz/doc-http

Ладно, был невнимателен.

А аналог fill_in я тоже пропустил? Как в Мете написать «Ввести текст на вкладке Markdown и нажать кнопку Поместить»? Только читать исходники сайта?

monk ★★★★★
()
Ответ на: комментарий от monk

на приложении зашли в ‘/auth/twitter’

Почему туда нужно переходить через page.driver.get а не через visit ?

твиттере ткнули «Allow» и ссылку ‘click here’

Чем click_button отличается от click_link ?

Проверили, что в приложении есть строка ‘Sign out’, то есть авторизация прошла.

Так если такая строка есть, то это означает что включена капча. А он эту строку по всей странице ищет? А если она будет в нескольких местах написана ...

А аналог fill_in я тоже пропустил?

fill_in вводит текст? Тогда пропустили, эта команда называется DATA

Rodegast ★★★★★
() автор топика
Ответ на: комментарий от Rodegast

Почему туда нужно переходить через page.driver.get а не через visit ?

Потому что другая вкладка браузера, а не текущая. Которая привязана к page

Чем click_button отличается от click_link ?

Тем же, чем кнопка от ссылки. Вот здесь на странице «Ответить» ссылка, а «Поместить» кнопка.

Так если такая строка есть, то это означает что включена капча.

Если на странице написано ‘Sign out’ (то есть выйти), значит авторизация прошла успешно.

А он эту строку по всей странице ищет? А если она будет в нескольких местах написана …

По всей. Проверяет наличие. На странице без авторизации такой надписи нет.

fill_in вводит текст? Тогда пропустили, эта команда называется DATA

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

monk ★★★★★
()
Ответ на: комментарий от monk

Давай в качестве примера логин сюда. Предположим пользователь username с паролем password. Вот на Капибаре будет так:

visit 'www.linux.org.ru'
click_link 'Войти'
fill_in "Имя/email:", :with => 'username'
fill_in "Пароль:", :with => 'password'
click_button 'Вход'

Как будет на Мета тесте?

monk ★★★★★
()
Ответ на: комментарий от monk

Тем же, чем кнопка от ссылки. Вот здесь на странице «Ответить» ссылка, а «Поместить» кнопка.

Т.е. в самой команде указывается тег веб-элемента в котором ищут текст? А если кнопку сверстали через div, а если через что то другое? Там же много может быть вариантов.

По всей. Проверяет наличие. На странице без авторизации такой надписи нет.

А нормальные селекторы капибара поддерживает?

Там нет примера, как в качестве селектора указать надпись перед полем ввода

В качестве селекторы много чего можно указать. С.м. https://metatest.kybyc.xyz/doc-base#селекторы

Rodegast ★★★★★
() автор топика
Ответ на: комментарий от monk

Как будет на Мета тесте?

TEST["Авторизация"](
	URL("www.linux.org.ru")
	, CLICK("#loginbutton")
	, DATA("#nick", "username")
	, DATA("#passwd", "password")
	, CLICK("[type=submit]")
)
Rodegast ★★★★★
() автор топика
Ответ на: комментарий от Rodegast

А нормальные селекторы капибара поддерживает?

Да. Можно по селектору find(:xpath, "//a[@href='/foo']").click, можно по поиску внутри, типа within('header') { find(:href, 'google').click }. Но для не программистов надпись на кнопке/ссылке/поле ввода более логична как указатель объекта.

monk ★★★★★
()
Ответ на: комментарий от Rodegast

Ясно. В минусе только то, что надо в исходники страницы лезть.

monk ★★★★★
()
Ответ на: комментарий от monk

Но для не программистов надпись на кнопке/ссылке/поле ввода более логична как указатель объекта.

В Meta Test-е ты тоже можешь написать CLICK(«Войти») но это не надёжный селектор, по этому так лучше не делать.

Rodegast ★★★★★
() автор топика
Ответ на: комментарий от Rodegast

В Meta Test-е ты тоже можешь написать CLICK(«Войти»)

Тогда по крайней мере в этом не хуже Капибары

но это не надёжный селектор, по этому так лучше не делать.

Так любой кроме id ненадёжен. Но id бывает «mt-4b1cb3fb-4e02-46a2-84ab-823894e83e26-editor-tab» (вот прямо с этой страницы), класс тоже часто динамически меняется, а надписи на кнопках обычно стабильны.

monk ★★★★★
()
Ответ на: комментарий от monk

Но id бывает «mt-4b1cb3fb-4e02-46a2-84ab-823894e83e26-editor-tab» (вот прямо с этой страницы), класс тоже часто динамически меняется

По этому часто для тестирования добавляют специальные атрибуты типа test-id.

а надписи на кнопках обычно стабильны.

Представь что на ЛОР-е появилась новость с тегом «войти»...

Rodegast ★★★★★
() автор топика
Ответ на: комментарий от Rodegast

По этому часто для тестирования добавляют специальные атрибуты типа test-id.

Не очень хорошо менять продукт под тестирование.

Представь что на ЛОР-е появилась новость с тегом «войти»…

Ссылка должна идентично совпасть по тексту.

monk ★★★★★
()
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от monk

Не очень хорошо менять продукт под тестирование.

Как раз наоборот, автор продукта делает его сразу таким что бы можно было нормально тестировать.

Ссылка должна идентично совпасть по тексту.

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

Rodegast ★★★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.