浅析Python 测试框架进程配置

开发 后端
Python 测试框架可以充分提供简洁的习惯做法和统一的测试技术,对于那些从来没有学习过编程或者并非计算机专业的编程学习者而言,Python语言是最好的选择之一。

对于一些从事项目开发的开发人员就像是早期的拾荒者,他们需要以一种统一的方式在大型代码基上发现和运行测试,为了开发Python 测试框架,这个Python 测试框架现在仍然得到广泛使用。

目前,测试的运行频率越来越高了。许多团队已经采用了连续测试,也就是对团队版本控制系统的每次签入(check-in)都要运行项目测试。随着测试驱动开发方法越来越流行。

许多开发人员在开始编写新模块的代码之前先为模块编写和运行测试。如果测试的运行时间很长,就会严重影响开发人员的生产力。因此,用尽可能多的计算能力运行测试是很有益处的。

对于小规模项目,这可能意味着使用计算机的所有 CPU 核运行多个测试进程。对于更大的项目,要配置完整的测试计算机群,要么使用专用服务器并行地运行测试,要么使用所有开发人员工作站的空闲时间。

在并行和分布式测试方面,本文讨论的三种测试框架有非常显著的差异:zope.testing 命令行有一个 -j 选项,它指定应该启动多个测试进程,而不是在同一进程中执行所有测试。因为每个进程可以在不同的 CPU 核上运行,所以如果在有四个 CPU 的计算机上运行 -j 4,就可以同时用四个 CPU 运行测试。

nose 项目报告说,他们已经把对并行测试的支持提交到项目 trunk,但是一般用户要等到下一个版本才能试用这个特性。py.test 工具支持一个多处理选项 (-n),可以像 zope.testing 一样在多个 CPU 核上运行测试。另外,它还提供管理工具,可以在整个测试服务器群中分布测试。

在这三种框架中,py.test 看起来在并行测试方面明显领先了。可以指定多个 --tx 选项,每个选项描述要运行测试的一个环境或远程服务器。而且,它实际上支持针对两个完全不同的原因分布测试!在使用 --dist=load 时,它将使用服务器群按照传统方式在多台计算机上运行测试,从而减少测试花费的时间。

但是,在使用 dist=each 时,它的做法就比较复杂了;它确保每个测试在 py.test 可用的每个测试环境中运行。这意味着 py.test 可以同时在多个 Python 解释器版本和多个操作系统上运行测试。因此,如果项目支持多个平台。

希望测试解决方案能够自动地支持多平台,而不需要通过编写脚本把测试复制到不同的平台并运行它们,那么 py.test 的这个特性是非常吸引人的。定制和可扩展性这三种测试框架都为单独的用户和整个项目提供定制能力,可以根据需要选择测试框架的行为和选项。

在 Zope 包中,指定默认选项的 buildout 常常调用 zope.testing 模块。这意味着运行测试的开发人员会得到统一的结果集。但是,如果在项目级上选择的行为无法满足他们的需要,他们仍然可以指定自己的命令行开关。

nose 框架通过用户主目录中的 nose.cfg 或 .noserc 文件支持用户个性化定制,用户可以在这些文件中指定测试结果的显示方式。对于 py.test 和 nose 框架,都可以提供针对整个项目的选项。py.test 框架会在它测试的项目中寻找conftest.py 文件,然后在这个文件中寻找针对整个项目的选项。

比如是否检测并运行 doctest 以及应该使用哪种模式检测测试文件和函数。nose 框架寻找项目范围的setup.cfg 文件(这是提供 Python 测试框架的相关信息的标准方式),然后在其中寻找 [nosetests] 节。

另外,py.test 和 nose 都支持插件,这些用户提供的模块可以安装新的命令行选项和在工具中添加新行为,但是它们提供的配置和能够实现的功能有差异。 在过去,每个 Python 测试框架都使用自己的习惯做法;

采用新一代 Python 测试框架,就能够提供简洁的习惯做法和统一的测试技术。下一篇文章 要开始研究每种框架实现的测试机制,也就是它们用来搜索测试模块和测试文件的技术。请继续阅读下一篇文章。

【编辑推荐】

  1. 有关Python系统文件进行介绍指导
  2. 如何正确的使用Python函数
  3. Python 构建工具进行详细介绍分析
  4. PythonAndroid浅析Python优势所在
  5. 如何使用Python模块解析配置文件?
责任编辑:chenqingxiang 来源: 机械工业出版社
相关推荐

2009-07-14 13:55:24

MyEclipse S

2009-07-21 14:32:51

ASP.NET进程模型

2010-02-23 16:24:47

Visual Stud

2010-02-24 10:39:28

Python虚拟机

2009-07-07 09:38:37

ServletQuer

2009-09-14 16:46:15

LINQ to XML

2009-07-16 09:14:26

iBATIS DAO

2009-09-22 13:09:06

Hibernateorm框架

2010-03-01 17:25:12

Python 测试框架

2009-07-21 11:12:00

iBATIS配置

2009-07-22 14:49:18

ibmdwPython测试

2011-06-14 14:27:43

灰盒测试

2019-09-09 10:03:46

Python 开发编程语言

2009-07-15 14:21:03

MyEclipse S

2011-07-19 13:26:50

iPhone PhoneGap 框架

2021-03-17 21:34:44

Linux内存管理

2010-02-26 17:44:40

Python测试框架

2023-03-22 18:17:49

Python框架测试自动化

2020-05-07 17:30:49

开发iOS技术

2011-12-07 15:21:50

JavaNIO
点赞
收藏

51CTO技术栈公众号