setUp(),tearDown()中的浏览器会话,每个测试用例设置没有?

rog*_*rkk 6 selenium phpunit

我以前用ruby/rspec编写了一些硒测试,发现它非常强大.现在,我正在使用Selenium和PHPUnit,并且有一些我缺少的东西,可能只是因为缺乏经验.在Ruby/RSpec中,我习惯于为每个测试用例定义一个"全局"设置,除此之外,我打开浏览器窗口并登录我的站点.

我认为PHPUnit在这里有点缺乏,1)你只有setUp()tearDown(),每个单独的测试之前和之后运行,2)似乎实际的浏览器会话设置setUp()在测试和关闭之间之前tearDown().

这使得测试本身更加混乱,因为您明确必须在开始时打开页面,并在最后执行清理.在每一次测试中.对于每次测试关闭并重新打开浏览器似乎也是不必要的开销,而不是仅仅返回到登录页面.

有没有其他方法可以实现我正在寻找的东西?

irc*_*ell 8

我过去所做的是创建一个受保护的方法,为会话返回一个对象,如下所示:

protected function initBrowserSession() {
    if (!$this->browserSession) {
        $this->setBrowser('*firefox');
        $this->setBrowserUrl('http://www.example.com/');
        //Initialize Session
        $this->open('http://www.example.com/login.php');
        // Do whatever other setup you need here
    }
    $this->browserSession = true;
}

public function testSomePage() {
    $this->initBrowserSession();
    //Perform your test here
}
Run Code Online (Sandbox Code Playgroud)

您无法真正使用这些setupBefore/AfterClass功能,因为它们是静态的(因此您将无法访问该实例).

现在,话虽如此,我会质疑你这样做的动机.通过在测试之间重新使用会话的测试,您可能会在测试之间产生副作用.通过为每个测试重新打开一个新会话,您可以将效果分离到测试的效果.谁关心重新打开浏览器的性能(至少在合理程度上)?这样做实际上增加了测试的有效性,因为它是孤立的.再说一遍,测试一个延长的会话可能有一些东西要说.但如果是这种情况,我会将其作为单独的测试用例/类来进行单独的功能测试......