Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
Временно недоступен
 Аватар для #pragma
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926

Создание системы тестирования ПО.

09.08.2009, 16:50. Показов 4264. Ответов 4

Студворк — интернет-сервис помощи студентам
Собственно,хотел написать скрипт по тестированию программы отсюда Пишем свой интерпретатор языка BASIC .В сети нашёл кое-какие примеры,например перенаправления вывода программы,но всё это мне не подходит,мне нужен вывод последней строки,попавшей в cerr.
Кратко-в программе имеется парсер,на входе файл с намеренной ошибкой,парсер должен отреагировать,и нужно сравнить последнюю строку,напечатанную в cerr,с эталоном.
То есть,я начинаю писать так :
Python
1
2
3
#!/bin/bash
 
exec "./bsc"
Но как правильно отловить напечатанное в cerr (или stderr) перенаправить в строку,чтобы потом сделать инструкцию с if?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.08.2009, 16:50
Ответы с готовыми решениями:

Создание системы тестирования
Ребят Привет!! Помогите плиз Задание: На любом языке программирования необходимо создать систему тестирования, которая должна...

Создание системы тестирования студентов
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <style> div#test{ border:#000 1px solid; padding:10px 40px 40px 40px; } ...

Создание автоматизированной онлайн системы тестирования
Задача - создать веб-приложение, которое позволяет тестировать студенческий код ( на Python, в частности). Нужно создать веб-форму...

4
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
09.08.2009, 20:53
Напиши на perl.
system( "./bsc 1>stdout 2>stderr" );
Потом пропарсить файл stderr - взять оттуда последнюю строку ...
1
Временно недоступен
 Аватар для #pragma
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
09.08.2009, 23:07  [ТС]
Я перл-то не знаю.Ну а в файл-то хотя бы можно как-то перенаправить?А то я вроде как получаю перенаправление из exec,а не из проги. Рою по гуглю уже целый день ))

Добавлено через 1 час 6 минут 15 секунд
О,ну вроде само как-то дошло,надо было просто писать полный путь к файлу,а я мучался.В переменную так и не смог направить.
Python
1
2
3
4
#!/bin/bash
 
exec "./bsc" source.bsc  2>/media/Part2/C++/Projects/CodeBlocks/Interpreter/Interpreter/errors |
exec "./bsc" source1.bsc 2>>/media/Part2/C++/Projects/CodeBlocks/Interpreter/Interpreter/errors
Ну и в принципе уже не проблема сравнить с каким нибудь шаблонным файлом.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
09.08.2009, 23:16
На bash'е тоже самое

./bsc 1>file1 2>file2

Потоком номер 1 является stdout, 2 - stderr

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

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

Начни для начала с простого примера. Например, нам надо проверить правильность вычисления выражения (с точки зрения приортиетов операций)

PureBasic
1
2
3
4
5
6
LET a = 10
LET b = 20
LET c = a * b + a * b
PRINT "c=",c
LET d = a * (b + a) * b
PRINT "d=",d
В данном случае тебе нужно запустить на интерпретацию данный файл, а вывод переназначить в файл. Затем diff'ом сравнить.

Технически подобные тесты удобно хранить в виде двух файлов на каждый тест. Допустим имеется исходник test01.bas и эталонная выдача к нему test01.bas.stdout, далее файл test02.bas и эталонная выдача test02.bas.stdout и т.д.

Простенький скрипт выглядит что-то типа того (я его не проверял, просто смысл напишу, дальше сам допиливай):

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash
 
# Путь до интерпретатора
BSC=/home/trampampam/interp/bsc
 
# Каталог с тестами
SRC_DIR=/home/trampampam/tests
 
# По всем файлам с расширением *.bas в каталоге SRC_DIR
for t in `ls $SRC_DIR/*.bas` ; do
  # Запускаем интерпретатор на очередной тест, а выдачу сливаем в промежуточный файл
  $BSC $t > /tmp/stdout
 
  # Сравниваем выдачу с эталоном
  diff /tmp/stdout $t.stdout
  res=$?
 
  # Печать результата
  if [ $res = 0 ] ; then
    echo "$t PASS"
  else
    echo "$t ****** FAIL ******"
  fi  
done
Первая строка, начинающаяся с "#!" говорит, какой интерпретатор надо запускать для данного скрипта (мы указали bash). Скрипт должен иметь права на исполнение. Около слова FAIL я рисую кучу звёздочек, чтобы, например, в списке из 100 тестов строка с сломавшимся тестом бросалась в глаза

Работая на bash и прочих shell'ах надо учитывать, что операция "=" должна быть без пробелов. Т.е. "A=1" правильно, а "A = 1" - нет. При этом выдастся какая-то нечленораздельная ошибка
1
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
10.08.2009, 08:44
Ну а в файл-то хотя бы можно как-то перенаправить?
./bsc 1>stdout 2>stderr
stdout - это файл
stderr - это тоже файл
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.08.2009, 08:44
Помогаю со студенческими работами здесь

Создание автоматизированной системы тестирования программ
Доброго времени суток. Сегодня столкнулся с задачей: создать автоматизированную систему тестирования программ, написанных на разных языках...

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

Создание кнопки "далее" для системы тестирования
Здравствуйте, создаю систему тестирования знаний. Подключаю к MS Access и данные вывожу через массив. Как мне сделать так, что бы программа...

Логика системы тестирования
Есть группуы тестов. Пользователь выбирает эти группы тестов через форму с чекбоксами. Тащу из базы тесты указанных групп с их ответами....

Разработка системы автоматического тестирования
Здравствуйте дорогие жители этого форума.У меня разгорелась такая проблема.Я учусь на 3 курсе на программиста,уже начались экзамены,каждому...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru