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

Фотография

Selenium не получает SessionId


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

#1 patr14ek

patr14ek

    Новый участник

  • Members
  • Pip
  • 37 сообщений
  • ФИО:Lizz Stumph
  • Город:localhost


Отправлено 15 июня 2011 - 11:15

Добрый день. Совсем недавно,буквально вчера, мне пришлось столкнуться с Yii и функциональным тестированием.
php-файлы с тестами лежат удаленно, у нас git, Selenium RC у меня на компьютере.
При запуске тестов я получаю такую ошибку: "ERROR Server Exception: sessionId should not be null; has this session been started yet?",соотв. на стороне сервера то же самое.
Да и вот,что выводится дальше
~/.local/path/to/framework/test/CWebTestCase.php:61
~/.local/path/to/functional/MyProfile/profileSetUp.php:17
~/.local/path/to/functional/MyProfile/profileSetUp.php:17

В файле profileSetUp.php у меня только
class profileSetUp extends CWebTestCase {
public function setUp() {
parent::setUp();
$this->open("/profile");
}
}

Что мне нужно сделать,что SessionId не был null?
  • 0
ЕДРЕНАЯ КОНСОЛЬ ДЕЛАЕТ МЕНЯ СИЛЬНЕЙ!

#2 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 15 июня 2011 - 13:05

А что это за CWebTestCase? Вероятно, там в методе setUp должен быть вызов метода start() у селениума, но этого не случилось. Покажите реализацию CWebTestCase.
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#3 patr14ek

patr14ek

    Новый участник

  • Members
  • Pip
  • 37 сообщений
  • ФИО:Lizz Stumph
  • Город:localhost


Отправлено 16 июня 2011 - 05:34

Вот он. Никакие комментарии не убирала.


<?php
/**
 * This file contains the CWebTestCase class.
 *
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @link http://www.yiiframework.com/
 * @copyright Copyright &copy; 2008-2010 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 */

require_once('PHPUnit/Extensions/SeleniumTestCase.php');

/**
 * CWebTestCase is the base class for Web-based functional test case classes.
 *
 * It extends PHPUnit_Extensions_SeleniumTestCase and provides the database
 * fixture management feature like {@link CDbTestCase}.
 *
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @version $Id: CWebTestCase.php 2497 2010-09-23 13:28:52Z mdomba $
 * @package system.test
 * @since 1.1
 */
abstract class CWebTestCase extends PHPUnit_Extensions_SeleniumTestCase
{
	/**
	 * @var array a list of fixtures that should be loaded before each test method executes.
	 * The array keys are fixture names, and the array values are either AR class names
	 * or table names. If table names, they must begin with a colon character (e.g. 'Post'
	 * means an AR class, while ':Post' means a table name).
	 * Defaults to false, meaning fixtures will not be used at all.
	 */
	protected $fixtures=false;

	/**
	 * PHP magic method.
	 * This method is overridden so that named fixture data can be accessed like a normal property.
	 * @param string $name the property name
	 * @return mixed the property value
	 */
	public function __get($name)
	{
		if(is_array($this->fixtures) && ($rows=$this->getFixtureManager()->getRows($name))!==false)
			return $rows;
		else
			throw new Exception("Unknown property '$name' for class '".get_class($this)."'.");
	}

	/**
	 * PHP magic method.
	 * This method is overridden so that named fixture ActiveRecord instances can be accessed in terms of a method call.
	 * @param string $name method name
	 * @param string $params method parameters
	 * @return mixed the property value
	 */
	public function __call($name,$params)
	{
		if(is_array($this->fixtures) && isset($params[0]) && ($record=$this->getFixtureManager()->getRecord($name,$params[0]))!==false)
			return $record;
		else
			return parent::__call($name,$params);
	}

	/**
	 * @return CDbFixtureManager the database fixture manager
	 */
	public function getFixtureManager()
	{
		return Yii::app()->getComponent('fixture');
	}

	/**
	 * @param string $name the fixture name (the key value in {@link fixtures}).
	 * @return array the named fixture data
	 */
	public function getFixtureData($name)
	{
		return $this->getFixtureManager()->getRows($name);
	}

	/**
	 * @param string $name the fixture name (the key value in {@link fixtures}).
	 * @param string $alias the alias of the fixture data row
	 * @return CActiveRecord the ActiveRecord instance corresponding to the specified alias in the named fixture.
	 * False is returned if there is no such fixture or the record cannot be found.
	 */
	public function getFixtureRecord($name,$alias)
	{
		return $this->getFixtureManager()->getRecord($name,$alias);
	}

	/**
	 * Sets up the fixture before executing a test method.
	 * If you override this method, make sure the parent implementation is invoked.
	 * Otherwise, the database fixtures will not be managed properly.
	 */
	protected function setUp()
	{
		parent::setUp();
		if(is_array($this->fixtures))
			$this->getFixtureManager()->load($this->fixtures);
	}
}


  • 0
ЕДРЕНАЯ КОНСОЛЬ ДЕЛАЕТ МЕНЯ СИЛЬНЕЙ!

#4 patr14ek

patr14ek

    Новый участник

  • Members
  • Pip
  • 37 сообщений
  • ФИО:Lizz Stumph
  • Город:localhost


Отправлено 20 июня 2011 - 05:24

Что, правда никто не знает? =//
  • 0
ЕДРЕНАЯ КОНСОЛЬ ДЕЛАЕТ МЕНЯ СИЛЬНЕЙ!

#5 alena b

alena b

    Новый участник

  • Members
  • Pip
  • 23 сообщений
  • ФИО:Alena

Отправлено 20 июня 2011 - 08:10

"ERROR Server Exception: sessionId should not be null; has this session been started yet?" Ну я сталкивалась с таким иногда. Ошибку лечило только время =) Либо перегрузка машины. И перегрузка всего возможного. :crazy: Но не было никогда такого, чтобы такое было постоянно и не лечилось :vava:
Я в php не очень понимаю, вы не передаете случайно пустую сессию? =)
А если просто зарекродить и вставить в ИДЕ то будет такая же ошибка?
  • 0

#6 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 20 июня 2011 - 08:20

Почему не знает? Я же написал -- "в методе setUp должен быть вызов метода start() у селениума", а его там нет. Не открывается сессия, поэтому и null вместо sessionId.

В документации к PHPUnit_Extensions_SeleniumTestCase чётко написано: "Unlike with the PHPUnit_Framework_TestCase class, test case classes that extendPHPUnit_Extensions_SeleniumTestCase have to provide a setUp() method. This method is used to configure the Selenium RC session."
http://www.phpunit.d...eleniumtestcase

Либо в фикстурах должен быть запуск селениума, проверьте, есть ли там везде, где надо, вызов метода start()
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#7 patr14ek

patr14ek

    Новый участник

  • Members
  • Pip
  • 37 сообщений
  • ФИО:Lizz Stumph
  • Город:localhost


Отправлено 05 июля 2011 - 12:39

спасибо, разобралась. В setUp были лишние строчки.
  • 0
ЕДРЕНАЯ КОНСОЛЬ ДЕЛАЕТ МЕНЯ СИЛЬНЕЙ!


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

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