其他分享
首页 > 其他分享> > 接口测试平台代码实现137: 小bug集中修复

接口测试平台代码实现137: 小bug集中修复

作者:互联网

 

    有bug反馈证明 有人在用,在学。这点很好。当然随着 难度不断的提升,一些bug也并不是我故意埋的了。感谢反馈的小伙伴等人!

 

bug1:  新建项目 ,打开登陆态接口,看到的场景很诡异:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

 

如图,如果你想知道为什么这么诡异,现在,就带你研究!

这个问题的罪魁祸手是 views.py中的这个函数:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

当项目并没有设置 登陆态的时候,就返回了个空字典。这样前端的js自然找不到里面的内容,从而展示空白/undefined等。 

所以修复这个问题也简单,我们给这个空字典改成一个有各个必要字段的字典就好了:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

# 获取项目登陆态def project_get_login(request):    project_id = request.GET['project_id']    try:        login = DB_login.objects.filter(project_id=project_id).values()[0]    except:        login = {"project_id":project_id,"api_method":"none","api_url":"","api_header":"{}","api_host":"","body_method":"none",                 "api_body":""}    return HttpResponse(json.dumps(login),content_type='application/json')

 

然后我们刷新页面再打开就可以看到如下正常效果了:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

 

 

bug2 :新项目的登陆态接口保存失败!

 

这个问题的诱发原因就是,新项目并没有在数据库中的登陆态。而代码中又仅仅是保存。所以这里我们要用到一个orm方法:更新或新建 upate_or_create

意思就是 如果存在就更新,不存在就创建。

 

 这个update_or_create的用法如下:

数据表.object.update_or_create( 更新用的字典,查询的字段 )

其中查询字段可以是多个

 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

# 保存登陆态接口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.update_or_create(        defaults={            "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,            } ,        project_id = project_id    )    # 返回    return HttpResponse('success')

 

经过测试,这样就搞定了!!!

 

bug3: 登陆态项目请求报错!

最简单的请求 某度:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

 

这个问题引起的原因是 调试登陆态接口时,这句代码引起的:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

 

当时我们设计的时候,只设计了返回值是json的情况。当请求返回体非这个的时候,自然引发了这句报错。但是我们暂时并没有打算去用正则等方式去提取非json格式的返回体 关键字段。所以这里我们临时 给try掉。以后优化的时候我们再回来 增加其他格式的设置吧~

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

 

再看看结果显示:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

好,这里我们顺手再解决这个中间是undefined的问题:

原来是我们之前漏掉了set字段:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

加上 就好了,然后新项目就不会出现这个问题了。老项目我们手动改下即可。

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

 

好了,本期改的bug很多了。欢迎小伙伴继续关注!

 

标签:body,request,接口,method,project,api,137,login,bug
来源: https://blog.51cto.com/u_15282986/2965867