oxid-esales/testing-library

OXID eShop 测试库

This package is auto-updated.

Last update: 2024-08-27 14:47:33 UTC


README

https://img.shields.io/packagist/v/oxid-esales/testing-library.svg?maxAge=3600

警告!测试库已弃用。请使用本地的PHPUnit进行测试。

OXID eShop 测试库可用于使用现有的或新的单元、集成、Mink或QUnit测试测试OXID eShop。此外,它对为OXID eShop创建模块的开发者非常有帮助。

该库旨在帮助开发者轻松检查他们的商店/模块代码。它包含执行单元测试、Selenium测试、度量所需的所有工具和依赖项。

需求

  • 最新Composer版本
  • PHP cURL 扩展
  • 不兼容Windows(请使用虚拟机代替)

该库可用于测试早期商店版本的模块,但将无法运行商店测试。

安装

测试库设置使用composer获取所需的包,因此请确保已安装并可用composer。您可以在此处找到composer安装指南。

选择安装测试库的位置

测试库可以直接安装在商店内或任何其他目录。然而,安装方式略有不同,具体取决于所选位置。我们建议使用商店目录安装。

选项1:选择安装目录(推荐方式)

要在商店目录中安装测试库,请更新/创建composer.json并包含以下值

{
    "name": "oxid-esales/eshop",
    "description": "OXID eShop",
    "type": "project",
    "keywords": ["oxid", "modules", "eShop"],
    "homepage": "https://www.oxid-esales.com/en/home.html",
    "license": [
        "GPL-3.0",
        "proprietary"
    ],
    "require-dev": {
        "oxid-esales/testing-library": "dev-master",
        "incenteev/composer-parameter-handler": "~2.0"
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
    "scripts": {
        "post-install-cmd": [
            "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters"
        ],
        "post-update-cmd": [
            "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters"
        ]
    },
    "extra": {
        "incenteev-parameters": {
            "file": "test_config.yml",
            "dist-file": "vendor/oxid-esales/testing-library/test_config.yml.dist",
            "parameter-key": "mandatory_parameters",
            "env-map": {
                "shop_path": "SHOP_PATH",
                "shop_tests_path": "SHOP_TESTS_PATH",
                "module_ids": "MODULE_IDS"
            }
        }
    }
}

以这种方式安装,二进制文件将从shop_source_path/vendor/bin可访问。最新的开发商店版本已在其源代码中包含composer.json文件,因此不需要进行任何更改。

选项2:选择安装目录(备选方式)

要将测试库安装到任何目录,您需要从Github检出测试库到所需的目录(git clone https://github.com/OXID-eSales/testing_library)。以这种方式安装,二进制文件将从testing_library/bin可访问。

安装测试库

选择好安装测试库的位置后,请按照以下步骤操作

  1. 导航到您选择的安装目录。
  2. 使用composer设置测试库组件(composer install)。请确保您在包含composer.json的目录内执行此操作。在设置过程中,您将需要回答有关测试库配置的几个问题。这些选项将在以下部分中更详细地解释:参数解释

运行测试

首先,确保您有一个可工作的商店,这意味着

  1. 商店已安装/配置(config.inc.php已填写数据库连接详情等)
  2. 商店可以通过URL访问(用于商店安装)。

一旦测试库准备就绪,就可以使用多个测试运行器。这些在binvendor/bin目录中可用

  • runtests - 运行商店/模块单元和集成测试。
  • runtests-selenium - 运行商店/模块Selenium测试。
  • runmetrics - 对商店/模块执行代码度量测试。

此外,您还可以向这些脚本传递参数。 runmetrics 使用 pdepend,而所有 runtests 都使用 phpunit。您可以将 phpunit 参数添加到 runtestsruntests-selenium 中。您可以将 pdepend 参数添加到 runmetrics 中。要查看可以向测试运行器传递哪些其他选项,请将 --help 选项添加到命令中(例如,./runtests --help./runmetrics --help)。这将显示所需工具的可用选项。

一些使用示例

  1. 仅运行单个文件测试 - bin/runtests path/to/test/fileTest.php
  2. 仅从指定文件运行特定模式的匹配测试 - bin/runtests --filter match_pattern path/to/test/fileTest.php
  3. 运行一个或多个测试套件 - TEST_DIRS=unit,integration bin/runtests

向这些工具添加参数时需要注意的一点 - 总是在末尾提供文件/文件夹,因为它将不再自动选择。使用 AllTestsUnit 或 AllTestsSelenium 分别运行所有测试。

使用 PHPStorm 运行

为了使用 PHPStorm 运行测试,您需要设置到 bootstrap 和配置文件的路径。

  1. 打开 PHPStorm。
  2. 打开运行/调试配置窗口。
  3. 按下 "Use alternative configuration file" 输入后的配置图标(扳手)。
  4. 将弹出一个新的 PHPUnit 窗口。勾选 "Default bootstrap file" 和 "Default configuration file" 复选框,并选择到 bootstrap 和配置文件的路径。bootstrap 的路径:{source}/vendor/oxid-esales/testing-library/bootstrap.php 配置文件的路径:{source}/vendor/oxid-esales/testing-library/phpunit.xml

配置

配置文件名为 test_config.yml,位于此库或商店的根目录中(当使用商店 composer.json 安装时)。在设置过程中,您将被问及有关测试库和商店/模块安装的几个问题。设置后,将创建 test_config.yml,之后可以根据需要更改一些配置值。

所有参数都可以使用环境变量设置。环境参数名称与配置文件中的名称相同,但应全部大写:shop_path => SHOP_PATHbrowser_name => BROWSER_NAME 等。

配置参数

必填参数

这些参数对于测试库正常工作是必需的。

可选参数

这些参数不是必需的,但它们在测试时提供额外的功能和选项。

更改 PHPUnit 参数

要更改 PHPUnit 参数,请将 phpunit.xml 文件添加到测试目录中,它将被使用。

使用 additional.inc.php 在单元测试运行前执行

测试库提供了在单元测试运行前执行一些操作的可能性。因此,如果需要这样做,请将 additional.inc.php 文件添加到测试目录中,它将被执行。

注意

使用 addTestData() 方法和 testSql 目录来更改接受测试的环境。有关更多信息,请参阅编写接受测试部分。

编写测试

目录结构

模块测试应放置在模块根目录中:path/to/shop/modules/my_module/tests。测试可以放置在三个目录中:unit、integration 和 acceptance,具体取决于测试类型。./runtests 从 unit 和 integration 目录收集测试,而 ./runtests-selenium 从 acceptance 收集。代码覆盖率是从单元测试和集成测试中计算的。

编写单元测试和集成测试

单元测试和集成测试应该放在 tests/unittests/integration 目录下。可以在内部创建任意数量的子目录,所有测试都将被收集。单元测试和集成测试应扩展 OxidEsales\TestingLibrary\UnitTestCase 类,以便数据库、注册表、配置参数恢复和模块激活能够正常工作。如果单元测试不依赖于数据库或注册表,并且是真正的纯净单元测试,则可以扩展 PHPUnit\Framework\TestCase 类,但请注意,模块类的自动加载和正确的商店类扩展将不会工作。所有准备工作都可以在 additional.inc.php 文件中完成。此文件在创建数据库转储之前和运行任何测试之前都会被加载,因此可以用于自动加载器的注册、demodata 准备等。对于单元测试,商店安装时不添加默认 demodata。

方法使用

如果启用子商店,则运行单元测试和集成测试

public function testCase_forSubShops()
{
    $this->markTestSkippedIfSubShop();
    ...
}

public function testCase_forNoSubShops()
{
    $this->markTestSkippedIfNoSubShop();
    ...
}

其他方法可以在类 OxidEsales\TestingLibrary\UnitTestCase 中找到。

编写验收测试

目前,对于验收测试,使用 Mink 库和 selenium 驱动程序。

注意

使用 2.47.1 版本的 selenium-server-standalone-jar 进行测试。旧版本可能会有一些问题 问题 #13

验收测试应放在 tests/acceptance 目录下,并扩展 OxidEsales\TestingLibrary\AcceptanceTestCase

默认情况下将激活测试的模块。通过扩展 AcceptanceTestCase::addTestData() 方法并手动激活模块,也可能添加一些数据。此方法将在每个测试之前和创建数据库转储之前运行一次,针对测试套件。

对于验收测试,商店安装时包含默认 demodata。可以通过在 testSql 目录下添加名为 demodata_EE.sqldemodata_PE_CE.sqldemodata_EE_mall.sql(当在测试_config 中启用子商店功能时)的 demodata 来添加额外的 demodata。这些文件将根据商店版本在数据库顶部加载。任何需要的附加文件都可以放在 testData 目录下 - 在运行测试之前,所有内容都将复制到商店源。

准备商店的一个有用方法是 AcceptanceTestCase::callShopSC()。使用此方法,您可以插入新文章或修改配置变量。有关详细使用示例,请参阅 OXID eShop 验收测试。

方法使用

测试库提供了一些方法,可以使编写测试更容易。下面描述了一些方法的用法

激活主题

// This will activate azure theme.
$this->activateTheme('azure');

将文章添加到购物车

// This will add article with ID 1001 to basket.
$this->addToBasket("1001");

更新购物车中的商品数量: (注意,商品必须已添加到购物车中才能更改它)

// This will update article with ID 1001 in basket to have 2 items.
$this->changeBasket("1001", 2);
// This will remove an item from basket.
$this->changeBasket("1001", 0);

在前端登录用户

$this->loginInFrontend("example_test@oxid-esales.dev", "useruser");

其他方法可以在类 OxidEsales\TestingLibrary\AcceptanceTestCase 中找到。

更改数据库恢复机制

目前有两个数据库恢复类可用 - DatabaseRestorerLocalDatabaseRestorer。这两个都正在截断更改的表,并重新添加所有信息。如果提供的解决方案不符合您的需求,可以通过实现 OxidEsales\TestingLibrary\DatabaseRestorer\DatabaseRestorerInterface 接口并注册新类在 test_config.yml::database_restoration_class 中进行更改。

库 API

  • test_config.yml 参数
  • OxidEsales\TestingLibrary\AcceptanceTestCase
  • OxidEsales\TestingLibrary\UnitTestCase
  • \OxidEsales\TestingLibrary\ServiceCaller
  • 通过 \OxidEsales\TestingLibrary\ServiceCaller 调用的

测试库分支名称

测试库分支名称遵循 OXID eShop 组件分支名称。这意味着分支名称不遵循测试库版本号,而是表示 OXID eShop 编译的目标版本。例如

测试运行工作流程

图形化工作流程可以在 workflow.puml 文件中找到。此文件可以使用名为 PlantUml 的工具打开。(http://plantuml.com/