PHPUnit和Selenium - 从另一个类运行测试

时间:2013-10-11 09:19:43

标签: php selenium phpunit selenium-webdriver

我正在使用PHPUnit和Selenium来测试我的Web应用程序。

目前我有2个测试类 - UserTest PermissionsTest

  • UserTest 中,我有测试程序可以成功创建新用户的方法。
  • PermissionsTest 中,我打开和关闭某些权限并测试结果。

例如,我可能会关闭“创建用户”权限,然后测试“创建用户”按钮是否已禁用。但是,如果我重新启用“创建用户”权限,我想测试是否可以创建用户。

能够创建用户的所有逻辑都已经在UserTest类中 - 所以有没有办法从PermissionsTest类的UserTest类运行测试?

目前我正在尝试以下代码:

public function testUserPermission(){
  $userTest = new UserTest();
  if($this->hasPermission = true){
    $userTest->testCanCreateUser();
  }
}

但是,当我运行此测试时,我收到错误"There is currently no active session to execute the 'execute' command. You're probably trying to set some option in setup() with an incorrect setter name..."

谢谢!

3 个答案:

答案 0 :(得分:3)

听起来像你错过了你的测试实现与逻辑的分离 - 我不是在谈论PHP问题而是一般的测试模型。它将允许你在各种测试用例中重用你的测试组件。

你可以看看一些 关于PHP here中的页面对象或一般硒wiki的材料。

答案 1 :(得分:1)

解决方案如下:

//instantiate and set up other test class
$userTest = new UserTest();
$userTest->setUpSessionStrategy($this::$browsers[0]);
$userTest->prepareSession();

//carry out a test from this class
$userTest->testCanCreateUser();

这很好用。我不明白为什么在这种情况下使用来自另一个测试类的功能是一个坏主意,因为如果我不这样做,我必须将该功能重写到我的新类中,这似乎不那么“纯粹”。

答案 2 :(得分:1)

对于Selenium 1(RC),

我做了以下修改(以及应用页面对象设计模式):

特定测试类

//instantiate and set up other test class
$userTest = new UserTest($this->getSessionId());

//carry out a test from this class
$userTest->createUser();

//asserts as normal
$userTest->assertTextPresent();
...

基页对象类

class PageObject extends PHPUnit_Extensions_SeleniumTestCase {
    public function __construct($session_id) {
        parent::__construct();
        $this->setSessionId($session_id);
        $this->setBrowserUrl(BASE_URL);
    }
}

特定页面对象类

class UserTest extends PageObject {

    public function createUser() {
        // Page action
    }
}