o3-shop / testing-library
OXID eShop 测试库
Requires
- php: ^7.4 || ^8.0
- behat/mink: ~1.5.0
- codeception/codeception: ^4
- codeception/module-asserts: ^1.3
- codeception/module-db: ^1.0
- codeception/module-filesystem: ^1.0
- codeception/module-webdriver: ^1.1
- incenteev/composer-parameter-handler: ~2.0
- mikey179/vfsstream: ~1.6.8
- o3-shop/codeception-modules: ^1.0.0
- o3-shop/codeception-page-objects: ^v1.0.0
- o3-shop/developer-tools: ^1.0.0
- o3-shop/mink-selenium-driver: ~v1.0.0
- o3-shop/shop-ce: ^1.2 || dev-dev-b-1.x
- o3-shop/shop-facts: ^1.0.0
- o3-shop/shop-unified-namespace-generator: ^1.0.0
- pdepend/pdepend: 2.6.0
- phpunit/php-code-coverage: ^7.0.12
- phpunit/phpunit: ^8.5.14
- symfony/dom-crawler: v2.7.*
- symfony/filesystem: ^4.4.17
- symfony/polyfill-intl-idn: 1.17.1
- symfony/yaml: ~3.0
Replaces
- oxid-esales/testing-library: 8.1.0
This package is auto-updated.
Last update: 2024-09-30 01:41:17 UTC
README
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
可用。
安装测试库
在您选择了安装测试库的位置后,请按照以下步骤操作
- 导航到您选择的安装目录。
- 使用 Composer 设置测试库组件(
composer install
)。请确保您在composer.json
所在的目录中执行此操作。在设置过程中,您将需要回答有关测试库配置的多个问题。这些选项将在以下链接中详细说明: 参数说明
运行测试
首先和最重要的是 - 确保您有一个正常工作的商店,这意味着
- 商店已安装/配置(
config.inc.php
已填充数据库连接详情等) - 可以通过 URL 访问商店(用于商店安装)。
一旦准备就绪,测试库提供几个可用的测试运行器。这些位于 bin
或 vendor/bin
目录中
runtests
- 运行商店/模块单元和集成测试。runtests-selenium
- 运行商店/模块 Selenium 测试。runtests-coverage
- 运行带代码覆盖的商店/模块测试。runmetrics
- 执行商店/模块的代码指标测试。
此外,您还可以向这些脚本传递参数。 runmetrics
使用 pdepend
,而所有 runtests
都使用 phpunit
。您可以将 phpunit
参数添加到 runtests
、runtests-selenium
和 runtests-coverage
。您可以将 pdepend
参数添加到 runmetrics
。要查看可以向测试运行器传递哪些附加选项,请在命令中添加 --help
选项(例如,./runtests --help
、./runmetrics --help
)。这将显示所需工具的可用选项。
一些使用示例
- 仅运行单个文件测试 -
bin/runtests path/to/test/fileTest.php
- 仅从指定文件运行特定模式的匹配测试 -
bin/runtests --filter match_pattern path/to/test/fileTest.php
- 运行一个或多个测试套件 -
TEST_DIRS=unit,integration bin/runtests
- 运行所有 Codeception 测试 -
bin/runtests-codeception
- 从主(商店)套件运行特定的 Codeception 测试 -
bin/runtests-codeception-shop GiftRegistryCest::addProductToUserGiftRegistry
向这些工具添加参数时要注意的一件事 - 总是在最后提供文件/文件夹,因为它将不再自动选择。分别使用 AllTestsUnit 或 AllTestsSelenium 运行所有测试。
使用 PHPStorm 运行
为了使用 PHPStorm 运行测试,您需要设置到 bootstrap 的路径。
- 打开 PHPStorm。
- 打开运行/调试配置窗口。
- 在“使用替代配置文件”输入框右边的配置图标(扳手)上按一下。
- 会弹出一个新的 PHPUnit 窗口。勾选“默认 bootstrap 文件”复选框并选择 bootstrap 的路径。bootstrap 的路径:{source}/vendor/o3-shop/testing-library/bootstrap.php
配置
配置文件名为 test_config.yml
,位于此库或商店(使用 shop composer.json 安装时)的根目录中。在设置过程中,您将需要回答有关测试库和商店/模块安装的几个问题。设置后,将创建 test_config.yml
,以后如果需要更改某些配置值,可以对其进行编辑。
所有参数都可以通过环境变量设置。环境参数名称与配置文件中的名称相同,但应全部为大写:shop_path => SHOP_PATH、browser_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/unit
和 tests/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.sql
、demodata_PE_CE.sql
或 demodata_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
中找到。
更改数据库恢复机制
目前有两个数据库恢复类可用 - DatabaseRestorer
和 LocalDatabaseRestorer
。这两个类都会截断更改的表,并将所有信息重新添加回去。如果提供的解决方案不符合您的需求,可以通过实现 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/)。