接口自动化

依赖第三方数据的接口如何进行测试--mock

标准答案 是mock

有mock平台,写入参,请求返回你要的结果

这个需要自己去搭建一个mock服务、模拟接口返回数据

      mock是一个开源的框架,在github上可以下载到。

      mock可以用在单元测试过程中,还有一个用途,当前端开发在开发页面的时候,需要服务端提供API接口,此时服务端还没开发完成,或者说没搭建测试环境,这时候前端开发会自己mock一个api服务端,自己给自己提供调用接口的返回数据。

在手工接口测试或者自动化接口测试过程中,上下游接口有数据依赖如何处理?

用一个全局变量来处理依赖的数据,比如登录后返回token,其他接口都需要这个token,那就用全局变量来传token参数

global

下个接口请求参数依赖上个接口的返回数据?

不同的接口封装成不同的函数或方法,需要的数据return出来,用一个中间变量a去接收。后面的接口传a就可以了。

测试数据放哪里?

测试的数据分很多种,千万不能说写在代码里,因为数据是不能写死在代码里的。

      测试数据放到.py文件的开头,对于少量的,固定不变的数据是可以的。

      测试数据存放总结:

             ① 对于一些一次性消耗的数据,比如注册,每次注册不一样的数,可以用随机函数生成

             ② 对于一个接口有多组测试的参数,可以参数化,数据放yaml,text,json,execl等都可以

             ③ 对于反复使用的数据,如订单的各种状态需要造数据的情况,可以放到数据库,每次数据初始化,用完后再清理

             ④ 对于邮箱配置的一些参数,可以用ini配置文件

             ⑤ 对于全部是独立的接口项目,可以用数据驱动方式,用execl/csv管理测试的接口数据

             ⑥ 对于账号密码,这种管全局的参数,可以用命令行参数,单独抽出来,卸载i配置里(如ini)

             ⑦ 对于少量的静态数据,比如一个接口的测试数据,也就2-3组,可以写到python脚本的开头,十年八年都不会变更的。

例子

class Scene_Demo_Scene1 extends Scene_Framework_SceneBase//场景类继承了框架类
{
    //指定请求的uri信息
    protected $strUrl = '/demo/submodule/scene1';
    //指定请求的地址,统一在配置文件中定义,Conf_Demo_Server类的定义参见conf/demo/Server.php的实现介绍
    protected $strHost = Conf_Demo_Server::HOST;
    //设置请求方式及其他自定义请求参数
    protected $arrOptData = array(
        'httpMethod' => 'POST',
    );
    //场景默认请求参数设置,如果在case中设置了参数值,则以case中的为准,覆盖默认值
    protected $sceneTemplateData = array(
        'param1' => 'param1_default_value',
        'param2' => 'param2_default_value',
        'param3' => 'param3_default_value',
    );
    //scene维度默认的校验值,优先级最低,如果某个scene在不同case中assert值基本不变的话,用这个可以让case更简洁,case中的assert会覆盖掉scene中的
    protected $sceneTemplateAssertData = array(
        'response' => array(
          //***编写默认公共校验项***
        ),
        'db' => array(
          //***编写默认公共校验项***
        ),
    );
    //设置返回结果需要过滤的参数
    protected $skipData = array(
        ''
    );
    //默认不需要在这里设置isWrite,用于static校验模式时scene的校验点(response或DB,redis结果)发生变更时使用的后门,减少修改case和预期结果的成本。
    //当scene维度的isWrite是true时,优先级最高;是false时无效。这样当scene结果有改动时,不论用到这个scene的case本身isWrite是开是关,都会写
    //protected $isWrite = true;
}
<?php
/**
 * Created by PhpStorm.
 * User: guomengmeng_dxm
 * Date: 2019/6/4
 * Time: 23:26
 */
class Case_Demo_Scene1 extends Case_Framework_TestCase
{
    public static function getCaseList()
    {
        return array(
            //common(可选)中定义了case的基准信息,具体的case可以在common基础上修改实现,common下定义的内容不会作为一条case执行,需要单独指定一条case来跟common进行merge
            'common' => array(
                'info' => array(
                    'author' => 'guomengmeng_dxm',
                    'module' => 'demo/submodule/scene1',
                    'description' => '文本描述,详细描述这个case的测试点',
                    'priority' => '0',//可设置为0,1,2,3,对应P0,P1,P2,P3
                    'zcasepath'=>'',//zcase上的treeid
                    'caseid'=>'',//文本用例id
                ),
                'stepList' => array(
                    '0' => array(
                        'sceneName' => 'Scene_Demo_Scene1',//使用的场景类名
                        'params' => array(//params为请求参数关键字
                            'param1' => 'param1_default_value',//设置参数的默认取值,如果跟scene中的$sceneTemplateData设置的内容一致,此处可以省略,如有差异,可在此处定义覆盖
                            'param2' => 'param2_default_value',
                            'param3' => 'param3_default_value',
                        ),
                        'assert' => array(//assert为校验的关键字
                            'response' => array(//response为校验接口返回的关键字
                                'errno' => '0',//设置默认返回结果
                                'errmsg' => 'ok',
                            ),
                        ),
                    ),
                ),
            ),
            //使用common模板用例,直接生成一条case
            'CASE001' => array(),
            //下面为一个在common用例基础上修改的测试用例
            'CASE002' => array( //THIS_IS_SCENE1_UNIQUE_CASE_NAME
                'info' => array(
                    // 'author' => 'guomengmeng_dxm',
                    // 'module' => 'demo/submodule/scene1',
                    'description' => '文本描述,验证入参为XX的场景下,接口处理返回0的情况',
                    'priority' => '0',//可设置为0,1,2,3,对应P0,P1,P2,P3

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值