【问题标题】:PHPUnit Selenium page between tests测试之间的 PHPUnit Selenium 页面
【发布时间】:2014-02-23 14:12:39
【问题描述】:

我正在使用 PHPUnit 和 Selenium 在网站上运行自动测试。我已经创建了涵盖我大部分网站的测试,但它们运行得相当慢。运行它们需要 25 分钟,因此非常耗时(无论如何按照我的标准 :))。通过对测试进行一些调整,我设法让它们工作得更快,主要的调整是开始使用 selenium -browserSessionReuse 始终重用同一个窗口。运行测试的时间缩短到 16 分钟。

现在我正在尝试测试http://local.app/admin/ 的页面,默认情况下我的所有测试都在那里,但是在测试之间(当 1 个测试完成并且另一个测试打开时)selenium 使用的 firefox 窗口转到@ 987654322@ 这是我的主要网站。有没有办法控制这个?我宁愿不让它加载网站的主页,因为这也需要时间,如果没有这个,我将进一步减少运行测试所需的时间。

一些代码:
我从

开始硒
java -jar selenium-server-standalone-2.38.0.jar -browserSessionReuse

phpunit.xml 文件有

<phpunit bootstrap="bootstrap.php"
    colors="false"
    convertErrorsToExceptions="true"
    convertNoticesToExceptions="true"
    convertWarningsToExceptions="true"
    stopOnFailure="false">

<selenium>
    <!--browser name="Internet Explorer" browser="*iexplore" /-->
    <browser name="Firefox" browser="*firefox" />
</selenium>

<filter>
  <whitelist processUncoveredFilesFromWhitelist="true">
    <directory suffix=".php">../models/</directory>
    <directory suffix=".php">../controllers/</directory>
    <directory suffix=".php">../components/</directory>
    <directory suffix=".php">../widgets/</directory>
    <directory suffix=".php">../../common/</directory>
    <exclude>
      <directory suffix=".php">../../common/modules/core/extensions/Html2Pdf/</directory>
      <directory suffix=".php">../../common/modules/core/extensions/bootstrap/</directory>
      <directory suffix=".php">../../common/modules/core/views/</directory>
      <directory suffix=".php">../../common/modules/core/widgets/views/</directory>
      <directory suffix=".php">../../common/modules/core/tests/</directory>
      <directory suffix=".php">../../common/modules/core/migrations/</directory>
      <directory suffix=".php">../../common/modules/core/components/Mandrill/</directory>
      <directory suffix=".php">../../common/modules/core/components/PHPMailer/</directory>
      <directory suffix=".php">../../common/widgets/views/</directory>
      <directory suffix=".php">../../common/lib/</directory>
      <directory suffix=".php">../widgets/views/</directory>
      <directory suffix=".php">../widgets/views/</directory>
      <file>../../common/modules/core/components/Mandrill.php</file>
    </exclude>
  </whitelist>

</filter>

<logging>
  <log type="coverage-html" target="reports" charset="UTF-8" lowUpperBound="20" highLowerBound="60" />
  <log type="coverage-clover" target="reports/coverage.xml" />
  <log type="junit" target="reports/phpunit.xml" />
</logging>

我使用 Yii 进行开发。所以我有一个名为 WebTestCase.php 的文件,我的所有功能测试都对其进行了扩展。 WebTestCase 文件的内容是。

define('TEST_BASE_URL','http://local.app/admin/index-test.php/');

class WebTestCase extends \CWebTestCase
{
    const TIMEOUT = 2;
    public static $logged_in = false;
    protected $coverageScriptUrl = 'http://local.app/phpunit_coverage.php';
    /**
     * Sets up before each test method runs.
     * This mainly sets the base URL for the test application.
     */
    protected function setUp()
    {
        parent::setUp();
        $this->setBrowser('*firefox');
        $this->setBrowserUrl(TEST_BASE_URL);
    }
}

有人知道为什么在测试之间浏览器会转到网站的主页吗?或者我怎么能控制这个?我有大约 100 次测试,这意味着主页(甚至缓存)被加载了 100 次。谢谢。

还有什么其他技巧可以让测试运行得更快吗?我想让它们在无头服务器上运行,并且时间必须进一步缩短,因为无头服务器比我的计算机慢很多。

【问题讨论】:

    标签: selenium yii phpunit selenium-webdriver


    【解决方案1】:

    setUp() 方法在每次测试之前运行,我相信你想在测试运行之前重写 setUpBeforeClass() 方法来设置浏览器

    【讨论】:

    • 我已经尝试过了,我知道它是如何工作的。我的问题是,当一整套测试(包含许多测试的文件)结束时,因为我使用 browserSessionReuse,浏览器保持打开状态并转到local.app。我从来没有告诉他去那个链接,我实际上不希望它去那个链接,因为那是可能没有完成的公共网站。即使它完成了,它也可能会加载需要时间来加载的外部文件,这会减慢我的测试速度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 2013-12-24
    • 2017-05-07
    • 1970-01-01
    • 2011-01-26
    • 2012-03-06
    相关资源
    最近更新 更多