1

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

目前我有 2 个测试类 - UserTestPermissionsTest

  • 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..."

谢谢!

4

3 回答 3

3

在我看来,您似乎缺少将测试实现与其逻辑分离——我不是在谈论 PHP 问题,而是在谈论通用测试模型。它将允许您在各种测试用例中重用测试组件。

您可以在此处或一般 selenium wiki中查看有关 PHP 中的页面对象的一些材料。

于 2013-10-11T09:54:38.200 回答
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();

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

于 2013-10-15T15:09:15.247 回答
1

对于硒 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
    }
}
于 2014-01-06T10:57:16.300 回答