Перейти к содержимому

Фотография

SeleniumRC PHP обмен данными между тестами


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2

#1 frei_by

frei_by

    Постоянный участник

  • Members
  • PipPipPip
  • 177 сообщений
  • ФИО:Дмитрий

Отправлено 19 января 2011 - 16:09

Проблема такая. Занимаюсь написанием тестов для RC на php.
Есть конструкция из тестов:

class Example extends PHPUnit_Extensions_SeleniumTestCase
{
protected $arr_all; //property for script exchange

public function test_one()
	{...
	$this->arr_all = array (); //full array
	...
	var_dump ($this->arr_all);//array present
	}
public function test_second()
	{
	var_dump ($this->arr_all);//empty!!!!
	}
}

По моей задумке в первом тесте записывается $arr_all а во втором тесте считывается. ООП в php знаю очень приблизительно поэтому прошу снисхождения.

Для всего класса я объявляю свойство $arr_all;
далее в первом тесте test_one() присваиваю ему массив, и для проверки делаю var_dump - всё ок, свойство присвоилось.

Но когда во втором тесте test_second() я вновь пытаюсь обратится к данному свойству - то возвращает var_dump ($this->arr_all);//empty!!!! - NULL.

тесты исполняются один за другим. Пробовал сделать $arr_all; privaty либо public - не помогает. Можно конечно записать в сериализованный файл результаты работы одного теста а потом в другом тесте прочитать этот файл, но не вариант. Хотелось-бы именно в скрипте через переменные / поля класса.

Подскажите пожалуйста способ обмена информацией межуд тестами в пределах одного класса class Example ну или альтернативное решение. Спасибо...
  • 0

#2 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 19 января 2011 - 16:14

Попробуйде этот массив сделать статическим и public. По идее должно сработать.

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

#3 frei_by

frei_by

    Постоянный участник

  • Members
  • PipPipPip
  • 177 сообщений
  • ФИО:Дмитрий

Отправлено 19 января 2011 - 17:17

У меня первый тест и не тест вовсе, а просто подготовка данных для provider.

В PHPUnit можно делать дата драйвен тесты с помощью функции исполняющей роль провайдера данных.
В этой функции мне нужно на лету сформировать данные для из одной страницы и бомбить ими вторую страницу. Нужно считать на одной старнице массив данных броузером, а на другой странице броузером по этим данным устроить проверки. Я пробовал в функции провайдер вызвывать метод open - но естественно сессия для брозуера создана не была и поэтому фэйл. Решил сделать как отдельный тест в начале.

До этого у меня именно так и работало, в одном тесте считывал данные и проверял по ним. Но я решил немного рефакторнуть, и сформировать массив отдельно и сделать вот как здесь,
чтобы у меня provider сформировал именно так, и сделал это автоматически:
return array(
          array(0, 0, 0),
          array(0, 1, 1),
          array(1, 0, 1),
          array(1, 1, 3)
        );

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

Попробуйде этот массив сделать статическим и public

не помогло почему-то. Возможно ошибка в чём-то дургом, а возомжно phpunit пересоздаёт класс Example extends PHPUnit_Extensions_SeleniumTestCase перед каждым тестом, с него станется.

папка temp, serialize, fopen, fwrite,.... думаю буду делать так.
  • 0


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных