开发者社区> 游客pxprrm2iipsfu> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

接口测试平台代码实现113:登录态接口-9

简介: 接口测试平台代码实现113:登录态接口-9
+关注继续查看

本节我们要把登陆态安装到 请求体中,首先我们先解决一个bug,就是当选择不添加登陆态时候,login_res未被定义的问题:

改成如下即可,默认{}

微信图片_20220703213132.png

首先是简单的form-data和x-www...  这俩种的数据结构一样,所以方法几乎一样:

微信图片_20220703213142.png

payload作为最终的请求体,我们只需要便利登陆态字段即可添加,如果没有,就是{} 也就不会执行这个for了。

测试一下:

微信图片_20220703213147.png

微信图片_20220703213154.png

可以看到,成功插入进来了。


然后是raw_json:

微信图片_20220703213200.png

微信图片_20220703213208.png

测试效果如下:

微信图片_20220703213226.png

目前这三种请求体我们都可以成功插入 登陆态提取字段了。

完整代码:

# 调试层发送请求
def Api_send(request):
    # 提取所有数据
    api_id = request.GET['api_id']
    ts_method = request.GET['ts_method']
    ts_url = request.GET['ts_url']
    ts_host = request.GET['ts_host']
    ts_header = request.GET['ts_header']
    api_name = request.GET['api_name']
    ts_body_method = request.GET['ts_body_method']
    ts_project_headers = request.GET['ts_project_headers'].split(',')
    ts_login = request.GET['ts_login']
    if ts_login == 'yes': #说明要调用登陆态了
        login_res = project_login_send_for_other(project_id=DB_apis.objects.filter(id=api_id)[0].project_id)
    else:
        login_res = {}
    # 处理域名host
    if ts_host[:4] == '全局域名':
        project_host_id = ts_host.split('-')[1]
        ts_host = DB_project_host.objects.filter(id=project_host_id)[0].host
    if ts_body_method == '返回体':
        api = DB_apis.objects.filter(id=api_id)[0]
        ts_body_method = api.last_body_method
        ts_api_body = api.last_api_body
        if ts_body_method in ['',None]:
            return HttpResponse('请先选择好请求体编码格式和请求体,再点击Send按钮发送请求!')
    else:
        ts_api_body = request.GET['ts_api_body']
        api = DB_apis.objects.filter(id=api_id)
        api.update(last_body_method=ts_body_method,last_api_body=ts_api_body)
    # 发送请求获取返回值
    if ts_header == '':
        ts_header = '{}'
    try:
        header = json.loads(ts_header) #处理header
    except:
        return HttpResponse('请求头不符合json格式!')

    for i in ts_project_headers:
        if i!= '':
            project_header = DB_project_header.objects.filter(id=i)[0]
            header[project_header.key] = project_header.value
    # 拼接完整url
    if ts_host[-1] == '/' and ts_url[0] =='/': #都有/
        url = ts_host[:-1] + ts_url
    elif ts_host[-1] != '/' and ts_url[0] !='/': #都没有/
        url = ts_host+ '/' + ts_url
    else: #肯定有一个有/
        url = ts_host + ts_url
    # 插入登陆态字段
    ## url插入
    if '?' not in url:
        url += '?'
        for i in login_res.keys():
            url += i+'='+login_res[i]+'&'
    else: #证明已经有参数了
        for i in login_res.keys():
            url += '&'+i+'='+login_res[i]

    ## header插入
    header.update(login_res)



    try:
        if ts_body_method == 'none':
            response = requests.request(ts_method.upper(), url, headers=header, data={} )

        elif ts_body_method == 'form-data':
            files = []
            payload = {}
            for i in eval(ts_api_body):
                payload[i[0]] = i[1]
            for i in login_res.keys():
                payload[i] = login_res[i]
            response = requests.request(ts_method.upper(), url, headers=header, data=payload, files=files )

        elif ts_body_method == 'x-www-form-urlencoded':
            header['Content-Type'] = 'application/x-www-form-urlencoded'
            payload = {}
            for i in eval(ts_api_body):
                payload[i[0]] = i[1]
            for i in login_res.keys():
                payload[i] = login_res[i]
            response = requests.request(ts_method.upper(), url, headers=header, data=payload )

        elif ts_body_method == 'GraphQL':
            header['Content-Type'] = 'application/json'
            query = ts_api_body.split('*WQRF*')[0]
            graphql = ts_api_body.split('*WQRF*')[1]
            try:
                eval(graphql)
            except:
                graphql = '{}'
            payload = '{"query":"%s","variables":%s}' % (query, graphql)
            response = requests.request(ts_method.upper(), url, headers=header, data=payload )

        else: #这时肯定是raw的五个子选项:
            if ts_body_method == 'Text':
                header['Content-Type'] = 'text/plain'

            if ts_body_method == 'JavaScript':
                header['Content-Type'] = 'text/plain'

            if ts_body_method == 'Json':
                ts_api_body = json.loads(ts_api_body)
                for i in login_res.keys():
                    ts_api_body[i] = login_res[i]
                ts_api_body = json.dumps(ts_api_body)
                header['Content-Type'] = 'text/plain'

            if ts_body_method == 'Html':
                header['Content-Type'] = 'text/plain'

            if ts_body_method == 'Xml':
                header['Content-Type'] = 'text/plain'
            response = requests.request(ts_method.upper(), url, headers=header, data=ts_api_body.encode('utf-8'))

        # 把返回值传递给前端页面
        response.encoding = "utf-8"

        DB_host.objects.update_or_create(host=ts_host)

        return HttpResponse(response.text)
    except Exception as e:
        return HttpResponse(str(e))

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
接口测试平台代码实现114:登录态接口-10
本节会继续嵌入到用例库中。 要做的事情有以下几点: 1.用例库-大用例-步骤小用例 的设置页面上,加入一个个的登陆状态开关,方法和接口库调试层类似 2.在后端实际去调用接口的小用例方法中,加上关于登陆态的判断/获取/加入url等,实现和接口库调试功能类似 3.未避免一个用例中多次调用登陆接口,所以设计临时缓存字段功能。只有第一个需要加登陆态的接口会真的去访问登陆接口,取回的字段会直接被后续接口使用。
15 0
接口测试平台代码实现107:登录态接口-4
接口测试平台代码实现107:登录态接口-4
12 0
接口测试平台代码实现90: 全局请求头-5
接口测试平台代码实现90: 全局请求头-5
22 0
接口测试平台代码实现107:登录态接口-3
接口测试平台代码实现107:登录态接口-3
15 0
接口测试平台代码实现134: 全局变量-13
假期结束,回来继续学习这个全局变量吧。 山风不断,春雨绵绵,终有尽。 接口平台,全局变量,总不绝。 不过一切都要结束了,这个全局变量章节的最后时刻也要来临了。 在上节课中,我们成功的搞定了 在调试层请求体插入 变量。其实这已经证明一切都是可行的了。我们剩下的就是照葫芦画瓢,把什么登陆态,多用例,异常等 都插入全局变量即可完成本章节。
10 0
接口测试平台代码实现130: 全局变量-9
本文开始,全局变量 要正式进入 复杂的后台实现了,当然如果能跟到这里,那么也应该没什么难度。 这里还是要重申一下,代码出现问题请先仔细比对教程源码,实在找不出来就先在群里问,没加群的请先加 vx: qingwanjianhua 博主每天的时间并不充裕,私聊的人也很多,如果群里解决不了后可以直接@我去热饭 即可。
10 0
接口测试平台代码实现26:项目详情页设计
本节我们要设计项目详情页。按照我们之前的设计,项目详情页至少要包括3个部分: 接口库 :难度 *** (接口导入/调试) 用例设置 :难度 ***** (用接口库的接口组成各种用例/执行/报告/监控) 项目设置 :难度 * (项目名称/备注/其他管理者 等后续新增的属性修改)
18 0
接口测试平台代码实现92: 全局请求头-7
我们本节要进行全局请求头的收尾: 保存step的 请求头成功 和 显示 请求头成功 在多用例运行的底层send函数中加入公共请求头
32 0
接口测试平台代码实现95:全局域名-2
接口测试平台代码实现95:全局域名-2
12 0
接口测试平台代码实现131: 全局变量-10
本节开始要进入比较烧脑的阶段了,请系好安全带,中途跳车的请刷卡。
9 0
+关注
游客pxprrm2iipsfu
我去热饭
435
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载