基于swagger phpunit打造全自动化php单元测试

本文介绍了如何结合swagger和phpunit在laravel框架中创建全自动化PHP单元测试。通过swagger的注解生成接口文档,并利用接口列表自动生成测试代码。配合gitlab钩子,确保接口文档的完整性和测试覆盖率,促进团队规范开发。
摘要由CSDN通过智能技术生成


        最近也是工作上,要推进单元测试,才有想法了解一下相关东西~~忘记说了,这个是基于laravel的框架来做的~~

        可能因为工作内容特殊的问题,我的这个单元测试主要测试的是api接口~~~做了个再挂一个gitlab的钩子,可以全面

        我这个方案其实可以推进的不仅仅是单元测试,接口文档的完善也一并给做了。我的单元测试是基于swagger自动生成的。

        swagger:还是相当强大的,可以通过注解自动生成接口文档,而且有ui界面可以查看和模拟请求结果。不了解的,可以先去了解下,非常强大~~~

        主要思路:通过swagger json的接口list,来生成单元测试的代码~~其实蛮简单,可以自己看下~~colors类可以忽略,就是一个终端输出带颜色的类,就是为了看起舒服点。

         其实这个配上gitlab,可以强制要求大家必须完善swagger的注释,这样接口文档也比较完善~~~有需要可以自己拿去改进~~


 public function __construct()
    {
        parent::__construct();
        $this->swaggerUrl = 'http://laravel.test.com/swagger/json';
    }

    /**
     * 测试用例入口
     */
    public function testSwaggerList()
    {
        error_reporting(E_ALL | E_STRICT);
        $request = Request::get($this->swaggerUrl)->send();
        $api_list = json_decode( json_encode( $request->body),true);

        foreach ($api_list['paths'] as $key=>$v){
            $api_url = $key;
            $param = array();
            //组织参数
            $v['post']['parameters']    = $v['post']['parameters'] ?? array();
            $v['get']['parameters']     = $v['get']['parameters'] ?? array();
            $parameters = empty($v['post']['parameters']) ? $v['get']['parameters'] : $v['post']['parameters'];

            foreach ($parameters as $v){
                $v['required']  =  $v['required'] ?? false;
                $v['default']   =  $v['default'] ?? '';
                $param[$v['name']] =  $this->setValue($v['type'],$v['required'],$v['default'],$v['name']);
            }
            $colors = new Colors();
            echo $colors->getColoredString("\n start test 接口名称".$api_url."~~参数:".json_encode($param), "purple", "green");
            if (empty($v['post'])){
                $response = $this->get($api_url.'?'.http_build_query($param));
            } else {
                $response = $this->post($api_url,$param);
            }

            $response->assertStatus(200)->assertJson(array('code'=>200));
            echo $colors->getColoredString("...............【success】", "purple", "green");

        }
    }

    /**
     * 返回接口参数
     * @param string $type 参数类型
     * @param bool $required 是否必填字段
     * @param string $default 默认值
     * @return String/Inter
     */
    private function setValue($type, $required, $default,$name){
        //为了真实非比填写字段随机50%几率为空
        if (empty($required) && rand(1,1)){
            return '';
        }

        //有默认值则直接返回默认值
        if (!empty($default)){
            return $default;
        }

        switch ($type){
            case 'string'   : return "Test ".$name;break;
            case 'integer'  : return rand(1,100);break;
        }
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值