ADTester — это пакет программ предназначенный для проведения тестирования.
ADTester — это пакет программ предназначенный для проведения тестирования.
Бесплатно.
ADTester — это пакет программ предназначенный для проведения тестирования. С помощью ADTester возможна организация проведения тестирования в любых образовательных учреждениях, будь то школа, университет или колледж. Тестирование может проводиться как с целью выявления знаний учащихся в той или иной области, так и для обучающих целей.
С помощью пакета можно легко создавать тесты по любым предметам школьной программы, по любым ВУЗовским дисциплинам, любые тесты для узкопрофессионального тестирования, различные психологические тесты и т.д. В своих тестах вы можете использовать различные шрифты, формулы, схемы, таблицы, HTML документы и любые OLE-объекты.
Любой вопрос и ответ можно полноценно форматировать — различные шрифты, абзацы, списки и т.д. При этом вся информация достойно шифруется. Пакет черезвычайно прост в установке. Создавать тесты очень легко — это может делать даже преподаватель плохо владеющий компьютером.
Чешский легко и просто: Урок 2. Вопросы: – Что это? Кто это? Указательные местоимения.
ADSoft Tester — абсолютно бесплатный пакет программ, однако практически не уступающий своим платным аналогам по функциональности.
Программы пакета
-
Конструктор тестов — программа для создания тестов. Позволяет создавать и редактировать тесты любой стожности прикладывая минимум усилий.
Тестер — программа для проведения тестирования. Имеет максимально простой интерфейс и множество параметров проведения тестирования, позволяющих подстроить ее именно под ваши цели.
Админ панель — программа администрирования. Позволяет производить манипуляции с пользователями и группами пользователей, строить матрицы правильности и производить анализ результатов тестирования.
- Неограниченное кол-во вопросов в тесте и кол-во вариантов ответа.
- Пять типов вопросов:
- одиночный выбор;
- множественный выбор;
- ввод ответа с клавиатуры;
- соответствие;
- порядок.
Возможно установить режим тестирования: контроль и обучение. В режиме обучения при неправильном ответе можно посмотреть подсказку по данному вопросу, результаты тестирования не учитываются. В режиме контроля ведется статистика прохождения теста.
Каждый вопрос имеет свой «вес» (цену в баллах).
Каждый вопрос может сопровождаться подсказкой для тестируемого
Точное воспроизведение внешнего вида тестов (размер шрифтов, их цвет, название, стиль. ).
Вопросы могут сопровождаться: изображениями, html и RTF документами, таблицами, диаграммами и различными OLE документами .
Контроль отображения статистики пользователю (кол-во вопросов в тесте, номер текущего вопроса, индикаторы правильности ответа на каждый вопрос, оставшееся время).
Можно как разрешить, так и запретить показ результатов тестирования для пользователя.
Редактирование теста может быть защищено паролем (зашифрованным методом стойкой криптографии) .
Урок 2: Введение в Тестирование ПО — QA с Нуля — Что Такое QA
Тестирование может быть ограничено по времени.
Официальный сайт: http://www.adtester.org/
Закачка: http://www.adtester.org/download/
http://www.adtester.org/
Оставьте свой комментарий!
Источник: pro-spo.ru
Google testing framework (gtest)
Когда вставал вопрос о тестировании кода, я не задумываясь использовал boost::test. Для расширения кругозора попробовал Google Test Framework. Помимо всяких имеющихся в нем плюшек, в отличии от boost::test проект бурно развивается. Хотел бы поделиться приобретенными знаниями. Всем кому интересно прошу
Ключевые понятия
Ключевым понятием в Google test framework является понятие утверждения (assert). Утверждение представляет собой выражение, результатом выполнения которого может быть успех (success), некритический отказ (nonfatal failure) и критический отказ (fatal failure). Критический отказ вызывает завершение выполнения теста, в остальных случаях тест продолжается. Сам тест представляет собой набор утверждений.
Кроме того, тесты могут быть сгруппированы в наборы (test case). Если сложно настраиваемая группа объектов должна быть использована в различных тестах, можно использовать фиксации (fixture). Объединенные наборы тестов являются тестовой программой (test program).
Утверждения (assertion)
Утверждения, порождающие в случае их ложности критические отказы начинаются с ASSERT_, некритические — EXPECT_. Следует иметь ввиду, что в случае критического отказа выполняется немедленный возврат из функции, в которой встретилось вызвавшее отказ утверждение. Если за этим утверждением идет какой-то очищающий память код или какие-то другие завершающие процедуры, можете получить утечку памяти.
Имеются следующие утверждения (некритические начинаются не с ASSERT_, а с EXPECT_):
Простейшие логические
- ASSERT_TRUE(condition);
- ASSERT_FALSE(condition);
Сравнение
- ASSERT_EQ(expected, actual); — =
- ASSERT_NE(val1, val2); — !=
- ASSERT_LT(val1, val2); —
- ASSERT_LE(val1, val2); —
- ASSERT_GT(val1, val2); — >
- ASSERT_GE(val1, val2); — >=
Сравнение строк
- ASSERT_STREQ(expected_str, actual_str);
- ASSERT_STRNE(str1, str2);
- ASSERT_STRCASEEQ(expected_str, actual_str); — регистронезависимо
- ASSERT_STRCASENE(str1, str2); — регистронезависимо
Проверка на исключения
- ASSERT_THROW(statement, exception_type);
- ASSERT_ANY_THROW(statement);
- ASSERT_NO_THROW(statement);
Проверка предикатов
- ASSERT_PREDN(pred, val1, val2, . valN); — N
- ASSERT_PRED_FORMATN(pred_format, val1, val2, . valN); — работает аналогично предыдущей, но позволяет контролировать вывод
Сравнение чисел с плавающей точкой
- ASSERT_FLOAT_EQ(expected, actual); — неточное сравнение float
- ASSERT_DOUBLE_EQ(expected, actual); — неточное сравнение double
- ASSERT_NEAR(val1, val2, abs_error); — разница между val1 и val2 не превышает погрешность abs_error
Вызов отказа или успеха
- SUCCEED();
- FAIL();
- ADD_FAILURE();
- ADD_FAILURE_AT(«file_path», line_number);
Можно написать собственную функцию, возвращающую AssertionResult
::testing::AssertionResult IsTrue(bool foo) < if (foo) return ::testing::AssertionSuccess(); else return ::testing::AssertionFailure() TEST(MyFunCase, TestIsTrue)
Можно контролировать типы данных с помощью функции ::testing::StaticAssertTypeEq(). Компиляция пройдет с ошибкой в случае несовпадения типов T1 и T2.
В случае ложности утверждения, выдаются данные, использованные в утверждении. Кроме того, можно задать собственный комментарий:
ASSERT_EQ(1, 0)
Можно использовать расширенные наборы символов (wchar_t) как в комментариях, так и в утверждениях, касающихся строк. При этом выдача будет в UTF-8 кодировке.
Тесты (tests)
Для определения теста используется макрос TEST. Он определяет void функцию, в которой можно использовать утверждения. Как отмечалось ранее, критический отказ вызывает немедленный возврат из функции.
TEST(test_case_name, test_name)
TEST принимает 2 параметра, уникально идентифицирующие тест, — название тестового набора и название теста. В рамках одного и того же тестового набора названия тестов не должны совпадать. Если название начинается с DISABLED_, это означает, что вы пометили тест (набор тестов) как временно не используемый.
Можно использовать утверждения не только в составе теста, но и вызывать их из любой функции. Имеется лишь одно ограничение — утверждения, порождающие критические отказы не могут быть вызваны из не void функций.
Фиксации (fixtures)
Случается, что объекты, участвующие в тестировании, сложно настраиваются для каждого теста. Можно задать процесс настройки один раз и исполнять его для каждого теста автоматически. В таких ситуациях используются фиксации.
Фиксация представляет собой класс, унаследованный от ::testing::Test, внутри которого объявлены все необходимые для тестирования объекты при этом в конструкторе либо функции SetUp() выполняется их настройка, а в функции TearDown() освобождение ресурсов. Сами тесты, в которых используются фиксации, должны быть объявлены с помощью макроса TEST_F, в качестве первого параметра которого должно быть указано не название набора тестов, а название фиксации.
Для каждого теста будет создана новая фиксация, настроена с помощью SetUp(), запущен тест, освобождены ресурсы с помощью TearDown() и удален объект фиксации. Таким образом каждый тест будет иметь свою копию фиксации «не испорченную» предыдущим тестом.
#include #include class Foo < public: Foo() : i(0) < std::cout ~Foo() < std::cout int i; >; class TestFoo : public ::testing::Test < protected: void SetUp() < foo = new Foo; foo->i = 5; > void TearDown() < delete foo; >Foo *foo; >; TEST_F(TestFoo, test1) < ASSERT_EQ(foo->i, 5); foo->i = 10; > TEST_F(TestFoo, test2) < ASSERT_EQ(foo->i, 5); > int main(int argc, char *argv[])
В некоторых случаях создание тестируемых объектов является очень дорогой операцией, а тесты не вносят никаких изменений в объекты.
В таком случае можно не создавать фиксации заново для каждого теста, а использовать распределенную фиксацию с глобальным SetUp()и TearDown(). Фиксация автоматически становится распределенной, если в классе имеется хотя бы один статический член. Статические функции SetUpTestCase() и TearDownTestCase() будут вызываться для настройки объекта и освобождения ресурсов соответственно. Таким образом, набор тестов перед первым тестом вызовет SetUpTestCase(), а после последнего TearDownTestCase().
Если существует потребность в SetUp() и TearDown() для всей программы тестирования, а не только для набора теста, необходимо создать класс-наследник для ::testing::Environment, переопределить SetUp() и TearDown() и зарегистрировать его с помощью функции AddGlobalTestEnvironment.
Запуск тестов
Объявив все необходимые тесты, мы можем запустить их с помощью функции RUN_ALL_TESTS(). Функцию можно вызывать только один раз. Желательно, чтобы тестовая программа возвращала результат работы функции RUN_ALL_TESTS(), так как некоторые автоматические средства тестирования определяют результат выполнения тестовой программы по тому, что она возвращает.
Флаги
- ./test —gtest_filter=TestCaseName.*-TestCaseName.SomeTest — запустить все тесты набора TestCaseName за исключением SomeTest
- ./test —gtest_repeat=1000 —gtest_break_on_failure — запустить тестирующую программу 1000 раз и остановиться при первой неудаче
- ./test —gtest_output=«xml:out.xml» — помимо выдачи в std::out будет создан out.xml — XML отчет с результатами выполнения тестовой программы
- ./test —gtest_shuffle — запускать тесты в случайном порядке
Вместо заключения
В данном посте я кратко пробежался по основным функциям Google Test Framework. За более подробными сведениями следует обратиться к документации. Оттуда вы сможете почерпнуть информацию о ASSERT_DEATH используемом при падении программы, о ведении дополнительных журналов, о параметризованных тестах, настройке вывода, тестировании закрытых членов класса и многое другое.
UPD: По справедливому замечанию хабрапользователя nikel добавлена краткая инофрмация по использованию флагов.
UPD 2: Исправление разметки после изменений на Хабре (нативный тег source).
Источник: habr.com
Модуль unittest: тестируем свои программы
Представьте, что вы написали какую-либо программу, а теперь хотите проверить, правильно ли она работает. Что вы для этого сделаете? Скорее всего, вы запустите её несколько раз с различными входными данными, и убедитесь в правильности выдаваемого ответа.
А теперь вы что-то поменяли и снова хотите проверить корректность программы. Запускать ещё несколько раз? А если потом снова что-то поменяется? Нельзя ли как-то автоматизировать это дело?
Оказывается, можно. В Python встроен модуль unittest, который поддерживает автоматизацию тестов, использование общего кода для настройки и завершения тестов, объединение тестов в группы, а также позволяет отделять тесты от фреймворка для вывода информации.
Для автоматизации тестов, unittest поддерживает некоторые важные концепции:
- Испытательный стенд (test fixture) — выполняется подготовка, необходимая для выполнения тестов и все необходимые действия для очистки после выполнения тестов. Это может включать, например, создание временных баз данных или запуск серверного процесса.
- Тестовый случай (test case) — минимальный блок тестирования. Он проверяет ответы для разных наборов данных. Модуль unittest предоставляет базовый класс TestCase, который можно использовать для создания новых тестовых случаев.
- Набор тестов (test suite) — несколько тестовых случаев, наборов тестов или и того и другого. Он используется для объединения тестов, которые должны быть выполнены вместе.
- Исполнитель тестов (test runner) — компонент, который управляет выполнением тестов и предоставляет пользователю результат. Исполнитель может использовать графический или текстовый интерфейс или возвращать специальное значение, которое сообщает о результатах выполнения тестов.
Модуль unittest предоставляет богатый набор инструментов для написания и запуска тестов. Однако достаточно лишь некоторых из них, чтобы удовлетворить потребности большинства пользователей.
Вот короткий скрипт для тестирования трех методов строк:
Заметьте, что для того, чтобы проверить что-то, мы используем один из assert*() методов.
Тестов может быть много, и часть кода настройки может повторяться. К счастью, мы можем определить код настройки путём реализации метода setUp(), который будет запускаться перед каждым тестом:
Можно разместить все тесты в том же файле, что и сама программа (таком как widgets.py), но размещение тестов в отдельном файле (таком как test_widget.py) имеет много преимуществ:
- Модуль с тестом может быть запущен автономно из командной строки.
- Тестовый код может быть легко отделён от программы.
- Меньше искушения изменить тесты для соответствия коду программы без видимой причины.
- Тестовый код должен изменяться гораздо реже, чем программа.
- Протестированный код может быть легче переработан.
- Тесты для модулей на C должны быть в отдельных модулях, так почему же не быть последовательным?
- Если стратегия тестирования изменяется, нет необходимости изменения кода программы.
Пропуск тестов и ожидаемые ошибки
unittest поддерживает пропуск отдельных тестов, а также классов тестов. Вдобавок, поддерживается пометка теста как «не работает, но так и надо».
Пропуск теста осуществляется использованием декоратора skip() или одного из его условных вариантов.
Декораторы, пропускающие тесты или говорящие об ожидаемых ошибках:
Для пропущенных тестов не запускаются setUp() и tearDown(). Для пропущенных классов не запускаются setUpClass() и tearDownClass(). Для пропущенных модулей не запускаются setUpModule() и tearDownModule().
Различение итераций теста с помощью подтестов
Когда некоторые тесты имеют лишь незначительные отличия, например некоторые параметры, unittest позволяет различать их внутри одного тестового метода, используя менеджер контекста subTest().
Например, следующий тест: