验收测试中如何存储/处理Django异常网页

2024-09-28 22:21:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在运行django站点的一系列selenium功能测试,以进行验收测试。我注意到,当我运行这些程序并且出现异常时,我会返回整个页面(例如HTTP状态500)

我正在使用一个简单的循环运行验收测试,并使用django orm将输出的html存储到db中:

def my_functional_tests(request):

    import requests
    from mytests.models import Entry    


    for i in range(3):    


        p1 = { ....... }
        r1 = requests.post('http://127.0.0.1:8000/testfunction1/',data=p1)    

        ..............    

        entry = Entry(output1 = r1.text, output2 = r2.text, output3 = r3.text)
        entry.save()    

    return HttpResponse("completed")

我的模型定义为(其中输出是3个功能测试的HTML结果):

class Entry(models.Model):    

    output1 = models.CharField(max_length=240)
    output2 = models.CharField(max_length=240)
    output3 = models.CharField(max_length=240)

当我得到一个错误时,生成的大约65K的网页会导致保存时出现异常,并中断测试。我希望获得尽可能多的信息,因此我可以将max_长度增加到70000来存储整个页面,但是有没有更简洁的方法来捕获和存储相关数据,包括数据库中的特定错误


Tags: djangotextimportmodels页面requests功能测试length
1条回答
网友
1楼 · 发布于 2024-09-28 22:21:52

如果您使用Django的测试客户机这样做,您可以获得更简洁的信息,但是通过使用请求,您确实像web浏览器一样访问您的页面,因此您可以得到完整的页面(但对于500错误页面,是65K吗?哇)

能否在错误页面中嵌入带有标记和简明说明的HTML注释

<html>
  <h1>Error</h1>
  ... 64k of stuff follows ...
  <!  ERR:"info about error"  >    
  </html>

这样,您就可以解析该错误代码的结果并将其存储

当然,您需要确保在该错误消息中没有任何机密信息,或者,如果您这样做了,则只有在调试模式下,或者当请求来自本地主机,或者作为工作人员登录,或者任何其他安全约束起作用时,才会发出该消息

更漂亮的做法是编写一个中间件,将错误信息作为HTTP头发送;然后,您的页面可以保持不变,您可以查看响应标题以获取错误信息

相关问题 更多 >