您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

用另一种方法来进行Laravel数据库测试(SQLite)

2025/7/20 13:51:23发布21次查看
这篇文章主要介绍了关于用另一种方法来进行laravel数据库测试(sqlite),有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
laravel数据库测试在测试方面,laravel内置使用phpunit提供了非常方便的解决方案。而对于数据库增删改查的测试,要解决的一个很重要的问题就是如何在测试完成之后,恢复数据库的原貌,例如要测试一个用户注册的方法,需要插入一条用户记录到数据库,但是测试完成之后,我们并不想让这条测试用例保存在数据库里。为了解决这个问题,laravel提供了非常方便的方案:
使用迁移:databasemigrations
使用事务:databasetransactions
参考资料:https://laravel.com/docs/5.3/database-testing#resetting-the-database-after-each-test另外一种解决方案:使用sqlite的内存数据库:memory:laravel提供的两种解决方案,仍然对数据库进行了读写操作,某些时候你可能并不想这样(例如多人共享一个线上开发数据库),此时,还可以用一种更为优雅的方式:sqllite,逻辑其实也非常简单:就是在跑测试用例的时候,将数据库的连接替换为sqlite。
使用示例例如我们有以下测试类(该事例并不具有代表性,仅用于说明问题,并假设本机已经安装sqlite):
class homepagetest extends testcase {        public function testhomepage()     {        // 创建一个测试用户,并保存        $user = factory(app\user::class)->create();        $this->actingas($user)->visit('/home')->see('dashboard');    }}
首先在laravel的数据库配置文件,即config/database.php的connections数组中添加一个新的数据库连接
'sqlite' => [    'driver' => 'sqlite',    'database' => ':memory:',    'prefix' => '',],
这里一个非常重要的参数就是'database' => ':memory:',:memory:数据库是sqlite中内置的一个内存数据库,每次运行测试用例的时候都会在内存中创建一个新的数据库,并在测试完成关闭数据库连接后,自动清除掉,具有良好的隔离性,又因为是在内存中的,所以速度也很快,这些特性对于测试非常方便,这也是我们选用sqlite数据库作为测试库的一个非常重要的原因。有关详细解释,点击这里。
然后需要修改phpunit的配置文件,在phpunit.xml中,将数据库连接改为刚刚定义的sqlite连接
<php>    <env name="app_env" value="testing"/>    <env name="cache_driver" value="array"/>    <env name="session_driver" value="array"/>    <env name="queue_driver" value="sync"/>        <!-- 将数据库连接改为刚刚定义的sqlite连接 -->    <env name="db_connection" value="sqlite" /></php>
这会覆盖.env中定义的数据库连接db_connection=mysql,并告诉框架在运行测试的时候,用sqlite连接代替mysql连接。
最后需要在运行测试用例之前执行数据库迁移,在测试类的基类,即testcase.php中添加setup方法
public function setup(){    parent::setup();    // 执行数据库迁移     $this->artisan('migrate');}
这样在每次执行测试用例之前,都会向sqlite的:memory:数据库中执行所有的迁移,生成业务逻辑所需的数据表。
方案优缺点该方案关键点在于使用sqlite内置的一个内存数据库:memory:,因此速度比较快,有很好的隔离性,也不会对我们的开发数据库有任何的影响。
当然该方案也有缺点,假如项目的数据库庞大,有大量的数据表或者迁移文件,会消耗大量内存,当运行测试的时候可能会由于内存不足,导致测试中断。此时需要为php分配合适的内存,在php.ini中修改配置memory_limit = 128m
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注!
相关推荐:
如何解决laravel.log 文件写入的问题
laravel开发环境部署之homestead 安装配置过程(windows系统)
laravel的路由(router)图文详解
以上就是用另一种方法来进行laravel数据库测试(sqlite)的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product