mehdi-fathi / sicilian-test-orchestra
一个高效的Composer软件包,通过发送请求来测试所有路由,以确保所有功能正常。
Requires
- orchestra/testbench: 5.*|^6.0|^6.6.0|^7.0.0|^8.0.0|v9.0.0
- phpunit/phpunit: 8.3|8.5|9.3|^9.5|10.5.5
Requires (Dev)
- laravel/laravel: ~8.0|~9.0|~10.0|~11.0
- orchestra/testbench: 5.*|^6.0|^6.6.0|^7.0.0|^8.0.0|v9.0.0
- phpunit/phpunit: 8.3|8.5|9.3|^9.5|10.5.5
This package is auto-updated.
Last update: 2024-09-25 11:39:03 UTC
README
Sicilian Test Orchestra 是一个为RESTful应用程序设计的自动化测试软件包。它通过生成的假数据测试所有路由,以确保Laravel应用程序的全面覆盖和健壮性。
一种新的测试方法,可以更接近地模拟用户行为。我们测试后从不截断数据库。如今,我们必须考虑任何场景,并在数据库中为任何场景提供模拟数据。总体而言,有时我们无法考虑所有场景。
即使我们考虑了所有场景,我们的代码每天都在变化。我们必须更新我们的测试,无论是更新模拟数据还是工厂数据。我认为,尽管我们考虑了所有用户行为并运行了所有测试,我们仍然会遇到一些可报告和不可预测的错误。此外,在旧方法中,每次测试都会在一个封装的空间中运行。
这意味着其他测试永远不会影响其他测试的进程。而在现实世界中,每个操作都有可能影响其他操作。为此,我们需要提供数据需求,在旧方法中。
主要区别在于,这个软件包不应该断言状态或响应。这个软件包只是发送请求,并将响应和状态以及其他信息展示给你。当你在特定场景中出现500错误时,你能够检测到问题所在。有时,在特定场景中,端点中会有数据泄露。因此,你可以检查响应或状态,以确保一切正常。
主要目标
实现现实测试
用户发送数百次请求会导致一些可能完全隐藏的具体条件。例如,当用户访问10个不同的帖子,每个帖子至少有5个赞时,他们应该获得一个新的徽章。好的,你可以用旧方法为此目的进行测试,但用户已经有限制怎么办?你考虑过吗?好的,你可以为此进行测试,但如果用户不喜欢帖子呢?他们是否应该保留徽章?你看,会有很多复杂的条件导致400错误或错误的输出。我们的目标是提供一种新的方法来全面测试所有方面。
了解其他动作的影响
由于你已经以隔离的方法运行了所有测试,如果某个动作会对其他动作产生严重影响,会怎么样?例如,一个用户第一次发表评论,然后以软删除的方式删除它。然后,用户点击显示评论数的个人资料菜单,但我们得到了500错误。那么,我们能否在测试中考虑这一点?假设我们详细考虑了所有可能的场景。如果我们更改了模型中的某些内容呢?我们需要更新并再次检查所有测试。这是一个耗时的方法。
详细报告
所有场景都已保存在数据库中,包括请求、响应等。此外,你可以重新运行特定的场景。
保持数据库中的数据
我们保留数据在数据库中,因为我们相信这对于调试或检查保存或更新方式是有用的。
功能
- Faker数据集成:使用Faker创建真实且多样化的测试数据。
- 支持HTTP方法:测试不同HTTP方法的路由(GET、POST、PUT、DELETE等)。
- 错误处理测试:包括对错误场景和边缘情况的测试。
- 详细报告:提供全面的报告和日志,以便更容易地进行调试。
- 性能优化:设计用于在测试期间最小化性能影响。
需求
- PHP 8.x 或更高版本
- Laravel >= 8.x
``
安装
1- 在您的项目目录中运行以下命令,将 Sicilian Test Orchestra 添加为依赖项
$ composer require mehdi-fathi/sicilian-test-orchestra
2- 将 SicilianTestOrchestra\SicilianTestOrchestraServiceProvider::class
添加到 app.php 的 provider 中
'providers' => [ /* * Package Service Providers... */ SicilianTestOrchestra\SicilianTestOrchestraServiceProvider::class ]
3- 运行此命令以创建迁移报告_tests 表。
php artisan vendor:publish --tag=migrations
3- 在功能测试中使用特质 RequestStrategyTestable
,例如这样
namespace Tests\Feature; use SicilianTestOrchestra\RequestStrategyTestable; use Tests\TestCase; class ExampleTest extends TestCase { use RequestStrategyTestable; protected array $testOrchestraRequests = [ 'user_login' => ['auth'], //auth,quest 'shuffle_next' => true, 'next' => [ [ 'route' => 'save', 'method' => 'post', 'data' => [ // 'name' => ['string', 'min:1', 'max:4'], 'body' => ['string', 'min:1', 'max:4'], // 'email' => ['email', 'min:1', 'max:40'], // 'from_date' => ['date'], // 'age' => ['numeric', 'min:1', 'max:8'], // 'has_job' => ['boolean'], // 'favorite_colors' => ['array'], ], 'call' => 1, 'call_shuffle' => 5, ], [ 'route' => 'update', 'method' => 'put', 'data' => [ 'body' => ['string', 'min:1', 'max:4'], ], 'param' => [ 'id' => ['numeric', 'min:1', 'max:1'] ], 'call' => 1, 'call_shuffle' => 2, ], [ 'route' => 'list', 'method' => 'get', 'data' => [], 'call' => 1, 'call_shuffle' => 2, ], [ 'route' => 'list', 'method' => 'get', 'data' => [], 'call' => 1, 'call_shuffle' => 2, ], [ 'route' => 'show', 'method' => 'get', 'data' => [ 'id' => ['numeric', 'min:1', 'max:1'] ], 'call' => 1, 'call_shuffle' => 2, ], [ 'route' => 'destroy', 'method' => 'get', 'data' => [ 'id' => ['numeric', 'min:1', 'max:1'] ], 'call' => 1, 'call_shuffle' => 2, ], [ 'route' => 'show', 'method' => 'get', 'data' => [ 'id' => ['numeric', 'min:1', 'max:1'] ], 'call' => 1, 'call_shuffle' => 2, ], ] ];
4- 运行测试
php artisan test
关于 Sicilian Test Orchestra 的详细介绍
由于这个包真的很年轻,我希望逐渐培养它。正如我提到的,这个包可能会用于测试 Laravel 应用程序。该项目最近在 1.0 版本中发布。激励我开发的是阅读您的想法和观点。所以,我不仅想了解您对功能测试中那个差距的看法,还想听听您对 Sicilian Test Orchestra 的看法。这个包显然还有很长的路要走。我希望您能自由地提出您的想法,所以请在我的 GitHub 上提出问题。
贡献
我们欢迎为 Sicilian Test Orchestra 包做出贡献。请阅读我们的 CONTRIBUTING.md,以了解我们的行为准则和提交拉取请求的过程。
许可证
本项目采用 MIT 许可证 - 有关详细信息,请参阅 LICENSE.md 文件。