Как сделать тесты на joomla

Обновлено: 18.06.2024

Автоматические тесты могут быть написаны один раз, а затем выполнены неоднократно для обнаружения ошибок. В проекте Joomla в настоящее время применяются два вида автоматического тестирования: блочное и системное. Блочное тестирование (так называемые Unit-тесты) служит для тестирования платформы Joomla, а также для выполнения блочных тестов - программа на PHP под названием РНРUnit. Это дает возможность писать тесты, снабжающими метод данными в коде PHP, и сравнить результаты, полученные с предполагаемыми.

Системное тестирование служит для проверки работоспособности системы CMS с точки зрения пользователя. С этой целью система CMS выполняется в сеансе работы с браузером под управлением тестовой программы. А в браузере выполняется последовательность команд ввода данных, включая операции с мышью и ввода с клавиатуры, имитирующие действия пользователя тестируемого программное обеспечение. Документ в окне браузера может быть автоматически проверен в системном тесте на предмет появления некоторой информации на веб-странице. Для создания и выполнения системных тестов в Joomla применяется программа Selenium.

Тестируем Joomla!

Тестирование программного обеспечения всегда было непростой задачей. И большую часть этой задачи составляет простая математика условных операторов if / then. Проще говоря, каждый оператор if создает два возможных пути выполнения программы. А значение возможных путей равняется 2 возведенное в n-степень (2n), где n - это количество операторов. В Joomla используется порядка 12,000 условных операторов if. Это означает, что существует неимоверное количество возможных комбинаций, которые теоретически мы могли бы протестировать в Joomla, но это заняло бы несколько тысяч лет. И это не принимая во внимание тот факт, что Joomla используется в различных средах (Linux, Windows, Apache, IIS, MySQL, SQL Server, и т.д.). Этого достаточно чтобы сказать, что тестирование Joomla - это большая работа.

Но не стоит отчаиваться. Не все так плохо, как кажется на первый взгляд. Например, используя принципы объектно-ориентированного программирования при написании кода для Joomla, мы уменьшаем взаимозависимость между различными частями пакета. Соответственно, мы можем протестировать множество частей программы независимо от других частей. Это значительно уменьшает количество возможных тестов. Но даже в этом случае, у нас все ещё намного больше теоретических тестов, чем мы могли бы протестировать.

Решения

Но если нет возможности протестировать каждый возможный путь выполнения и среду выполнения, как же мы тестируем Joomla и пытаемся сделать её свободной от багов насколько это возможно? Ответ таков: мы используем несколько различных стратегий тестирования. Это предоставляет не только механизм для постоянного улучшения, но и высокую степень доверия тому, что релизы Joomla, которые мы отправляем в плавание, будут работать так, как запланировано.

Автоматическое юнит-тестирование

Юнит-тестирование можно смело назвать самой научной формой тестирования. Здесь мы пишем тестовые программы, которые тестируют специфичные строки кода в пакете. В Joomla юнит-тестирование применяется в основном для платформы, где каждая программа делает специфичную низкоуровневую работу. Автоматические юнит-тесты исполняются довольно часто и незамедлительно дают отчет, если изменения в программе приводят к неисполнению теста. Когда это случается, изменения откатываются назад и не применяются до тех пор, пока не решится проблема. Это значительно уменьшает шанс того, что изменение породит новый баг. Кроме того, когда в платформу добавляются новые программы, для них в тоже самое время необходимо добавлять автоматические тесты.

С помощью юнит-тестирования мы фактически можем измерить точное количество строк кода, которое было протестировано. Что касается написания тестов, то на данный момент автоматические тесты тестируют порядка 40% кода платформы. Кодеры добровольцы постоянно работают над написанием, и процент растет. Юнит-тестирование является важной частью стратегии тестирования Joomla и чем больше кода мы можем протестировать с его помощью, тем меньше у нас будет багов.

Если бы мы могли достичь 100%, означало ли это, что багов больше нет? Вы скорее всего уже догадались, ответ - нет. Даже если бы мы могли протестировать весь код платформы, всегда есть человеческой фактор ошибки в тестах. И если программы платформы работают именно так как сконструированы, то иногда они имеют конструктивные недостатки, которые являются причиной багов. Плюс, программы платформы могут быть некорректно использованы где-то ещё в Joomla. Тем не менее, юнит-тестирование значительно уменьшает вероятность появления багов.

Автоматическое тестирование системы

Другой тип тестирования, который мы используем в Joomla - это автоматическое тестирование системы. Это очень легко понять. Представьте, что вы пишите детальную инструкцию по тестированию:
1. Зайдите в Менеджер материалов и нажмите Новый.
2. Добавьте новую статью с названием "Тест" и назначьте её категории Избранные (главная страница).
3. Зайдите на главную страницу и убедитесь, что статья появилась.

Системные тесты - это программы, которые следуют тестовому скрипту в точности как в инструкции. Вместо печатающего и кликающего человека, системные тесты посылают в браузер симулирующие нажатия клавиш и клики мышки в различных сценариях использования. Потом мы можем автоматически проверить страницу и удостовериться в том, что результаты соответствуют тому, что мы ожидали.

