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),
        ];
    });
  • 相关阅读:
    使用CefSharp在.NET中嵌入Google kernel
    在WPF中嵌入WebBrowser可视化页面
    C#获取字符串的拼音和首字母
    .NET Core IdentityServer4实战 第六章-Consent授权页
    .NET Core IdentityServer4实战 第Ⅴ章-单点登录
    .NET Core IdentityServer4实战 第Ⅳ章-集成密码登陆模式
    一个C#程序员学习微信小程序路由的笔记
    C#串口通讯概念以及简单实现
    一个C#程序员学习微信小程序的笔记
    使用Http-Repl工具测试ASP.NET Core 2.2中的Web Api项目
  • 原文地址:https://www.cnblogs.com/sgm4231/p/10189624.html
Copyright © 2011-2022 走看看