【问题标题】:Identify Codeception in production environment识别生产环境中的 Codeception
【发布时间】:2017-12-23 18:35:43
【问题描述】:

我们通过 Browserstack 针对我们的生产环境运行 Codeception 测试(作为冒烟测试)。有没有一种简单的方法来识别 Codeception?通过设置自定义标头、用户代理或 cookie?

原因是,我们经常在我们的网站上运行 A/B 测试,并希望始终向 Codeception 显示控制段。

我找不到任何有关它的文档。

【问题讨论】:

  • 我觉得奇怪的是文档没有尝试解决这个问题,这似乎是一个非常普遍的需求。我想要它只是为了在我的本地 WordPress 安装上加载不同的数据库,具体取决于它是普通浏览器还是 WebDriver 访问。

标签: php codeception smoke-testing


【解决方案1】:

这就是我最终要做的。在 Acceptance.test.yml 中,我使用了 chrome 浏览器(对我来说并不重要)使用 args 覆盖了用户代理,并在我的 prod 环境中寻找它。

capabilities:
   chromeOptions:
     args: ["--user-agent=SmokeTesting"]

【讨论】:

  • 对我来说是正确的答案。然后,您可以在任何地方使用 false !== strpos($_SERVER['HTTP_USER_AGENT'], 'SmokeTesting') 或您设置为 UA 的任何内容对其进行测试。
【解决方案2】:

也许您可以通过查看用户代理字符串来识别它。例如,我们使用的是无头 Chrome (+WebDriver),它很好地介绍了自己:

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/63.0.3239.84 HeadlessChrome/63.0.3239.84 Safari/537.36

...但您不能 100% 确定是您本人,因为理论上,其他人也可能在您的网站上运行它。

或者,您可以在验收测试器中覆盖 amOnPage() 方法以在调用 parent::amOnPage() 之前设置标头:

public function amOnPage($page)
{
    $this->haveHttpHeader('x-codeception', '1');
    parent::amOnPage($page);
}

也不要忘记覆盖amOnUrl(),因为它会以与amOnPage() 相同的方式访问页面,而amOnSubdomain() 只切换子域而不访问它。

【讨论】:

  • 所以 haveHttpHeader 用于 RestAPI 不适用于 WebDriver。
【解决方案3】:

这取决于您如何使用它。您可能正在谈论进行验收测试,尽管该概念可用于驱动第一人称浏览器交互的任何操作。所以你可能会做类似的事情:

$I->amOnPage('/homepage');
$I->loginAsAdmin();

因此,根据您所做的事情,您可以通过您正在执行的任何正常登录操作来识别 Codeception。例如,如果您正在测试 WordPress,您可以创建一个用户名“CodeceptTester”,然后只关注该登录。很难设置实际的标题。你可以用 PHPbrowser 来做,但不能用 Selenium。事实上,我很确定你不能通过 Codeception 设置 Selenium 标头,但是浏览器的插件可以做到这一点。你可以用 PhantomJS 做,但我不知道怎么做。

setting request headers in selenium

http://phptest.club/t/useragent-in-codeception/186/3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多