python测试框架

nose

nose 项目是于 2005 年发布的,也就是 py.test 改名后的一年。它是由 Jason Pellerin 编写的,支持与 py.test 相同的测试习惯做法,但是这个包更容易安装和维护。尽管 py.test 在某些方面有所进步,目前也很容易安装,但是 nose 仍然保持了易用性方面的声誉。

nose不是python自带模块,需要用pip安装

pip install nose

nose相关执行命令:

1、 nosetests –h查看所有nose相关命令

2、 nosetests –s执行并捕获输出

3、 nosetests –with-xunit输出xml结果报告

4、 nosetests -v: 查看nose的运行信息和调试信息

5、 nosetests -w 目录:指定一个目录运行测试

nose 特点:

a) 自动发现测试用例(包含[Tt]est文件以及文件包中包含test的函数)

b) 以test开头的文件

c) 以test开头的函数或方法

d) 以Test开头的类

经过研究发现,nose会自动识别[Tt]est的类、函数、文件或目录,以及TestCase的子类,匹配成功的包、任何python的源文件都会被当做测试用例。

example1.py

class Testclass:

    def __init__(self):
        pass

    def setup(self):
        print 'start'

    def teardown(self):
        print 'stop'

    def testfunc1(self):
        print 'this is case1'

    def testfunc2(self):
        print 'this is case2'

    def testfunc3(self):
        print 'this is case3'

这里写图片描述

example2.py

# encoding:utf-8  
import testtools  


class TestSetUp(testtools.TestCase):  

    @classmethod  
    def setUp(cls):  
        print "setUp running"  

    @classmethod  
    def setUpClass(cls):  
        print "setUpClass running"  

    @classmethod  
    def tearDown(cls):  
        print "teardown running"  

    @classmethod  
    def tearDownClass(cls):  
        print "teardownclass running"  

    def test_func1(self):  
        print "func1 running"  

    def test_func2(self):  
        print "func2 running"  

    def test_func3(self):  
        print "func3 running"  

执行步骤:setupClass –> setup –>testfunc–>teardown –>setup –>testfunc–>teardown …
setUpclass相当于全局的前置条件,teardownclass相当于全局的后置条件,setUp相当于每个用例的前置条件,teardown相当于每个用例的后置条件。

py.test

pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它具有如下特点:
非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
能够支持简单的单元测试和复杂的功能测试
支持参数化
执行测试过程中可以将某些测试跳过,或者对某些预期失败的case标记成失败
支持重复执行失败的case
支持运行由nose, unittest编写的测试case
具有很多第三方插件,并且可以自定义扩展
方便的和持续集成工具集成

编写pytest测试样例

编写pytest测试样例非常简单,只需要按照下面的规则(和nose类似):
测试文件以test_开头(以_test结尾也可以)
测试类以Test开头,并且不能带有 init 方法
测试函数以test_开头
断言使用基本的assert即可

example.py

#coding=utf-8
import pytest

# 功能函数
def multiply(a,b):
    return a * b

class TestUM:

    # =====fixtures========

    def setup(self):
        print ("setup----->")

    def teardown(self):
        print ("teardown-->")

    def setup_class(cls):
        print ("\n")
        print ("setup_class=========>")

    def teardown_class(cls):
        print ("teardown_class=========>")

    def setup_method(self, method):
        print ("setup_method----->>")

    def teardown_method(self, method):
        print ("teardown_method-->>")

    # =====测试用例========

    def test_numbers_5_6(self):
        print 'test_numbers_5_6'
        assert multiply(5,6) == 30 

    def test_strings_b_2(self):
        print 'test_strings_b_2'
        assert multiply('b',2) == 'bb'

setup_class/teardown_class 在当前测试类的开始与结束执行。

setup/treadown 在每个测试方法开始与结束执行。

setup_method/teardown_method 在每个测试方法开始与结束执行,与setup/treadown级别相同。

执行pytest测试样例

执行测试样例的方法很多种,上面第一个实例是直接执行py.test,第二个实例是传递了测试文件给py.test。其实py.test有好多种方法执行测试:

command desc
py.test run all tests below current dir
py.test test_mod.py run tests in module
py.test somepath run all tests below somepath
py.test test_mod.py::test_func will select only test_func in test_mod.py
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页