接口测试平台-105: 项目公共登陆态接口 保存+调试

1. 保存

分两步,1-获取,2-发送。依然是复制了普通接口的保存函数进行了全部替换成login_并增删了一些字段的方法

{#  保存  #}
function login_save(){
    // 获取所有接口设置数据
    var login_method = document.getElementById('login_method').value ;
    var login_url = document.getElementById('login_url').value ;
    var login_host = document.getElementById('login_host').value ;
    var login_header = document.getElementById('login_header').value ;
    var login_response_set = document.getElementById('login_response_set').value;

    // 判断顶部的数据是否填充完
    if(ts_method === 'none') {
        alert('请选择请求方式!');
        return
    }
    if(ts_url === '') {
        alert('请输入url!');
        return
    }
    if(ts_host === '') {
        alert('请输入host!');
        return
    }

    //判断关键数据是否符合规则
    if(login_host.slice(0,7) !== 'http://' && login_host.slice(0,8) !== 'https://' && login_host.slice(0,4) !== '全局域名') {
        alert('host必须以http://或https://开头!');
        return
    }
    if(login_header !== '') {
        try {
            JSON.parse(login_header)
        } catch (e) {
            alert('header请求头不符合json规范!');
            return
        }
    }

    var login_body_method = $('ul#login_myTab li[class="active"]')[0].innerText;
    if (login_body_method === '返回体') {
        alert('请切换到请求体tab再保存!')
        return
    }

    if (login_body_method === 'none') {
        var login_api_body = ''
    }
    if (login_body_method === 'form-data') {
        var login_api_body = []; //新建这个空列表用来存放后续的数据
        var tbody_ = $("table#login_mytable tbody")[0]; //获取该表格的内容部分
        var trlist = tbody_.children ; //获取下面所有tr,每个tr就是一个键值对实际上
        for(var i=0;i<trlist.length;i++) {
            var tdarr = trlist[i].children; // 获取tr下的俩个td
            var key = tdarr[0].innerText; // 获取key
            var value = tdarr[1].innerText; // 获取value
            login_api_body.push([key, value]);// 作为一个数组,存放到这个大数组里。
        }
        var login_api_body = JSON.stringify(login_api_body);
    }
    if (login_body_method === 'x-www-form-urlencoded') {
        var login_api_body = []; //新建这个空列表用来存放后续的数据
        var tbody_ = $("table#login_mytable2 tbody")[0]; //获取该表格的内容部分
        var trlist = tbody_.children ; //获取下面所有tr,每个tr就是一个键值对实际上
        for(var i=0;i<trlist.length;i++) {
            var tdarr = trlist[i].children; // 获取tr下的俩个td
            var key = tdarr[0].innerText; // 获取key
            var value = tdarr[1].innerText; // 获取value
            login_api_body.push([key, value]);// 作为一个数组,存放到这个大数组里。
        }
        var login_api_body = JSON.stringify(login_api_body);
    }
    if (login_body_method === 'Text') {
        var login_api_body = document.getElementById('login_raw_Text').value;
    }
    if (login_body_method === 'JavaScript') {
        var login_api_body = document.getElementById('login_raw_JavaScript').value;
    }
    if (login_body_method === 'Json') {
        var login_api_body = document.getElementById('login_raw_Json').value;

    }
    if (login_body_method === 'Html') {
        var login_api_body = document.getElementById('login_raw_Html').value;

    }
    if (login_body_method === 'Xml') {
        var login_api_body = document.getElementById('login_raw_Xml').value;
    }
    if (login_body_method === 'GraphQL') {
        body_plan_G_Q = document.getElementById('login_body_plan_G_Q').value;
        body_plan_G_G = document.getElementById('login_body_plan_G_G').value;
         var login_api_body = body_plan_G_Q+ '*LR*' + body_plan_G_G
    }

    $.get('/project_login_save/',{
        "project_id": "{{ project.id }}",
        "login_method": login_method,
        "login_url": login_url,
        "login_host": login_host,
        "login_header": login_header,
        "login_body_method": login_body_method,
        "login_api_body": login_api_body,
        "login_response_set": login_response_set
    },function (ret) {
        document.location.reload();
    })
}

 

添加映射:

urls.py:

url(r'^project_login_save/$', views.project_login_save),  # 保存项目登陆态接口

views.py:

# 保存登陆态接口
def project_login_save(request):
    # 提取所有数据
    project_id = request.GET['project_id']
    login_method = request.GET['login_method']
    login_url = request.GET['login_url']
    login_host = request.GET['login_host']
    login_header = request.GET['login_header']
    login_body_method = request.GET['login_body_method']
    login_api_body = request.GET['login_api_body']
    login_response_set = request.GET['login_response_set']
    # 保存数据
    DB_login.objects.filter(project_id=project_id).update(
        api_method=login_method,
        api_url=login_url,
        api_header=login_header,
        api_host=login_host,
        body_method=login_body_method,
        api_body=login_api_body,
        set=login_response_set
    )
    # 返回
    return HttpResponse('success')

搞定之后测试一下:保存,重新打开 都正常。所以这里功能就ok了。

 

2. 调试

本节来制作登陆态接口的请求js函数,为什么要制作这个调试请求功能?这个功能在正常使用中是不会用到的,这里只用来给调试用,也就是测试。

确保这个登陆态接口是能够正常请求返回并成功提取 需要用到的参数的。之后普通接口自动添加登陆态的时候,走的其实是另一套类似的新函数。

打开P_apis.html,给Send按钮加上onclick并且下面新建login_send函数:

代码中注意,增加了返回值提取设置字段:login_response_set

 

添加映射:

urls.py:

url(r'^project_login_send/$', views.project_login_send),  # 调试项目登陆态接口

views.py:

现在来思考下,这个方法要做什么事?

  1. 获取前端的数据

  2. 进行请求,得到返回值

  3. 对返回值进行提取

  4. 把提取的结果和返回值一起返回给前端来展示

# 调试登陆态接口
def project_login_send(request):
    # 第一步,获取前端数据
    login_method = request.GET['login_method']
    login_host = request.GET['login_host']
    login_url = request.GET['login_url']
    login_header = request.GET['login_header']
    login_body_method = request.GET['login_body_method']
    login_api_body = request.GET['login_api_body']
    login_response_set = request.GET['login_response_set']

    # 第二步,发送请求
    try:
        headers = json.loads(login_header)  # 处理headers
    except:
        return HttpResponse('请求头不符合json格式!')

    try:
        response = api_send_basic(login_method, login_host, login_url, headers, login_body_method, login_api_body)

        # 第三步,对返回值进行提取
        get_res = ''  # 声明提取结果存放
        for i in login_response_set.split('\n'):
            if i == "":
                continue
            else:
                i = i.replace(' ', '')
                key = i.split('=')[0]  # 拿出key
                path = i.split('=')[1]  # 拿出路径
                value = response.json()
                for j in path.split('/')[1:]:
                    value = value[j]
                get_res += key + '="' + value + '"\n'

        # 第四步,返回前端
        end_res = {"response": response.text, "get_res": get_res}
        return HttpResponse(json.dumps(end_res), content_type='application/json')

    except Exception as e:
        end_res = {"response": str(e), "get_res": ''}
        return HttpResponse(json.dumps(end_res), content_type='application/json')

注意,上面的最后 用了一个字典装好数据返回给前端了。前端要进行对应解析。

所以回到P_apis.html中,这个js函数的返回处理部分 改成了如下红线格式即可。

$("li a[href=#login_response]")[0].click();  // 点击一下返回体按钮
ret = eval(ret)
document.getElementById('login_response_body').value = ret.response;  // 把返回值显示到返回值多行文本框中
document.getElementById('login_response_result').value = ret.get_res;  // 把提取结果显示到对应文本框中

 

随便找个接口,然后对其任意返回值字段做测试,大家想象成这就是登陆接口的返回值提取的是token字段就可以了。

示范接口 :get

https://pagead2.googlesyndication.com

/getconfig/sodar?sv=200&tid=gda&tv=r20201203&st=env

设置如下:

提取了一个返回值的id,做为token,当然实际情况不是这样,这只是举例子调试接下来的功能。

 

然后请求:现在是请求成功并且提取成功:

成功后,就可以接下来去研究怎么在接口库/用例库中 调用这个登陆态接口了。

 

接下来的计划是:

  1. 在接口调试层 加入 是否使用登陆状态的 开关

  2. 把这个开关的状态 写到普通接口的保存 /发送/展示/清空等js函数中

  3. 在后台views.py中,普通接口的调试方法里,加入对这个登陆状态开关的判断分支

  4. 创建登陆态接口调用方法。并临时持久化结果,方便持续调用

  5. 在判断开关分支里再添加判断分支,判断是否有未过期的登陆态,如果有则用,如没有,则调用登陆态调用方法。

  6. 把拿到的登陆态token,插入到普通接口的header,请求体,请求url里,来保证有效。

    7.用例库模块 按照上述流程再来一遍~ 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值