python之测试

16.1先测试 后编码

16.1.1 精确的需求说明

16.1.2 为改变而计划

覆盖度是测试知识中重要的部分。,优秀的测试程序组的目标之一是拥有良好的覆盖度,实现这个目标的方法之一是使用覆盖度工具

16.2测试工具

其中有两个很棒的模块可以协助你自动完成测试过程:

1.unitest:通用测试框架

2.doctest:简单一些的模块,是检查文档用的,但是对于编写单元测试也很在行。

16.2.1 doctest

例如 假设求数字平方的函数,并且在文档字符串中添加了一个例子

def square(x):

Squares a number and returns the result.

>>>square(2)

4

>>>square(3)

9

...

return x*x

文档字符串中也包括了一些文本。这和测试又有什么关系?假设square函数定义在my_math模块中。

if __name__==‘__main__‘:

import doctest,my_math

doctest.testmod(my_math)

可以只导入doctest和my_math模块本身,然后运行doctest中的testmod函数。

$python my_math_.py

16.2.2 unitest

使用unittest框架的简单测试

import unittest,my_math

class ProductTestCase(unittest.TestCase):

def testIntegers(self):

for x in xrange(-10,10):

for y in xrange(-10,10):

p = my_math.product(x,y)

self.failUnless(p == x*y,‘Integer multiplication failed‘)

def testFloats(self):

for x in xrange(-10,10):

for y in xrange(-10,10):

x = x/10.0

y = y/10.0

p = my_math.product(x,y)

self.failUnless(p == x*y,‘Float multiplication failed‘)

if __name__ == ‘__main__‘:unittest.main()

unittest.main函数负责运行测试。它会实例化所有TestCase子类,运行所有名字以test开头的方法。

如果定义了叫做setUP和tearDown的方法,它们就会在运行每个测试方法之前和之后执行,这样就可以用这些方法为所有测试提供一般的初始化和清理代码,这被称为测试夹具。

unittest模块会区分由异常引发的错误和调用failUnless等函数而导致的失败。下一步就是编写概要代码,这样一来就没错误---只有失败。这就意味着要创建一个包含下列内容的模块my_math。

def product(x,y):

pass

下一步让测试代码工作

def product(x,y):

return x * y

接下来修改product函数,让它针对特定的数值7和9失败。

def product(x,y):

if x==7 and y==9:

return ‘An insidious bug has surfaced!‘

else:

return x * y

16.3.1 使用PyChecker和PyLint检查源代码

pychecker file.py

pylint module

PyChecker和PyLint都可以作为模块导入,但是两者并不是真正为程序设计的。当导入pychecker.checker时,它会检查之后的代码,并且在标准输出中打印警告。pylint.lint模块有个叫做Run的非文档记录型函数,可以在pylint脚本本身中使用。

使用subprocess模块调用外部检查模块

import unittest,my_math

from subprocess import Popen,PIPE

class ProductTestCase(unittest.TestCase):

def testWithPyCheck(self):

cmd = ‘pychecker‘,‘-Q‘,my_math.__file__.rstrip(‘c‘)

pychecker = Popen(cmd,stdout=PIPE,stderr=PIPE)

self.assertEqual(pychecker.stdout.read(),‘‘)

def testWithPyLint(self):

cmd = ‘pylint‘,‘-rm‘,‘my_math‘

pylint = Popen(cmd,stdout=PIPE,stderr=PIPE)

self.assertEqual(pylint.stdout.read(),‘‘)

if __name__ == ‘__main__‘:unittest.main()

上面已经给出了检查程序的几个命令行开关,以避免无关的输出干扰测试:对于pychecker来说,提供了-Q选项,而对于pylint,我提供了-rn(n意为no)关闭报告,也就是说只显示警告和错误。这里使用了assertEqual函数以便使从stdout特性读取的真正输出显示在unittest的失败信息中。

pylint命令会直接同给定名称的模块一起运行,所以简单多了。为了能让pycheck工作正常,我们还能获取一个文件名。使用my_math模块的__file__属性获取这个值,用rstrip剔除任何文件名末尾中可能出现的字符c。

为了能让PyLint不出现错误,我忽略重写了my_math模块。

"""

A simple math module

"""

__revision__ = ‘0.1‘

def product(factor1,factor2):

‘The product of two numbers‘

return factor1 * factor2

16.3.2 分析

标准库中已经包含了一个叫做profile的分析模块。使用分析程序非常简单,是要使用字符串参数调用它的run方法就行了

>>>import profile

>>>from my_math import product

>>>profile.run(‘product(1,2)‘)

如果提供了文件名,比如‘my_math.profile‘作为第二个参数来运行,那么结果就会保存到文件中。可以在之后使用pstats模块检查分析结果:

>>>import pstats

>>>p = pstats.Stats(‘my_math.profile‘)

时间: 2024-10-25 00:37:19

python之测试的相关文章

python生成测试图片

