对Python测试问题全解析


在向大家详细介绍Python测试之前,首先让大家了解下Python测试,然后全面介绍Python测试,Python测试还是比较常用的,于是我研究了一下Python测试,在这里拿出来和大家分享一下,希望对大家有用。

正如在第一篇文章中看到的,py.test 和 nose 都支持编写为简单函数的测试,这会大大简化 Python 测试的编写:

  1. Traceback (most recent call last):  
  2.   File "test_partial_pickle.py", line 12, in <module> 
  3.     s = pickle.dumps(partial(add, 10))  
  4.   File "/Library/Frameworks/Python.framework/Versions/  
  5.      2.5/lib/python2.5/pickle.py", line 1366, in dumps  
  6.      Pickler(file, protocol).dump(obj)  
  7.   File "/Library/Frameworks/Python.framework/Versions/  
  8.      2.5/lib/python2.5/pickle.py", line 224, in dump  
  9.      self.save(obj)  
  10.   File "/Library/Frameworks/Python.framework/Versions/  
  11.      2.5/lib/python2.5/pickle.py", line 306, in save  
  12.      rv = reduce(self.proto)  
  13.   File "/Library/Frameworks/Python.framework/Versions/  
  14.      2.5/lib/python2.5/copy_reg.py", line 69, in _reduce_ex  
  15.      raise TypeError, "can't pickle %s objects" % base.__name__  
  16. TypeError: can't pickle partial objects 


如果只需要在某一特定环境中检查组件行为,那么测试函数和更传统的测试类都可以满足需要。但是,如果要执行一系列测试,它们基本相同,只有一些参数有差异,那么怎么办?

为了更容易实现这种测试,避免多次复制并粘贴测试函数以及设置惟一的名称,py.test 和 nose 都支持衍生测试generative test)。这里的思想是,您提供一个测试函数,它实际上是一个迭代器,然后使用它的 yield 语句并提供调用参数,从而返回一系列函数。例如,如果希望针对一系列 Web 浏览器运行一个测试,可以编写下面这样的代码:

对于衍生Python测试,py.test 更方便。因此您能够更加轻松的分辨出正在运行的测试,并在一个或多个测试失败时理解测试报告,在每个元组中提供的第一项可以是一个名称,它会作为测试名称的组成部分输出:

  1. Traceback (most recent call last):  
  2.   File "test_partial_pickle.py", line 12, in <module> 
  3.     s = pickle.dumps(partial(add, 10))  
  4.   File "/Library/Frameworks/Python.framework/Versions/  
  5.      2.5/lib/python2.5/pickle.py", line 1366, in dumps  
  6.      Pickler(file, protocol).dump(obj)  
  7.   File "/Library/Frameworks/Python.framework/Versions/  
  8.      2.5/lib/python2.5/pickle.py", line 224, in dump  
  9.      self.save(obj)  
  10.   File "/Library/Frameworks/Python.framework/Versions/  
  11.      2.5/lib/python2.5/pickle.py", line 306, in save  
  12.      rv = reduce(self.proto)  
  13.   File "/Library/Frameworks/Python.framework/Versions/  
  14.      2.5/lib/python2.5/copy_reg.py", line 69, in _reduce_ex  
  15.      raise TypeError, "can't pickle %s objects" % base.__name__  
  16. TypeError: can't pickle partial objects 

在设计和编写测试套件时,一个大问题是如何处理共同的 setup 和 teardown 代码。许多真实的测试并不像本文给出的示例函数这么简单;它们必须执行一些复杂的操作,比如在Python测试中打开网页并单击 “Continue” 按钮,然后检查结果。在开始实际测试比如打开页面并单击按钮)之前,测试必须先完成一些步骤。

现在,考虑如果一百个功能性测试都要这样执行测试,会怎么样。它们都需要通过调用共同的 setup 例程运行 Firefox,然后才能执行自己的测试。与此相应,为了取消 setup 所做的操作,可能还有 teardown 。在设计和编写测试套件时,一个大问题是如何处理共同的 setup 和 teardown 代码。许多真实的测试并不像本文给出的示例函数这么简单;

它们必须执行一些复杂的操作,比如在 Firefox 中打开网页并单击 “Continue” 按钮,然后检查结果。在开始实际测试比如打开页面并单击按钮)之前,测试必须先完成一些步骤。

  1. 漫谈Python 源代码编制技巧
  2. 简单易于操作的Python 工具详解
  3. 有关Python应用领域进行说明介绍
  4. PythonAndroid面向对象的编程——Python应用程序
  5. 如何使用Python模块解析配置文件 ?

相关内容

    暂无相关文章

评论关闭