mehdi-fathi / sicilian-test-orchestra

该软件包最新版本(1.0.0)的许可证信息不可用。

一个高效的Composer软件包,通过发送请求来测试所有路由,以确保所有功能正常。

1.0.0 2024-03-25 10:21 UTC

This package is auto-updated.

Last update: 2024-09-25 11:39:03 UTC


README

Sicilian Test Orchestra 是一个为RESTful应用程序设计的自动化测试软件包。它通过生成的假数据测试所有路由,以确保Laravel应用程序的全面覆盖和健壮性。

Run tests

alt text

一种新的测试方法,可以更接近地模拟用户行为。我们测试后从不截断数据库。如今,我们必须考虑任何场景,并在数据库中为任何场景提供模拟数据。总体而言,有时我们无法考虑所有场景。

即使我们考虑了所有场景,我们的代码每天都在变化。我们必须更新我们的测试,无论是更新模拟数据还是工厂数据。我认为,尽管我们考虑了所有用户行为并运行了所有测试,我们仍然会遇到一些可报告和不可预测的错误。此外,在旧方法中,每次测试都会在一个封装的空间中运行。

这意味着其他测试永远不会影响其他测试的进程。而在现实世界中,每个操作都有可能影响其他操作。为此,我们需要提供数据需求,在旧方法中。

主要区别在于,这个软件包不应该断言状态或响应。这个软件包只是发送请求,并将响应和状态以及其他信息展示给你。当你在特定场景中出现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

alt text

关于 Sicilian Test Orchestra 的详细介绍

由于这个包真的很年轻,我希望逐渐培养它。正如我提到的,这个包可能会用于测试 Laravel 应用程序。该项目最近在 1.0 版本中发布。激励我开发的是阅读您的想法和观点。所以,我不仅想了解您对功能测试中那个差距的看法,还想听听您对 Sicilian Test Orchestra 的看法。这个包显然还有很长的路要走。我希望您能自由地提出您的想法,所以请在我的 GitHub 上提出问题。

贡献

我们欢迎为 Sicilian Test Orchestra 包做出贡献。请阅读我们的 CONTRIBUTING.md,以了解我们的行为准则和提交拉取请求的过程。

许可证

本项目采用 MIT 许可证 - 有关详细信息,请参阅 LICENSE.md 文件。