В настоящее время у нас есть 57 системных тестов, которые отрабатывают примерно в течении 40 минут и проверяют примерно 3400 условий. Это эквивалентно нескольким часам проверки человеком. Системные тесты запускаются автоматически каждую ночь и сразу же сообщают нам, если внесенные изменения порождают ошибку. С тех пор как мы начали использовать системные тесты, они доказали свою состоятельность в поимке багов непосредственно перед их релизом.

В текущем использовании системные тесты в Joomla не пытаются протестировать каждый сценарий использования или каждое расширение ядра. Они больше похожи на “проверку реальности”, когда необходимо удостовериться, что основные системные функции работают как положено. Мы с удовольствием хотели бы иметь больше системных тестов для тестирования большей функциональности ядра и с большей детальностью. Это сфера, где бы мы могли использовать помощь, и вам не надо быть супер опытным программистом, чтобы писать системные тесты.

Тестирование багов

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

Когда кто-то сообщает о баге, мы создаем проблему (issue) в трекере проблем (Issue Tracker). Перед тем как добавить предложенное исправление в основной код, как правило два человека (не те, что исправляли баг) тестируют предложенное исправление и смотрят, чтобы оно работало корректно и не было причиной других багов. Точный способ тестирования зависит от природы бага. В некоторых случаях, когда проблема слишком сложная и потенциально может вызвать появление других проблем, нам может понадобиться больше времени на тестирование перед внесением исправления.

Еще один важный момент - Bug Squad (команда по тестированию багов) всегда ожидает помощи в тестировании. И вам необязательно быть программистом, чтобы состоять в Bug Squad. Если вы достаточно опытный пользователь Joomla, мы могли бы воспользоваться вашей помощью. Практически постоянно у нас есть десятки предложенных исправлений багов, которые ждут пока их кто-то протестируют. Если вы заинтересованы в том, чтобы помочь, то напишите на Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. .

Тестирование релиза

Когда мы готовы выпустить новую версию Joomla, мы делаем специальное тестирование релиза. Мы тестируем доступность скачиваемых пакетов и автоматическое обновление. Также мы запускаем системные тесты, чтобы убедиться в том, что при сборке пакетов все прошло без ошибок. Эти тесты обычно проводят добровольцы из Bug Squad.

Тестирование расширений

В идеальном мире обновления Joomla никогда бы не конфликтовали со сторонними расширениями. Однако, как только мы вносим изменения в ядро Joomla существует возможность того, что эти изменения станут причиной возникновения проблем с расширениями. В идеале разработчики расширений должны периодически проверять то, что их расширения корректно выполняются на основе текущего кода. Таким образом, если изменение порождает проблему, то о ней может быть сообщено и она может быть исправлена перед релизом. Если это невозможно, то можно протестировать расширение используя предложенные релиз пакеты, которые создаются за несколько дней до каждого релиза.

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

Как вы можете помочь?

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

1. Если вы нашли баг, то сообщите о нем. Если не уверены, создайте тему с вопросом на форуме поддержки.
2. Если вы кодер и заинтересованы в автоматическом тестировании, станьте добровольцем и помогите с написанием юнит и системных тестов. Если вы не уверены или не знаете с чего начать, то спросите в группах Google или напишите на Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. .
3. Если вы хотите помочь в тестировании исправлений багов или релизов в Bug Squad, пошлите письмо Марку Декстеру. Запомните, вы не должны знать программирование, чтобы иметь возможность помогать в Bug Squad.

Как вы уже поняли, тестирование это большая задача и мы используем несколько разных стратегий тестирования. Множество добровольцев, которые помогают в тестировании делают возможным поддержку и улучшение качества Joomla. Я призываю вас присоединиться к их усилиям.

Joomla Quiz Deluxe – инструмент для создания электронных онлайн тестов

Лицензирование

Лицензия для 1-го домена

Лицензия на 1 домен для Joomla Quiz Deluxe, это дистрибутив, обновления, документация и поддержка для одного домена. При необходимости вы можете заказать услугу первоочередного оказания технической поддержки (необходимо указать при заказе).

Лицензия для неограниченного количества доменов

Лицензия на неограниченное количество доменов для Joomla Quiz Deluxe, это дистрибутив, обновления, документация и поддержка для всех ваших доменов. При необходимости вы можете заказать услугу первоочередного оказания технической поддержки (необходимо указать при заказе).

Дополнительные услуги

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

Характеристики:

Joomla Quiz Deluxe представляет собой улучшенное решение на платформе Joomla для работы с тестами. Созданные тесты можно размещать в сети Интернет для проведения любого вида тестирования.

Как создавать в тесте аудио-/видео вопросы?

Затем, ознакомьтесь с опциями установленного плагина. После этого вы сможете добавить к тесту аудио вопрос (например, имя_файла) или видео вопрос (например, имя_файла).

Как создать новый тест?

Как создать пункт меню теста?

Как устанавливать права доступа к тесту?

Как создавать ссылку на тест, не используя пункт меню?

