oxid-esales / testing-library
OXID eShop 测试库
Requires
- php: ^7.3 || ^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.1.4
- mikey179/vfsstream: ~1.6.8
- oxid-esales/codeception-modules: ^v2.0.0
- oxid-esales/codeception-page-objects: ^v3.0.0
- oxid-esales/developer-tools: ^v2.0.0
- oxid-esales/mink-selenium-driver: ~v1.1.2
- oxid-esales/oxideshop-facts: ^v3.0.0
- oxid-esales/oxideshop-unified-namespace-generator: ^v3.0.0
- pdepend/pdepend: 2.7.0
- phpspec/prophecy-phpunit: ^v2.0.1
- phpunit/php-code-coverage: ^9
- phpunit/phpcov: ^8
- phpunit/phpunit: ^9.1.1
- symfony/dom-crawler: v2.7.*
- symfony/filesystem: ^5.0.4
- symfony/yaml: ^5.0.4
- dev-b-8.0.x
- v9.0.0
- v8.2.0
- v8.1.0
- v8.0.2
- v8.0.1
- v8.0.0
- v7.3.0
- v7.2.0
- v7.1.2
- v7.1.1
- v7.1.0
- v7.0.1
- v7.0.0
- 6.4.x-dev
- v6.0.1
- v6.0.0
- v5.0.8
- v5.0.7
- v5.0.6
- v5.0.5
- v5.0.4
- v5.0.3
- v5.0.2
- v5.0.1
- v5.0.0
- v4.0.2
- v4.0.1
- v4.0.0
- v4.0.0-beta.3
- v4.0.0-beta.2
- v4.0.0-beta.1
- v3.3.2
- v3.3.1
- v3.3.0
- v3.2.0
- v3.1.2
- v3.1.1
- v3.1.0
- v3.0.1
- v3.0.0
- v2.2.3
- v2.2.2
- v2.2.1
- v2.2.0
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.0
- v2.0.0-rc.1
- v2.0-beta.3
- v2.0-beta.1
- v1.1.1
- v1.1.0
- v1.0.7
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- v1.0.0-alpha18
- v1.0.0-alpha17
- v1.0.0-alpha16
- v1.0.0-alpha15
- v1.0.0-alpha14
- v1.0.0-alpha13
- v1.0.0-alpha12
- v1.0.0-alpha11
- v1.0.0-alpha10
- v1.0.0-alpha9
- v1.0.0-alpha8
- v1.0.0-alpha7
- v1.0.0-alpha6
- v1.0.0-alpha5
- v1.0.0-alpha4
- v1.0.0-alpha3
- v1.0.0-alpha2
- v1.0.0-alpha1
- v1.0.0-alpha
- 0.0.1
- dev-b-7.2.x
- dev-b-7.1.x
- dev-b-7.0.x
- dev-test_cache_invalidation
- dev-b-6.5.x
- dev-7.0.x-remove-testing-library-OXDEV-5164
- dev-b-7.0.x-do_not_store_module_data_in_db-OXDEV-5530
- dev-b-7.0.x-remove-tl-from-cc-OXDEV-5164
- dev-b-6.5.x_phpunit9
- dev-b-6.4.x_phpunit9
- dev-b-6.5-OXDEV-5164-remove-tl-from-cc-tests
- dev-b-6.4.x
- dev-b-6.3.x
- dev-b-7.0-remove_testing_library
- dev-b-6.3.x-fix-search-sorting-test
- dev-master-unstable-tests-debug
- dev-master-update_to_php8-OXDEV-4533
- dev-b-6.2.x
- dev-b-6.3.x-phpcov
- dev-b-6.2.x-extract-traditional-tests
- dev-master-extract-traditional-tests
- dev-extract_traditional_tests
- dev-b-6.2.x-make_module_services_available-OXDEV-4140
- dev-b-6.2.x-update_composer-OXDEV-4107
- dev-update-vfsstream
- dev-master-library-without-developer-tools
- dev-b-6.2.x-downgrade-polyfill-intl-idn
- dev-6.2.x-test-codeception-version
- dev-master-use-diff-cc-version
- dev-b-6.2.x-test-specific-cc-branch
- dev-b-6.1.x
- dev-b-6.2.x-codeception_master
- dev-b-6.x-improve_errors_checking
- dev-b-6.x_bak
- dev-temp_b2b_versions_new_buyer
- dev-b-6.x-display_all_issues-OXDEV-2371
- dev-b-6.x-temporary-codeception-versions
- dev-b-6.1.x-codeception
- dev-b-4.0.x-codeception
- dev-b-6.x_nginx_compatibility_OXDEV-2280
- dev-b-6.x-fix_php72-OXDEV-1821
- dev-b2b-compatible-branch
- dev-b-6.x_investigate-OXDEV-2040
- dev-b-6.x-detect_replication
- dev-dev-b-6.x_extract_rp-OXDEV-2040
- dev-REBASED_b-6.x_extract_rp-OXDEV-1387
- dev-master_rp_final-OXDEV-1387
- dev-master_rp-OXDEV-1387
- dev-php7_master-OXDEV-1387
- dev-OXDEV-1501_Update_DI_Container-II
- dev-OXDEV-1501_Update_DI_Container
- dev-OXDEV-1393_separating_acceptance_tests
- dev-OXDEV-1359-Update_php_unit
- dev-OXDEV-1309_Update_DI_container
This package is auto-updated.
Last update: 2024-08-27 14:47:33 UTC
README
警告!测试库已弃用。请使用本地的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
可访问。
安装测试库
选择好安装测试库的位置后,请按照以下步骤操作
- 导航到您选择的安装目录。
- 使用composer设置测试库组件(
composer install
)。请确保您在包含composer.json
的目录内执行此操作。在设置过程中,您将需要回答有关测试库配置的几个问题。这些选项将在以下部分中更详细地解释:参数解释
运行测试
首先,确保您有一个可工作的商店,这意味着
- 商店已安装/配置(
config.inc.php
已填写数据库连接详情等) - 商店可以通过URL访问(用于商店安装)。
一旦测试库准备就绪,就可以使用多个测试运行器。这些在bin
或vendor/bin
目录中可用
runtests
- 运行商店/模块单元和集成测试。runtests-selenium
- 运行商店/模块Selenium测试。runmetrics
- 对商店/模块执行代码度量测试。
此外,您还可以向这些脚本传递参数。 runmetrics
使用 pdepend
,而所有 runtests
都使用 phpunit
。您可以将 phpunit
参数添加到 runtests
和 runtests-selenium
中。您可以将 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
向这些工具添加参数时需要注意的一点 - 总是在末尾提供文件/文件夹,因为它将不再自动选择。使用 AllTestsUnit 或 AllTestsSelenium 分别运行所有测试。
使用 PHPStorm 运行
为了使用 PHPStorm 运行测试,您需要设置到 bootstrap 和配置文件的路径。
- 打开 PHPStorm。
- 打开运行/调试配置窗口。
- 按下 "Use alternative configuration file" 输入后的配置图标(扳手)。
- 将弹出一个新的 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_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()
。使用此方法,您可以插入新文章或修改配置变量。有关详细使用示例,请参阅 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
中找到。
更改数据库恢复机制
目前有两个数据库恢复类可用 - 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
调用的
测试库分支名称
测试库分支名称遵循 OXID eShop 组件分支名称。这意味着分支名称不遵循测试库版本号,而是表示 OXID eShop 编译的目标版本。例如
测试运行工作流程
图形化工作流程可以在 workflow.puml 文件中找到。此文件可以使用名为 PlantUml 的工具打开。(http://plantuml.com/)