понедельник, 16 апреля 2012 г.

Запись выполнения тестов

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

В такой ситуации нам бы очень помогла запись того как исполнялся тест.

Слава богу есть такая возможность )))))

Нам следует обратиться вот к этому проекту.

Собственно весь проект нам не нужен. Скачиваем файлы screen-recorder-r2.2.jar и screen-player-r2.2.jar.

Добавляем их в build path нашего проекта с тестами.

Создаем в проекте класс Recorder.

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.one.stone.soup.screen.recorder.DesktopScreenRecorder;
import org.one.stone.soup.screen.recorder.ScreenRecorder;
import org.one.stone.soup.screen.recorder.ScreenRecorderListener;

public class Recorder implements ScreenRecorderListener {
    private ScreenRecorder recorder;

    public void start(String filename) throws FileNotFoundException {
        FileOutputStream oStream = new FileOutputStream(filename);
        recorder = new DesktopScreenRecorder(oStream, this);
        recorder.startRecording();
    }

    public void stop() {
        recorder.stopRecording();
    }

    public void frameRecorded(boolean fullFrame) throws IOException {
       
    }

    public void recordingStopped() {
       
    }

}

Данный класс при вызове метода start() будет записывать все что происходит на рабочем столе, до момента пока мы не вызовем stop().

Все это очень хорошо укладывается в тесты при использовании TestNG и его методов @AfterMethod и @BeforeMethod

После того как тест прошел и файл с записью создан мы можем проиграть его с помощью проигрывателя

java- -jar screen-player.jar (file-name)




6 комментариев:

  1. Привет! Можете написать какой код должен быть в @AfterMethod и @BeforeMethod, никак не получается запустить тест =(

    ОтветитьУдалить
  2. Код должен быть примерно такой

    public class Tests{

    private Recorder rec = new Recorder();

    @BeforeMethod
    public void beforeMethod(){
    rec.start("test");
    }

    @AfterMethod
    public void afterMethod(){
    rec.stop();
    }

    public void test1(){
    ///tests
    }
    }

    ОтветитьУдалить
  3. Тест прошел, но видео нигде нету, пробовал прописать абсолютный путь: rec.start("D:\\testvideo");
    Ничего не помогло =(
    А где оно по умолчанию должно сохранять если путь не указывать!?

    ОтветитьУдалить
    Ответы
    1. По умолчанию если путь не задан файлы создаются в корне проекта.

      Удалить
  4. Как то можно с конвертировать данное видео в какой-то другой формам ?
    Может есть плеер который может перематывать а не только ускорять видео ?

    ОтветитьУдалить
    Ответы
    1. С конвертировать в mov можно используя recording-converter-r1.1.jar качать отсюда http://code.google.com/p/java-remote-control/.
      Инструкция тут http://java-screen-recorder.googlecode.com/svn-history/r2/trunk/readme.txt

      Для того чтоб с конвертировать надо поставить Java Media Framework (JMF) иначе будет выдавать ошибку.
      Exception in thread "main" java.lang.NoClassDefFoundError: javax/media/Controlle
      rListener

      Удалить