【问题标题】:django unittest outputdjango unittest 输出
【发布时间】:2012-10-29 08:44:33
【问题描述】:

我想通过 python 子进程运行 django unittest,并且我想将所有数据(尤其是单词 Failure 或 OK)存储在一个变量中。但是,当我使用 subprocess 运行它时,输出仅包含以下部分:

"正在为别名 'default' 创建测试数据库..." "正在销毁别名 'default' 的测试数据库..."

其余的只是出现在屏幕上,这是我不想要的。如何将 django unittest 的所有输出转换为变量。

args_list = ['python', '/path/to/manage.py', 'test', 'myapp']
process=subprocess.Popen(args_list, stdout=subprocess.PIPE)
output, errors = process.communicate()
print output

输出将等于: 为别名“默认”创建测试数据库... 正在销毁别名“default”的测试数据库...

但是在我的屏幕上出现了 django unittest 的整个标准输出。如何将所有输出存储到变量中。

【问题讨论】:

    标签: python django unit-testing subprocess django-unittest


    【解决方案1】:

    如何将所有输出存储到变量中。

    将标准错误重定向到标准输出:

    from subprocess import check_output, STDOUT
    
    output = check_output(args_list, stderr=STDOUT)
    print output,
    

    【讨论】:

      【解决方案2】:

      您需要将标准错误重定向到标准输出。这是固定的代码:

      args_list = ['python', '/path/to/manage.py', 'test', 'myapp']
      process=subprocess.Popen(args_list, stderr=subprocess.STDOUT, stdout=subprocess.PIPE)
      output, errors = process.communicate()
      print output
      

      或者在 shell 中,您可以输入如下内容:

      python manage.py test myapp > stdout.txt 2> stderr.txt
      

      【讨论】:

        【解决方案3】:

        如果你真的想将 stdout 重定向到一个变量进行检查,那么你可以使用以下代码:

        from cStringIO import StringIO
        import sys
        
        output = StringIO()
        sys.stdout = output
        print "Hello World!"
        print 42
        sys.stdout = sys.__stdout__
        print output.getvalue()
        >>>
        Hello World!
        42
        

        【讨论】:

        • 此代码有效,但不适用于 django 单元测试的输出
        • 这行不通。替换 sys.stdout 对子进程没有任何作用。
        【解决方案4】:

        您可以使用 unittest.TestResult 对象处理测试结果。示例见https://stackoverflow.com/a/284192/579461

        【讨论】:

          猜你喜欢
          • 2018-10-07
          • 1970-01-01
          • 2018-12-23
          • 1970-01-01
          • 1970-01-01
          • 2011-04-18
          • 1970-01-01
          • 2020-06-14
          • 2011-08-09
          相关资源
          最近更新 更多