o3-shop/testing-library

OXID eShop 测试库

This package is auto-updated.

Last update: 2024-09-30 01:41:17 UTC


README

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

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

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

要求

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

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

安装

测试库设置使用 Composer 获取所需包,因此请确保已安装 Composer 并可访问。您可以在这里找到 Composer 安装指南。

选择安装测试库的位置

测试库可以直接安装在商店内或任何其他目录。但是,安装方式会根据选择的位置略有不同。我们建议使用商店目录进行安装。

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

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

{
    "name": "o3-shop/eshop",
    "description": "O3-Shop",
    "type": "project",
    "keywords": ["o3-shop", "modules", "eShop"],
    "homepage": "https://www.o3-shop.com/"
    "license": [
        "GPL-3.0",
        "proprietary"
    ],
    "require-dev": {
        "o3-shop/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/o3-shop/testing-library/test_config.yml.dist",
            "parameter-key": "mandatory_parameters",
            "env-map": {
                "shop_path": "SHOP_PATH",
                "shop_tests_path": "SHOP_TESTS_PATH",
                "partial_module_paths": "PARTIAL_MODULE_PATHS"
            }
        }
    }
}

以这种方式安装,二进制文件将通过 shop_source_path/vendor/bin 可用。最新开发版商店版本已在源代码中包含 composer.json 文件,因此无需进行更改。

选项 2:选择任何目录进行安装(替代方式)

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

安装测试库

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

  1. 导航到您选择的安装目录。
  2. 使用 Composer 设置测试库组件(composer install)。请确保您在 composer.json 所在的目录中执行此操作。在设置过程中,您将需要回答有关测试库配置的多个问题。这些选项将在以下链接中详细说明: 参数说明

运行测试

首先和最重要的是 - 确保您有一个正常工作的商店,这意味着

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

一旦准备就绪,测试库提供几个可用的测试运行器。这些位于 binvendor/bin 目录中

  • runtests - 运行商店/模块单元和集成测试。
  • runtests-selenium - 运行商店/模块 Selenium 测试。
  • runtests-coverage - 运行带代码覆盖的商店/模块测试。
  • runmetrics - 执行商店/模块的代码指标测试。

此外,您还可以向这些脚本传递参数。 runmetrics 使用 pdepend,而所有 runtests 都使用 phpunit。您可以将 phpunit 参数添加到 runtestsruntests-seleniumruntests-coverage。您可以将 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
  4. 运行所有 Codeception 测试 - bin/runtests-codeception
  5. 从主(商店)套件运行特定的 Codeception 测试 - bin/runtests-codeception-shop GiftRegistryCest::addProductToUserGiftRegistry

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

使用 PHPStorm 运行

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

  1. 打开 PHPStorm。
  2. 打开运行/调试配置窗口。
  3. 在“使用替代配置文件”输入框右边的配置图标(扳手)上按一下。
  4. 会弹出一个新的 PHPUnit 窗口。勾选“默认 bootstrap 文件”复选框并选择 bootstrap 的路径。bootstrap 的路径:{source}/vendor/o3-shop/testing-library/bootstrap.php

配置

配置文件名为 test_config.yml,位于此库或商店(使用 shop 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()。使用此方法,您可以例如插入新的文章或修改配置变量。有关详细使用示例,请参阅 O3-Shop 验收测试。

方法使用

测试库提供的方法可以更容易地编写测试。以下描述了某些方法的用法

激活主题

// 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@o3-shop.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 调用的 OxidEsales\TestingLibrary\Services

测试库分支名称

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

测试运行工作流程

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