首页 > 后端开发 > php教程 > 将硒与phpunit一起使用

将硒与phpunit一起使用

Christopher Nolan
发布: 2025-02-17 08:31:09
原创
343 人浏览过

将硒与phpunit一起使用

>测试是一个非常广泛的主题,无论是单位测试,功能测试,接受测试等。在本文中,我们将了解如何使用硒进行接受测试。我将使用一个实用的示例来说明真实用例。我将假设您已经知道如何使用Phpunit进行单元测试,或者至少可以掌握一切。让我们开始。

将硒与phpunit一起使用

钥匙要点

  • > Selenium是自动化用户界面测试的工具,使您可以设置与用户一样与Web应用程序进行交互的测试。它通过将测试转换为命令并将其传递到Selenium Server来起作用,然后使用其本机API与Web浏览器进行交互。 PHPunit是PHP的单元测试框架,可以与硒一起用于接受测试。它为此目的提供了两个类:phpunit_extensions_seleniumtestcase for selenium rc(现已删除)和phpunit_extensions_selenium2testcase for selenium webdriver。 PHPUNIT中的数据提供商
  • 允许将特定数据馈入未经迭代的测试中。这可以与Selenium结合使用,以测试您的Web应用程序如何响应不同的输入。
  • >
  • 硒测试可以在不同的浏览器上进行,因为硒使用了每个浏览器供应商提供自己的驱动程序的驱动程序方法。这允许您的Web应用程序进行全面的跨浏览器测试。
  • >
  • 什么是接受测试?
  • >
接受测试是通过测试讲述用户故事的过程,我喜欢这句话来描述它:

进行正式测试,以确定系统是否满足其接受标准,并使客户能够确定是否接受该系统。

什么是硒?

硒是自动化用户界面测试的工具。它有助于对浏览器测试应用程序。该过程可以像这样描述:

访问页面http://myapp.dev/videos。

断言该页面包含20个视频的列表。
    >
  • 单击分页上的第二个。
  • 断言该页面包含20个视频的列表。
  • >
  • 退出浏览器。
  • >您可能想知道:“它如何使用所描述的测试来操纵网页?”
  • 答案是“取决于”。如果您使用的是Selenium RC(先前命名为Selenium 1),则将自动生成的JavaScript代码注入页面以执行所需的操作。硒RC被弃用,仅在维护模式下得到支持;您应该使用Selenium webdriver。

使用Selenium Webdriver(Selenium 2)时,测试将转换为命令并传递到Selenium Server(详细介绍此信息),然后使用Web浏览器本机API传递到浏览器。

>应用程序设置

因为我们实际上没有测试应用程序,所以我将使用用户注册页面。用户将输入他的个人信息和一些计费信息。如果一切都很好,则页面应该输出所有内容都很好!否则,该页面将显示带有验证错误消息列表的订阅表格。

>

将硒与phpunit一起使用

>我们将开始使用与硒扩展的Phpunit一起测试我们的应用程序。在开始之前,请确保使用作曲家安装它们。

>

<span>composer require --dev phpunit/phpunit
</span><span>composer require --dev phpunit/phpunit-selenium</span>
登录后复制
登录后复制
登录后复制
>我们在将命令传递给硒服务器之前说,然后将它们转发到浏览器。我们需要下载Selenium Server,这只是Java存档可执行文件。可以使用Java -jar selenium-server-standalOne- .jar运行服务器。由于我们会经常使用它,因此最好将其移至bin目录并为我们的.bashrc或.zshrc中的该目录做一个别名。

> phpunit和硒
<span>alias sserve="java -jar /usr/local/bin/selenium-server-standalone-<version>.jar"</span>
登录后复制
登录后复制
登录后复制
Phpunit支持Selenium RC和WebDriver,并为此提供两个类。 phpunit_extensions_seleniumtestcase用于RC版本,phpunit_extensions_selenium2testcase用于WebDriver版本。因此,您的测试必须扩展其中一个才能开始。请记住,RC版本正在弃用,因此我们将在下面的示例中使用WebDriver。

设置方法用于准备测试环境。在这种情况下,我们使用它来告诉phpunit我们的硒服务器在哪里运行,我们将使用什么浏览器以及应用程序的URL。 Sethost方法默认为LocalHost,SetPort方法默认为4444,因此可以在此处省略它们。但是,如果您的测试服务器在Windows机器内部,该机器在您从另一台不同的计算机运行测试时都支持Internet Explorer等。

完成测试时调用拆卸方法,用于清除阶段。我们使用它来关闭浏览器并终止当前会话。

>
<span>// tests/acceptance/UserSubscriptionTest.php
</span>
<span>class UserSubscriptionTest extends PHPUnit_Extensions_Selenium2TestCase
</span><span>{
</span>    <span>public function setUp()
</span>    <span>{
</span>        <span>$this->setHost('localhost');
</span>        <span>$this->setPort(4444);
</span>        <span>$this->setBrowserUrl('http://vaprobash.dev');
</span>        <span>$this->setBrowser('firefox');
</span>    <span>}
</span><span>}</span>
登录后复制
登录后复制
登录后复制

数据提供商

Phpunit数据提供商

> PHPUNIT数据提供商允许我们使用特定数据提供测试,而无需迭代其测试。您可以在文档中阅读更多内容。

<span>public function tearDown()
</span><span>{
</span>    <span>$this->stop();
</span><span>}</span>
登录后复制
登录后复制
登录后复制

> InvalidInputSprovider返回有效输入的列表,除一个字段外,我们在验证失败后传递了预期的错误消息。

与DOM Elements合作

>使用网页时的一个常见任务是元素选择。 Phpunit的硒扩展为此提供了非常不错的API。您可以按类名称,标签,名称,ID,CSS选择器,XPath等选择元素。该方法将返回phpunit_extensions_selenium2testcase_element实例,您可以使用该实例来选择其他子元素,属性等。您还可以设置或获得元素值,更新元素CSS和许多其他常见任务。对于我们的页面,我们可能会执行以下操作。

>
<span>composer require --dev phpunit/phpunit
</span><span>composer require --dev phpunit/phpunit-selenium</span>
登录后复制
登录后复制
登录后复制

>此测试将选择用户名输入并设置一个值,然后提交订阅表格。在此之后,我们可以添加一个断言,以查看响应是否如预期。页面将包含一切都很好!如果通过了验证。

<span>alias sserve="java -jar /usr/local/bin/selenium-server-standalone-<version>.jar"</span>
登录后复制
登录后复制
登录后复制

我们的数据提供商包含输入名称和相应的值。我们将创建一个单独的方法来处理填充表单输入并提交。>

<span>// tests/acceptance/UserSubscriptionTest.php
</span>
<span>class UserSubscriptionTest extends PHPUnit_Extensions_Selenium2TestCase
</span><span>{
</span>    <span>public function setUp()
</span>    <span>{
</span>        <span>$this->setHost('localhost');
</span>        <span>$this->setPort(4444);
</span>        <span>$this->setBrowserUrl('http://vaprobash.dev');
</span>        <span>$this->setBrowser('firefox');
</span>    <span>}
</span><span>}</span>
登录后复制
登录后复制
登录后复制
有效表单提交

要将浏览器指向特定页面,我们使用phpunit_extensions_selenium2testcase类中的URL方法。该URL与提供给setBrowserurl方法的url相对。因此,将浏览器指向索引页面后,我们填写并提交表格,然后测试预期的成功消息。

<span>public function tearDown()
</span><span>{
</span>    <span>$this->stop();
</span><span>}</span>
登录后复制
登录后复制
登录后复制
>假设您的硒服务器正在启动并运行,请继续使用Phpunit Tests/Accentance/userubscriptionTest.php进行测试。这将创建一个新的浏览器会话并开始填写表单。我们期望一切都通过一个成功的断言来通过。

>

将硒与phpunit一起使用

一些测试失败,测试持续时间太短了,我们无法观察出什么问题。 PHPUNIT具有使用CurrentsCreenshot方法捕获失败测试的屏幕截图,该方法返回了我们可以保存的斑点图像。

<span>// tests/acceptance/UserSubscriptionTest.php
</span>
<span>class UserSubscriptionTest extends PHPUnit_Extensions_Selenium2TestCase
</span><span>{
</span>    <span>public function validInputsProvider()
</span>    <span>{
</span>        <span>$inputs[] = [
</span>            <span>[
</span>                <span>'username'              => 'younesrafie',
</span>                <span>'password'              => 'mypassword',
</span>                <span>'password_confirmation' => 'mypassword',
</span>                <span>'email'                 => 'mymail@gmail.com',
</span>                <span>'cardHolderName'        => 'RAFIE Younes',
</span>                <span>'cardNumber'            => '378282246310005',
</span>                <span>'billingAddress'        => 'Narjiss B Fez Morocco',
</span>                <span>'cvc'                   => '850',
</span>                <span>'expirationMonth'       => '01',
</span>                <span>'expirationYear'        => '2016',
</span>            <span>]
</span>        <span>];
</span>
        <span>return $inputs;
</span>    <span>}
</span>    
    <span>public static function invalidInputsProvider()
</span>    <span>{
</span>        <span>$inputs[] = [
</span>            <span>[
</span>                <span>'username'              => '@younesrafie',
</span>                <span>'password'              => 'mypassword',
</span>                <span>'password_confirmation' => 'mypassword',
</span>                <span>'email'                 => 'mymail@gmail.com',
</span>                <span>'cardHolderName'        => 'RAFIE Younes',
</span>                <span>'cardNumber'            => '378282246310005',
</span>                <span>'billingAddress'        => 'Narjiss B Fez Morocco',
</span>                <span>'cvc'                   => '850',
</span>                <span>'expirationMonth'       => '01',
</span>                <span>'expirationYear'        => '2016',
</span>            <span>],
</span>            <span>"Username must only contain alpha numeric characters and dashes."
</span>        <span>];
</span>        <span>// ...
</span>        
        <span>return $inputs;
</span>    <span>}
</span><span>}</span>
登录后复制
>无效的表单提交

>无效的表单提交几乎与先前的方法相同。我们填写表单输入并提交。然后,我们验证验证错误消息是否为预期。我们将使用我前面提到的无效的人。

>

<span>class UserSubscriptionTest extends PHPUnit_Extensions_Selenium2TestCase
</span><span>{
</span>    <span>public function testFormSubmissionWithUsername()
</span>    <span>{
</span>        <span>$this->byName('username')->value('younesrafie');
</span>        <span>$this->byId('subscriptionForm')->submit();
</span>    <span>}
</span><span>}</span>
登录后复制
> BYCSSSELECTOR方法允许我们使用CSS选择器从页面检索元素,在这种情况下为错误段落。我们声称使用来自数据提供商方法的错误消息字段的错误消息是否如预期。>

我们的表单仅包含基本交互,例如选择元素,设置值,提交表单等。但是,我们还可以在按钮或链接元素上使用单击方法来验证目标页面是否按预期工作。 >

使用另一个浏览器

>我们使用Firefox浏览器进行测试。但是,我们也可以使用任何其他浏览器。硒使用驱动程序方法,每个浏览器供应商都在提供自己的驱动程序。您可以检查文档中受支持的驱动程序的列表。

>

>要启用Chrome浏览器,您需要下载Chromedriver并在启动Selenium Server时将路径指定为选项。

<span>composer require --dev phpunit/phpunit
</span><span>composer require --dev phpunit/phpunit-selenium</span>
登录后复制
登录后复制
登录后复制
<span>alias sserve="java -jar /usr/local/bin/selenium-server-standalone-<version>.jar"</span>
登录后复制
登录后复制
登录后复制

将硒与phpunit一起使用

文档准备就绪吗?

>

>如果您的页面内容是通过AJAX加载的,并且您不想直接触发页面加载的测试,则需要等到页面加载并存在元素。

<span>// tests/acceptance/UserSubscriptionTest.php
</span>
<span>class UserSubscriptionTest extends PHPUnit_Extensions_Selenium2TestCase
</span><span>{
</span>    <span>public function setUp()
</span>    <span>{
</span>        <span>$this->setHost('localhost');
</span>        <span>$this->setPort(4444);
</span>        <span>$this->setBrowserUrl('http://vaprobash.dev');
</span>        <span>$this->setBrowser('firefox');
</span>    <span>}
</span><span>}</span>
登录后复制
登录后复制
登录后复制
>回调函数将等到我们返回非零值,并在两秒钟后带有错误消息后超时。查找方法将不断寻找元素,但是如果要指定搜索间隔,则可以使用隐构方法。

结论
<span>public function tearDown()
</span><span>{
</span>    <span>$this->stop();
</span><span>}</span>
登录后复制
登录后复制
登录后复制

>本文简要介绍了与phpunit一起接受接受测试的简要介绍。通常,您可以将硒用于需要浏览器自动化的任何东西。如果您有任何评论或疑问,请务必在下面发布它们,我会尽力回答它们。

经常询问有关将硒与phpunit一起使用的问题(常见问题解答)

>如何在php?

中安装phpunit和selenium webdriver,以在PHP中安装PHPUNIT和Selenium Webdriver,您需要使用Composer,Composer是PHP的依赖关系管理工具。首先,如果还没有安装作曲家。然后,在您的终端中运行以下命令以安装phpunit:Composer需要-DEV phpunit/phpunit ^9。对于Selenium WebDriver,请使用命令:Composer需要-DEV php-webdriver/webdriver。这将在您的php项目中同时安装Phpunit和Selenium Webdriver。

>如何使用Selenium运行PHPUNIT测试?

使用Selenium进行Phpunit测试,您需要编写测试案例它使用硒驱动器。在测试案例中,您可以使用WebDriver命令与浏览器进行交互。准备好测试用例后,您可以使用Phpunit命令行工具运行它。只需在终端中导航到您的项目目录并运行命令:phpunit mytest.php,其中“ mytest.php”是您的测试文件的名称。

>

>如何将phpunit中的断言与硒中使用?它们对于确定测试是否通过还是失败至关重要。在使用Selenium的Phpunit测试中,您可以使用断言检查Web元素的状态。例如,您可以断言存在某个元素,可见或包含特定文本。为此,您可以使用phpunit提供的断言方法,例如assertequals,asserttrue或AspertContains。

>

>我如何使用selenium phpunit中的浏览器会话?使用WebDriver的会话方法完成了使用Selenium的Phpunit。当您创建WebDriver的新实例时,将启动一个新的浏览器会话。您可以使用各种方法(例如navigate(),refresh()或close()与此会话进行交互。要结束会话,您可以使用Quit()方法,该方法将关闭所有窗口并结束会话。

如何使用selenium中的phpunit中的ajax请求?在使用硒的phpunit中,可能会很棘手,因为您需要等待ajax调用才能完成,然后才能与更新的元素进行交互。 Selenium WebDriver为此目的提供WebDriverWait类。您可以使用它等待某个条件在继续之前。例如,您可以等待可见或可单击的元素。

>

>如何在不同浏览器上使用Selenium运行phpunit测试?

selenium web Driver支持多个浏览器,包括Chrome,Firefox,Firefox,Firefox,Firefox,Firefox, Safari和Internet Explorer。要在其他浏览器上运行Phpunit测试,您需要为该浏览器创建一个新的WebDriver实例。例如,要使用Firefox,您将创建一个新的FirefoxDriver实例。然后,您可以使用此驱动程序来运行测试。

>如何使用selleenium在phpunit中使用selleenium(sellenium)处理phpunit中的帧和iframe? )WebDriver的方法。此方法使您可以将上下文切换到其他帧或iFrame。与框架内部的元素进行交互后,您可以使用switchto() - > defaultContent()方法切换回主内容。

如何在Phpunit测试中使用Selenium进行屏幕截图?可以使用web驱动器的takeCreensHot()方法在Phpunit测试中使用Selenium进行Selenium进行屏幕截图。此方法为当前窗口进行屏幕截图,并将其返回为PNG格式的字符串。然后,您可以将此字符串保存到文件中以创建屏幕截图。

我如何使用Manage() - > getCookies() - > getCookies()方法在phpunit中处理Phpunit中的cookie?此方法将所有cookie作为数组返回。您还可以使用Manage() - > AddCookie(),Manage() - > deletecookie()和Manage() - > deleteallcookies()方法来操纵cookie。并行的硒

>并行进行硒可以显着加速您的测试套件。这可以使用硒网格来实现,这使您可以同时在多台机器和浏览器上运行测试。要使用Selenium Grid,您需要设置一个轮毂和节点,然后配置WebDriver以连接到集线器。

以上是将硒与phpunit一起使用的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板