直接代码 1 import cv2.cv as cv 2 saveImagePath = 'E:/ScreenTestImages/' 3 4 colorRed = [0,0,255] 5 colorGreen = [0,255,0] 6 colorBlue = [255,0,0] 7 colorWhite = [255,255,255] 8 colorBlack = [0,0,0] 9 colorAqua = [255,255,0] 10 colorFuchsia = [255,0,255]

Jenkins自动化构建python nose测试

简介 通过Jenkins自动化构建python nose测试分两步: 1. 创建节点(节点就是执行自动化测试的机器): 2. 创建任务并绑定节点(用指定的机器来跑我们创建的任务,这里我们选择执行一段脚本). 创建节点 1. 登录jenkins平台,在左侧的节点中随便找一个节点点进去,然后在导航栏点击“nodes”-->点击“创建节点”-->输入“节点名称”-->选择“Permanent Agent”-->点击“OK”: 2. 指定jenkins的工作目录,随便指定-->点击“

Python渗透测试工具合集

Python渗透测试工具合集 如果你热爱漏洞研究.逆向工程或者渗透测试,我强烈推荐你使用 Python 作为编程语言.它包含大量实用的库和工具, 本文会列举其中部分精华. 网络 Scapy, Scapy3k: 发送,嗅探,分析和伪造网络数据包.可用作交互式包处理程序或单独作为一个库. pypcap, Pcapy, pylibpcap: 几个不同 libpcap 捆绑的python库 libdnet: 低级网络路由,包括端口查看和以太网帧的转发 dpkt: 快速,轻量数据包创建和分析,面向基本的

由 '' in 'abc' return True 引发的思考----Python 成员测试操作

最近遇到判断字典中是否存在空字符串'',这个很好判断,直接用:'' in ['a','b','c'],就可以直接判断出来:但是当我对字符串使用 "in" 方法进行判断的时候,发现:'' in 'abc' 仍然会返回True,对于这个问题,之前一直没有注意到过其中的原理,现在去进行探索总结一下: 首先,查看官方文档:https://docs.python.org/2/reference/expressions.html#not-in 文档在5.9.2中:Membership test o

python环境测试MySQLdb、DBUtil、sqlobject性能

python环境测试MySQLdb.DBUtil.sqlobject性能 首先介绍下MySQLdb.DBUtil.sqlobject: (1)MySQLdb 是用于Python连接Mysql数据库的接口,它实现了 Python 数据库API 规范 V2.0,基于 MySQL C API 上建立的.除了MySQLdb外,python还可以通过oursql, PyMySQL, myconnpy等模块实现MySQL数据库操作: (2)DBUtil中提供了几种连接池,用以提高数据库的访问性能,例如Poo

接口自动化:Jenkins 自动构建python+nose测试

参考: http://www.cnblogs.com/LanTianYou/p/6559916.html#_label1 http://blog.csdn.net/limm33/article/details/51191263 通过Jenkins自动化构建python nose测试分两步: 1. 创建节点(节点就是执行自动化测试的机器): 2. 创建任务并绑定节点(用指定的机器来跑我们创建的任务,这里我们选择执行一段脚本) 1,创建节点: jenkins->系统管理->管理节点->新增节

玩转python之测试一个对象是否是类字符串

提到类型测试,我首先想到python中“鸭子类型”的特点,所谓鸭子类型,即如果它走路像鸭子,叫声也像鸭子, 那么对于我们的应用而言,就可以认为它是鸭子了!这一切都是为了功能复用. 我们总是需要测试一个对象,尤其是当写一个函数或者方法时,经常需要测试传入的参数是否是一个字符串: 下面这个方法利用了内建的isinstance和basestring来简单快速检查某个对象是否是字符串或者Unicode对象: def is_string(anobj): return isinstance(anobj, b

老司机带你用vagrant打造一站式python开发测试环境

前言 作为一个学习和使用Python的老司机,好像应该经常总结一点东西的,让新司机尽快上路,少走弯路,然后大家一起愉快的玩耍. 今天,咱们就使用vagrant配合xshell打造一站式Python开发测试环境. 目的 让你在Windows下,也能愉快的使用Linux环境调试Python. 适用人群:Python新手和希望在Windows下使用Linux环境调试Python的小伙伴们. 难度:super easy 最终效果:只用一个xshell终端(其他类似的都可以),启动ubuntu虚拟机,py

python nose测试框架全面介绍六--框架函数别名

之前python nose测试框架全面介绍二中介绍了nose框架的基本构成,但在实际应该中我们也会到setup_function等一系列的名字,查看管网后,我们罗列下nose框架中函数的别名 1.package中写在__init__.py中的函数 setup_package 用setup, setUp, or setUpPackage也可以 teardown_package 用teardown, tearDown, or tearDownPackage也可以 2.函数形式组成的用例 setup_

python nose测试框架全面介绍七--日志相关

引: 之前使用nose框架时,一直使用--logging-config的log文件来生成日志,具体的log配置可见之前python nose测试框架全面介绍四. 但使用一段时间后,发出一个问题,生成的报告只有错误提示,没有日志,查看nose的官网,nose默认支持将日志显示的,如下: 脚本如下: #coding:utf-8 ''' Created on 2016年6月22日 @author: huzq ''' import logging from test_case import new fr