【问题标题】:How to store/deal with django exception webpages in acceptance testing如何在验收测试中存储/处理 django 异常网页
【发布时间】:2014-03-19 17:37:30
【问题描述】:

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

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

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_length 增加到 70,000 来存储整个页面,但是有没有更简洁的方法来捕获和存储相关数据,包括数据库的特定错误?

【问题讨论】:

    标签: python django selenium


    【解决方案1】:

    如果您使用 Django 的测试客户端执行此操作,您可以获得更简洁的信息——但是通过使用请求,您真的可以像 Web 浏览器一样访问您的页面,所以您获得的是整个页面(但 65K 500 错误页面?哇)。

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

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

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

    当然,您需要确保在该错误消息中不包含任何机密信息,或者,如果您这样做,则仅在处于 DEBUG 模式或请求来自本地主机或登录时才发出它作为员工,或任何其他安全约束都可以工作。

    稍微漂亮一点的方法是编写一个将错误信息作为 HTTP Header 发出的中间件;那么您的页面可以保持不变,您可以查看响应标头以获取错误信息。

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 2017-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-09
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多