lx1036

三刀流
第 2233 位会员
注册于 2015-08-18 15:15:32
活跃于 2017-02-24 14:38:35


Laravel,AWS,Angular
专栏文章
没有任何数据~~
最近话题
最新评论
  • [北京][15K-30K] RightCapital 招聘 Laravel DevOps at 2017-02-23 17:22:12

    欢迎投简历。。技术栈可看 https://join.rightcapital.com

  • iView 发布 1.0 正式版,43 个 UI 组件助力中后台业务开发 at 2017-02-22 14:06:16

    厉害厉害。

  • 我就弱弱的问问,有多少人不喜欢 vue, react 这类框架的? at 2017-02-21 16:59:46

    Angular也是个不错的框架,写起来和Laravel似的。

  • 一分钟讲清楚 Authentication 和 Authorization at 2017-02-20 11:09:27

    Authentication: who is this user? Authorization: What can this user do?

  • Laracon Online 早鸟票 at 2017-02-10 17:58:36

    @张铁林 必须谢谢老板

  • Laracon Online 早鸟票 at 2017-02-10 10:45:56

    @张铁林 要要要,lx1036@126.com,坐等铁林大哥土豪一把。

  • Laracon Online 早鸟票 at 2017-02-10 10:40:07

    赞赞赞

  • 【phpunit】这样跑测试,竟然节省了我们 90% 的时间 at 2017-02-06 16:10:05

    每一个test case肯定知道污染了哪些表,不然这测试就不知道在干吗了啊。

  • 【phpunit】这样跑测试,竟然节省了我们 90% 的时间 at 2017-02-06 16:06:18
        public function seed($class = 'DatabaseSeeder', array $tables = [])
        {
            $this->artisan('db:seed', ['--class' => $class, '--tables' => implode(',', $tables)]);
        }
    
        protected function reseed()
        {
            /** @var string[] $seeders */
            $seeders = explode(',', env('TEST_SEEDERS'));
    
            if ($seeders && is_array(static::$tables_to_reseed)) {
                static::truncate(static::$tables_to_reseed);
    
                foreach ($seeders as $seeder) {
                    $this->seed($seeder, static::$tables_to_reseed);
                }
            }
    
            /*
             * Set this variable to not an array in order to skip reseed for the next test case.
             * Recall when this variable is an empty array, all tables will be reseed.
             */
            static::$tables_to_reseed = false;
        }
    
       /**
         * @param string[] $tables tables to truncate, all if empty
         */
        private static function truncate(array $tables = [])
        {
            DB::statement('SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;');
            DB::statement('SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;');
    
            $existing_tables = DB::select('SHOW TABLES');
    
            foreach ($existing_tables as $existing_table) {
                $existing_table = reset($existing_table);
    
                if ($tables && !in_array($existing_table, $tables, true)) {
                    continue;
                }
    
                DB::table($existing_table)->truncate();
            }
    
            DB::statement('SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS');
            DB::statement('SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;');
        }
    
        在需要重刷的test case中static::$tables_to_reseed = [A, B, C] 就行,把这个trait的reseed()放在TestCase::setUp()里执行就行,这样每一个testcase都会检查下需不需要刷表。
  • 【phpunit】这样跑测试,竟然节省了我们 90% 的时间 at 2017-02-06 15:59:27

    @lijinma 当前test case 污染了三张表,A,B, C,先truncate这三张表,再db:seed --class xxx --tables A,B,C重刷下这三张表,保证下一个test case 还是干净的测试数据。如果该test case污染表就重刷,不污染不重刷;且重刷只刷污染的几张表。这样效率会高很多。

  • 【phpunit】这样跑测试,竟然节省了我们 90% 的时间 at 2017-02-06 14:38:47

    @lijinma 恩恩,是push 执行CI,不是commit,我说错了,你说的是对的。

  • 【phpunit】这样跑测试,竟然节省了我们 90% 的时间 at 2017-02-06 14:35:31

    @lijinma 目前我们这边1700-1800 test cases, 一次push,CI只需要3-4 minutes就执行完毕(包括Install Dependencies, 执行测试,和代码结果上传到AWS S3 等过程)。测试数据库用的是MySQL,并且保持版本一致。

    我们这边不使用DatabaseTransactions和DatabaseMigrations,这两个效率不高,直接写个ReseedTrait就行了,然后在需要的test case中写上哪些tables需要在本次test case执行重刷数据

  • 【phpunit】这样跑测试,竟然节省了我们 90% 的时间 at 2017-02-06 14:29:37

    @lijinma 模块的话按照功能划分的,然后每一个模块对应一个phpunit-xxx.xml文件。每一次push执行CI。

  • 请问有没有把 Laravel 表单验证的逻辑同步到前端的方案? at 2017-02-06 12:20:16

    @东 你的软件是前后端分离吗?假设前端是Angular,后端是Laravel,后端Validation Rules放在前端使用,搞个通用的?为啥想要这么做呢。。不清楚有没有这样的package了。。

  • 【phpunit】这样跑测试,竟然节省了我们 90% 的时间 at 2017-02-05 20:44:39
    1. 如果有很多test suits的话,可以按照模块划分一下,放在不同的模块里,然后在CI工具里并行运行,这样减少很多时间。。不知道你用的是哪一个CI工具,我们这边用的是Bamboo,每一个模块放在一个job里,测试时这些job并行运行的,目前1700~1800 test cases一般只需要3~4 minutes

    2. DatabaseTransactions 和 DatabaseMigrations效率不高,一般也只有写表操作需要回滚,当某一个test case写表操作时,就把该tables执行 php artisan seed --table XXX,只需要把测试数据重刷该tables就行, 可以写一个ReseedTrait搞定下就行。DatabaseMigrations效率会更差。

    3. 如果用的是MySQL作为生产开发数据库,测试时用别的数据库,总觉得哪里不对。

    4. 为什么不是每一次commit就run CI呢,这样在开发feature时也能及时知道哪里有问题啊。。而且习惯在某一个test case失败时也会继续执行测试,这样也知道其他的测试有没有问题,然后看CI结果,有问题也顺便一起修改了,看你的测试脚本说只要某一个test case失败就停止测试,并不好。
  • 又一个 Composer 镜像 at 2017-02-05 19:51:46

    赞赞赞,厉害厉害。

  • 请问有没有把 Laravel 表单验证的逻辑同步到前端的方案? at 2017-02-05 19:50:10

    Form Validation, 前后端分离的话,一般前端也要写Validation啊,如使用Angular做前端Form Validation,后端Laravel API也必须做Validation,尤其在写表操作:1. 不能相信用户的数据; 2. Check Model Relations等等。

    看你的描述应该是直接用Laravel做全栈框架了,如果比较大的程序,个人不建议这么做,还是前后端分离比较好。

  • Laravel 5.4 正式发布 at 2017-02-01 00:56:19

    @xhh110 恩恩,我们这边升级L5.4,是有不少坑呢。可以过段时间升级下。。

  • 写了一个 Composer 包来,支持 Laravel 的事件广播 at 2017-01-14 16:25:50

    赞赞赞,厉害啊。

  • 用 Composer 安装 PM2.5 告警服务 at 2017-01-04 11:07:31

    很棒啊。