Ссылка на тест должна выглядеть следующим образом: 'index.php?option=com_joomlaquiz&quiz_id=X' (о том, как узнать ID теста, вы можете прочесть в ответе на предыдущий вопрос).

Как устанавливать обновления?

Сначала необходимо деинсталировать версию компонента, которую вы используете. При этом вся информация сохраняется в базе данных.

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

Плагин JoomSocial

Х последних результатов

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

Х лучших результатов тестов

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

Результаты тестов

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

Мои результаты

Я задал этот вопрос на StackOverflow , и мне предложили задать его здесь.

Я знаком с модульным / системным / интеграционным тестированием и хотел бы иметь возможность протестировать мой компонент Joomla. Есть ли стандартный способ сделать это?

Я работаю с этим примером компонента joomla mvc , который не включает тесты. Все, что я могу найти в документации Joomla и на различных сайтах, это фрагменты тестового кода и файлы bootstrap.php. В частности, что я хотел бы знать, это:

Самое близкое, что я нашел, это то , на чем я основал свой фиктивный тест.

Что я сделал до сих пор

Структура каталогов компонентов:

  • Привет, мир/
    • админ /
      • .
      • Тесты /
        • bootstrap.php
        • phpunit.xml
        • modelHelloWorldsTest.php
        • .

        Первая попытка

        Для запуска тестов я устанавливаю / копирую компонент в мою установку Joomla. Затем я запускаю следующую команду из ~ joomla / Administration / components / com_helloworld / tests:

        от которого я получаю

        Я понимаю, что это означает, что мой bootstrap.php неверен и не загрузил необходимые классы Joomla. Я расскажу об этом в какой-то момент, но это похоже на большую настройку, чтобы запустить некоторые тесты.

        Вторая попытка

        Увидев этот ответ , я поместил свои тесты в папку test / unit под моей установкой joomla, скопировал phpunit.dist.xml и bootstrap.php из репозитория joomla-cms в соответствующие места и все еще получил

        ошибка, которую я получал раньше.

        Где разместить тестовый код компонента

        Как правило, лучшие практики говорят:

        Но я пропустил / src и просто но / tests / в каталоге компонентов. На переднем конце для компонента abc это может выглядеть примерно так:

        Нужно ли предоставлять свой собственный bootstrap.php

        Я сделал. Вроде. Я просто скопировал вкусности в корневом файле index.php в начало моего скрипта модульного теста. Твой был близок к моему. Моим следующим шагом будет инкапсуляция в отдельный файл, который мне потребуется require_once ().

        Я нашел это достаточно легко, чтобы катиться самостоятельно. Я даже не удосужился настроить phpunit.xml.

        Я наконец-то нашел время попробовать это (давно не использовал Joomla!). Кажется, чтобы сделать трюк!

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

        Прежде всего, важно прочитать документацию на PHPUnit . Создайте себе небольшой класс (независимо от Joomla) и попробуйте написать несколько тестов для него. Сначала запустите PHPUnit по такому сценарию. Понять, что он делает. Боюсь, вы слишком много внимания уделяете запуску PHPUnit, а не понимаете, как это помогает вашей разработке.

        Чтобы запустить Joomla , вам понадобится:

        • bootstrap.php - который даст вам экземпляр Joomla.
        • phpunit.xml - тонкая настройка параметров PHPUnit. Полезно, например, указать один раз для всего проекта, где находятся тестовые папки в каждом компоненте. Так что вы можете запустить набор тестов.

        Ошибка, которую вы получаете, максимально ясна. 'ContentController' явно не загружается Joomla. Проверьте с помощью отладчика, вызван ли автозагрузчик в Joomla и почему он не может загрузить класс. В худшем случае предоставьте свой собственный автозагрузчик и используйте файл начальной загрузки для его вызова. Быстрое исправление также вручную загружает требуемый файл с помощью require_once.

        Решите, что вы хотите проверить и использовать макеты

        В приведенном примере вы используете JModel для извлечения данных из базы данных. Это не пойдет с точки зрения TDD. Проверка того, что вы можете получать данные из базы данных, не имеет значения ИМХО. Что именно вы там тестируете?

        Если вам нужно работать с данными из базы данных, используйте mocks для моделирования ответа из базы данных. Таким образом, ваши тесты будут иметь согласованное поведение с течением времени. Вы не хотите проваливать тесты только потому, что вы что-то изменили в базе данных.

        Если у вас есть метод, который вычисляет что-то или что-то еще, что имеет смысл проверить. Это модульное тестирование: вы берете небольшой блок из вашей сложной системы, кормите его поддельными данными теста и проверяете его поведение.

        Нужно видеть, что ваша система работает в целом, использовать системные тесты.

        Извините, но этот ответ не очень актуален. Я раньше использовал PHPUnit и понимаю смысл тестирования. Я просто изо всех сил пытаюсь заставить мои тесты даже бежать. Тест в моем вопросе не важен, важная часть в том, что он работает. Я отредактировал свой вопрос в надежде прояснить ситуацию.

        Читайте также: