Mink开源的PHP浏览器/控制器模拟测试工具

有大量的浏览器模拟器,比如GoutteSelenium、 Sahi等。他们都做同样的工作,但做得非常不同。它们的行为不同并且具有非常不同的 API。但是,更重要的是,实际上有两种完全不同类型的浏览器模拟器:

  • 无头浏览器模拟器
  • 浏览器控制器

第一种浏览器模拟器是简单的纯 HTTP 规范实现,比如 Goutte。这些浏览器模拟器针对应用程序发送真实的 HTTP 请求并解析响应内容。它们的运行和配置非常简单,因为这种类型的模拟器可以用任何可用的编程语言编写,并且可以在没有 GUI 的服务器上通过控制台运行。无头模拟器既有优点也有缺点。优点是简单、快速和无需真正的浏览器即可运行的能力。但是这种浏览器模拟器有一个很大的缺点,它没有 JS/AJAX 支持。因此,您无法使用无头浏览器测试丰富的 GUI Web 应用程序。

第二种浏览器模拟器是浏览器控制器。这些模拟器旨在控制真正的浏览器。没错,一个程序控制另一个程序。浏览器控制器模拟浏览器上的用户交互,并能够从当前浏览器页面检索实际信息。SeleniumSahi 是两个最著名的浏览器控制器。使用浏览器控制器的主要优点是支持页面上的 JS/AJAX 交互。缺点是此类浏览器模拟器需要安装浏览器、额外配置,并且通常比无头浏览器慢得多。

因此,简单的答案是为您的项目选择最佳模拟器并使用其 API 进行测试。但是正如我们已经看到的,这两种浏览器模拟器类型各有优缺点。如果您选择无头浏览器模拟器,您将无法测试您的 JS/AJAX 页面。如果您选择浏览器控制器,您的整体测试套件在某些时候会变得非常缓慢。所以,在现实世界中,我们应该同时使用两者!这就是您需要Mink的原因。

Mink消除了不同浏览器模拟器之间的 API 差异,为每个浏览器模拟器提供不同的驱动程序(阅读驱动程序章节),并为您提供一种简单的方法来控制浏览器(控制浏览器)、遍历页面(遍历页面)、操作页面元素(操作页面)或与它们交互与页面交互)。

Mink安装:

Mink 是一个 php 库,您将在测试套件或项目中使用它。在开始之前,请确保您至少安装了 PHP 5.4。

  1. composer require --dev behat/mink

使用示例:

  1. <?php
  2. use Behat\Mink\Mink,
  3.     Behat\Mink\Session,
  4.     Behat\Mink\Driver\GoutteDriver,
  5.     Behat\Mink\Driver\Goutte\Client as GoutteClient;
  6. $startUrl = 'http://example.com';
  7. // init Mink and register sessions
  8. $mink = new Mink(array(
  9.     'goutte1' => new Session(new GoutteDriver(new GoutteClient())),
  10.     'goutte2' => new Session(new GoutteDriver(new GoutteClient())),
  11.     'custom'  => new Session(new MyCustomDriver($startUrl))
  12. ));
  13. // set the default session name
  14. $mink->setDefaultSessionName('goutte2');
  15. // visit a page
  16. $mink->getSession()->visit($startUrl);
  17. // call to getSession() without argument will always return a default session if has one (goutte2 here)
  18. $mink->getSession()->getPage()->findLink('Downloads')->click();
  19. echo $mink->getSession()->getPage()->getContent();
  20. // call to getSession() with argument will return session by its name
  21. $mink->getSession('custom')->getPage()->findLink('Downloads')->click();
  22. echo $mink->getSession('custom')->getPage()->getContent();
  23. // this all is done to make possible mixing sessions
  24. $mink->getSession('goutte1')->getPage()->findLink('Chat')->click();
  25. $mink->getSession('goutte2')->getPage()->findLink('Chat')->click();

 

 

波波
你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!