reach-digital / magento2-test-framework
Requires
- magento/framework: ~100.1.0||~101.0.0||~102.0.0||~103.0.0
This package is auto-updated.
Last update: 2024-09-19 14:43:39 UTC
README
- 当缓存初始化后,启动集成测试框架的时间少于300ms。
- 添加自动安装TestModules的能力。
安装
composer require --dev reach-digital/magento2-test-framework
使用
安装包后,将有一个名为 dev/tests/quick-integration
的文件夹,其中包含新的集成测试框架。将 phpunit.xml.dist
复制到 phpunit.xml
并根据需要修改以包含您自己的命名空间。
测试执行
为了获得最快的结果,可以像这样使用纯 phpunit
执行快速集成
# Running Quick integration tests via phpunit cd dev/tests/integration php ../../../vendor/bin/phpunit -c ../quick-integration/phpunit.xml
更方便但较慢的执行可以通过 bin/magento
本身来完成。请确保,您添加了 -c
选项以应用正确的配置。
# Running Quick integration tests via bin/magento php bin/magento dev:tests:run integration -c $(pwd)/dev/tests/quick-integration/phpunit.xml
TestModule
自动安装以下路径中可用的测试模块: vendor/*/*/TestModule/*/*
,例如 vendor/reach-digital/magento2-order-source-reservations/TestModule/Magento/TestModuleInventoryStateCache
。
目标
- 集成测试框架的启动时间低于300ms。
- 对少量测试没有功能回归。
- 显示有用的消息以加快您的测试速度
非目标
- 成为完整的集成测试套件的完整替代品,只支持您在本地上测试的小套件即可。
动机
Magento 2的集成测试在启动时非常慢,这使得练习TDD变得痛苦。没有人愿意等待超过10秒来启动测试。
速度很重要,但Magento开发人员已经习惯了东西慢。
- 0到100ms:在这么短的时间内响应用户操作,用户会感觉到结果是立即的。任何更长的时间,动作和反应之间的联系就会断裂。
- 100到300ms:用户会感觉到轻微的可感知延迟。
- 300到1000ms:在这个窗口内,事情感觉像是自然和连续的任务进度的一部分。对于大多数网络用户来说,加载页面或更改视图代表一项任务。
- 1000ms或更多:超过1000毫秒(1秒),用户会失去对正在执行的任务的注意力。
- 10000ms或更多:超过10000毫秒(10秒),用户会感到沮丧,很可能会放弃任务。他们可能会也可能不会稍后回来。
https://developers.google.com/web/fundamentals/performance/rail
目前集成测试运行超过10000ms并不罕见:“开发人员感到沮丧,很可能会放弃测试。他们可能会也可能不会稍后再次尝试TDD。”
从另一个角度来看:加载管理页面的速度比在测试中点击播放按钮要快。这不应该是这样的。
因为: 如果Magento能够在200ms内渲染完整的HTML页面,那么测试也应该能够至少以同样的速度启动吗?
性能改进
所以,想法可能是,Magento在启动时可能会清理大量的缓存,运行额外的测试等。如果我们能防止清理缓存、状态等,我们可以实现更高的性能,甚至可能超过前端。
尽管有一个“干净画布”的想法可能是个好主意,但这本身可能也不是一个非常好的主意。代码应该是弹性的,并且应该能够在预热缓存和冷缓存的情况下运行。
1. 禁用内存清理脚本
速度提升;约10-20秒
通过禁用以下类,我们可以获得最大的速度提升。
<?php declare(strict_types=1); \Magento\TestFramework\Workaround\Cleanup\TestCaseProperties::class; \Magento\TestFramework\Workaround\Cleanup\StaticProperties::class;
2. 修复过度热情的应用重新初始化
速度提升;约50毫秒
<?php declare(strict_types=1); //Rewrites Magento's AppIsolation class \ReachDigital\TestFramework\Annotation\AppIsolation::class;
3. 默认禁用config-global.php
速度提升;约280毫秒
config-global.php.dist会始终设置一些配置值,但这需要配置的重新初始化。通过不使用此功能,我们可以在请求中再节省300毫秒。
4. 禁用序列表生成
速度提升;约400毫秒
默认情况下,Magento会创建所有序列表。
生活质量提升
1. 将生成文件夹移回根目录
通常,IDE不喜欢存在重复类,因此出于这个原因,应该忽略dev/test/integration/tmp/sandbox-*
目录。通过将生成的文件夹移到项目的根目录,我们可以获得IDE可以检查这些类的优势。
2. 在运行测试时禁用模块,复制app/etc/config.php
在此处提出的问题