对Python测试问题全解析

开发 后端
Python测试的优点只是可以与 .NET 框架互操作。这里仍然有许多缺陷,主要由于实现还不成熟而导致。但这确实只是时间的问题。

在向大家详细介绍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模块解析配置文件 ?
责任编辑:chenqingxiang 来源: IT专家网
相关推荐

2010-03-03 17:43:12

Android系统

2010-02-06 17:17:17

Android手机

2010-02-22 10:18:29

Python代码

2010-03-01 14:28:46

Python进程

2010-02-02 13:32:32

Python继承

2010-02-03 17:52:11

Python 2.0

2014-01-09 09:24:32

Linux渗透测试渗透测试

2010-02-23 15:29:43

Python 编辑器

2010-03-03 14:51:02

Android手机

2010-01-27 09:31:39

C++Test测试

2010-02-07 15:42:46

Android单元测试

2010-02-05 14:54:56

Android UI

2010-01-05 14:37:39

JSON POST

2010-03-04 16:38:37

Android开发技巧

2010-03-03 13:43:46

Android手机系统

2009-12-15 14:49:23

VS 2005开发界面

2020-03-23 09:56:50

软件测试面试技术

2010-01-22 14:41:46

C++Test

2010-02-04 16:03:40

Android传感器

2010-02-07 10:21:27

Android应用程序
点赞
收藏

51CTO技术栈公众号