zoukankan      html  css  js  c++  java
  • Laravel 的 JSON API 接口自动化测试

    Laravel 自带了两种测试类型

    • Feature Test: 功能测试。针对类似接口这种流程性的测试。
    • Unit Test: 单元测试。针对单个函数这种输入输出结果的测试。

    新建一个 Feature Test

    php artisan make:test FinishOrderTest
    

    项目根目录下多了一个文件

    tests/Feature/FinishOrderTest.php

    安装 phpunit

    要执行测试案例,就需要安装 phpunit,否则会报错

    zsh: command not found: phpunit

    安装方法

    composer require --dev phpunit/phpunit
    

    注意,最好不要指定版本安装

    [InvalidArgumentException] Package phpunit/phpunit at version ^7 has a PHP requirement incompatible with your PHP version (7.0.18)

    执行测试案例

    ./vendor/bin/phpunit
    

    一个订单相关的测试案例

    cat tests/Feature/FinishOrderTest.php 
    <?php
    
    namespace TestsFeature;
    
    use TestsTestCase;
    use IlluminateFoundationTestingWithFaker;
    use IlluminateFoundationTestingRefreshDatabase;
    use AppUser;
    use AppModelsOrder;
    
    class FinishOrderTest extends TestCase
    {
        // use RefreshDatabase;
        
        public function testFinishOrderAPI()
        {
            $user = factory(User::class)->create(['email' => 'user4@test.com']);
            $token = $user->createToken('token', [])->accessToken;
            $headers = ['Authorization' => "Bearer $token"];
            $order = Order::orderBy("id", "desc")->first();
    
            $this->json('post', '/api/finish_order',
                ["order_id" => $order->order_id,], $headers)
                            ->assertStatus(200);
        }
    }
    

    测试数据重置

    对于没有使用 migraton 的项目,不要作死使用

    use RefreshDatabase;
    

    他的重置原理是重新运行 migrate, 删除所有数据表,然后执行 migrate 重建。。。

    在没有 migration 文件的情况下,这就是作死。。。

    为何要使用 factory

    参考: https://laravel-news.com/learn-to-use-model-factories-in-laravel-5-1

    可以同时使用在 seed 和 test case 中。用于自动生成伪造数据,例如 name, email 等。

    参考代码

    cat database/factories/UserFactory.php 
    <?php
    
    use FakerGenerator as Faker;
    
    $factory->define(AppUser::class, function (Faker $faker) {
        static $password;
    
        return [
            'name' => $faker->name,
            'email' => $faker->unique()->safeEmail,
            'password' => $password ?: $password = bcrypt('secret'),
            'remember_token' => str_random(10),
        ];
    });
  • 相关阅读:
    文件操作
    xadmin的使用
    Vue
    Redis
    Django
    python小结
    利用线程池和回调函数爬虫
    drf-基表、断关联表关系、级联删除、正方向查询、子序列化
    drf序列化
    drf初识
  • 原文地址:https://www.cnblogs.com/sgm4231/p/10189624.html
Copyright © 2011-2022 走看看