Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
1

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

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

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

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

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

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

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

4
Эксперт С++
7175 / 3234 / 80
Регистрация: 17.06.2009
Сообщений: 14,164
09.08.2009, 20:53 2
Напиши на perl.
system( "./bsc 1>stdout 2>stderr" );
Потом пропарсить файл stderr - взять оттуда последнюю строку ...
1
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
09.08.2009, 23:07  [ТС] 3
Я перл-то не знаю.Ну а в файл-то хотя бы можно как-то перенаправить?А то я вроде как получаю перенаправление из 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
21245 / 8261 / 636
Регистрация: 30.03.2009
Сообщений: 22,606
Записей в блоге: 30
09.08.2009, 23:16 4
На 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 и т.д.

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

Код
#!/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
Эксперт С++
7175 / 3234 / 80
Регистрация: 17.06.2009
Сообщений: 14,164
10.08.2009, 08:44 5
Ну а в файл-то хотя бы можно как-то перенаправить?
./bsc 1>stdout 2>stderr
stdout - это файл
stderr - это тоже файл
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.08.2009, 08:44
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru