simonvomeyser / laravel-automatic-tests
这是我创建的laravel-automatic-tests包
Requires
- php: ^7.2|^8.0
- spatie/laravel-package-tools: ^1.0.0
- symfony/dom-crawler: ^5.0|^6.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^6.0
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: 6.0|^7.0
- pestphp/pest: ^1.21
- phpunit/phpunit: 8.0|^9.0
- symfony/css-selector: 5.0|^6.0
This package is auto-updated.
Last update: 2024-09-09 23:03:17 UTC
README
一个用于快速自动测试Laravel应用程序中所有静态、内部链接的包。与PHPUnit或PEST一起使用。🎉
有许多选项,但最简单的测试方法是
//... public function testAllStaticPages() { // Crawls all pages reachable from the root of your application // Makes sure, that all links return a response code < 400 StaticPagesTester::create()->run(); } //...
安装
composer require simonvomeyser/laravel-automatic-tests
由于所有配置都可以通过流式方法进行,因此不需要发布任何配置。
使用方法
在不进行任何配置的情况下,您可以使用此包...
与PEST框架一起使用
<?php // tests/StaticPagesTest.php use SimonVomEyser\LaravelAutomaticTests\StaticPagesTester; it('tests all pages reachable from the frontpage', function () { StaticPagesTester::create()->run(); });
与PHPUnit一起使用
<?php // tests/feature/StaticPagesTest.php namespace Tests\Feature; use SimonVomEyser\LaravelAutomaticTests\StaticPagesTester; use Tests\TestCase; class StaticPagesTest extends TestCase { public function testAllInternalPagesReachableOnFrontpage() { StaticPagesTester::create()->run(); } }
配置
有相当多的方法可以配置默认行为,所有流式方法也可以一起使用。
忽略查询参数和锚链接
由于某些网站使用了大量的查询链接(例如example.com/search?q=lorem
)或大量的带有页面锚点的链接(例如example.com/search#section-2
),因此可以忽略这些变体并仅检查路径(在这个例子中是example.com/search
)一次。
// ... StaticPagesTester::create() ->ignorePageAnchors() ->ignoreQueryParameters() ->run(); // ...
从不同的页面开始
当然,您可以从不同的页面开始爬取,默认是/
,这可能是大多数网站的前页。
// ... StaticPagesTester::create() ->startFromUrl('/home') ->run(); // ...
跳过默认断言,检查找到的URI和响应
为了使API尽可能精简,默认断言检查不会从任何给定的URL返回任何4xx
或5xx
错误。
要禁用此行为,您可以通过跳过断言来处理所有URI和响应。
// ... $spt = StaticPagesTester::create() ->skipDefaultAssertion() ->run(); // access all uris that were found // ['/', '/about', ...] dump($spt->urisHandled) // access all uris with their testresponses // ['/' => $response, '/about' => $response, ...] dump($spt->respones) // Make own assertions $spt->responses['/admin']->assertRedirect(); // ...
添加自定义断言
虽然找到所有URI之后进行所有自定义断言是可能的,但您可以通过addAssertion
立即添加自定义断言以跳过模糊处理。
// ... StaticPagesTester::create() ->addAssertion(function($response) { // Example: allow anything except for 5xx errors for all uris assertTrue($response->status() < 500); }) ->skipDefaultAssertion() ->addAssertion(function($response, $uri) { // Example: check for redirects only when accessing admin area if(str_contains($uri, '/admin')) { $response->assertRedirect() } }) ->run(); // ...
定义最大页数和爬取深度
由于自动爬取可能会消耗大量内存,因此您可以定义最大页数/URI或最大爬取深度(1
表示仅处理从起始URL开始的URL和找到的页面)。
// ... StaticPagesTester::create() ->maxPages(3) ->maxCrawlDepth(1) ->run(); // ...
关于传递测试用例的说明
此包需要当前测试用例以启动其爬取 - 实际上,您需要将测试本身传递给new up的StaticPagesTester
,如下所示
// This is NOT necessary, but it's happening under the hood $staticPagesTester = new StaticPagesTester($this);
由于这不是一个漂亮的API,因此该包试图使用create()
方法进行一些魔法以找到调用的测试用例。
如果您想在测试之外的其他地方使用StaticPagesTester
,请记住这一点。
路线图
我对这个包有很多想法,但我们都有很少的时间,我主要为了自己编写了这个包,只包含了一些基本功能。如果您有兴趣,请让我知道,我们可以讨论一些想法,例如
- 使此包在
Laravel Dusk
中高效工作以渲染JavaScript - 使此包与文件一起工作:如果您链接到
/downloads/something.pdf
,我们目前无法检查链接文件的存在 - 使此包与
DataProviders
一起工作以获得更好的输出(每个找到的URI一个测试) - 添加检查更多内容的途径,例如损坏的外部链接,从而使此包名副其实“LaravelAutomaticTests” 😀
变更日志
请参阅CHANGELOG获取有关最近更改的更多信息。
贡献
请参阅CONTRIBUTING以获取详细信息。
安全漏洞
请审查我们的安全策略,了解如何报告安全漏洞。
鸣谢
许可证
MIT许可证(MIT)。请参阅许可证文件获取更多信息。
测试
要测试此测试包,请运行以下测试命令(#testception)
composer test