python unittest单元测试框架中,如何对一个testcase参数化,具体如何实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python unittest单元测试框架中,如何对一个testcase参数化,具体如何实现相关的知识,希望对你有一定的参考价值。



图中,我如果要对其中的url、account、password进行参数化,如何进行

#首先pyunit不像junit一样支持参数化测试。。。不过不是不能实现,只是pyunit的作者想让#这个东西变得尽量简单。所以不去实现。当然这个pyhon语言足够动态,你可以自己去实现

#外部输入参数测试。

import unittest
class ParametrizedTestCase(unittest.TestCase):
    """ TestCase classes that want to be parametrized should
        inherit from this class.
    """
    def __init__(self, methodName='runTest', param=None):
        super(ParametrizedTestCase, self).__init__(methodName)
        self.param = param
    @staticmethod
    def parametrize(testcase_klass, param=None):
        """ Create a suite containing all tests taken from the given
            subclass, passing them the parameter 'param'.
        """
        testloader = unittest.TestLoader()
        testnames = testloader.getTestCaseNames(testcase_klass)
        suite = unittest.TestSuite()
        for name in testnames:
            suite.addTest(testcase_klass(name, param=param))
        return suite


#####################################################

##用法-testcase
class TestOne(ParametrizedTestCase):
    def test_something(self):
        print 'param =', self.param
        self.assertEqual(1, 1)

    def test_something_else(self):
        self.assertEqual(2, 2)
        
##用法-测试
suite = unittest.TestSuite()
suite.addTest(ParametrizedTestCase.parametrize(TestOne, param=42))
suite.addTest(ParametrizedTestCase.parametrize(TestOne, param=13))
unittest.TextTestRunner(verbosity=2).run(suite)

#结果
test_something (__main__.TestOne) ... param = 42
ok
test_something_else (__main__.TestOne) ... ok
test_something (__main__.TestOne) ... param = 13
ok
test_something_else (__main__.TestOne) ... ok

----------------------------------------------------------------------
Ran 4 tests in 0.000s

OK

 当然最好的方法就是用别人写的东西。。。

https://github.com/taykey/nose-ittr

这个拿去,不谢

参考技术A __init 。这个题我是想测试一下的

python单元测试之unittest

 

什么是单元测试?
单元测试负责最小的软件测试单元(模块)进行验证,它使用软件设计文档中对模块的描述作为指南,对重要的程序分支进行测试以发现模块中的错误。

python拥有诸多单元测试框架,如doctest、unittest、pytest、nose等,其中最常用就是python自带的unittest框架(也被称为PyUnit框架),Python2.1及其以后的版本已将unittest作为标准模块放入python开发中。

基本框架代码如下

技术图片
import unittest
 
class Test(unittest.TestCase):
 
    def setUp(self):
        print(‘hello‘)
 
    def tearDown(self):
        print(‘bye‘)
 
    def test_001(self):
        print(‘001‘)
 
    def test_002(self):
        print(‘002‘)
 
    def test_003(self):
        print(‘003‘)
 
    def func(self):
        print(‘func‘)
 
if __name__ == ‘__main__‘:
    unittest.main()
技术图片

1.引入unittest模块,创建一个类A继承unittest的TestCase类,我们可以将A类看成是对待特定类的测试的集合
2.setup() 方法用于测试用例执行前的初始化工作
3.teardown() 方法用于测试用例执行之后的善后工作
4.unittest提供了全局main()方法,使用它可以方便地将一个单元测试模块变成可以直接运行的测试脚本
5.main()方法使用TestLoader类来搜索所有包含在模块以”test”命名开头的测试方法,并自动执行它们

四个基本概念
1.Test Fixture
测试用例环境的搭建和销毁,就是一个fixture,通过setUp()方法来实现数据的初始化建立以及环境准备,通过tearDown()方法清除数据结束测试。

2.TestCase
一个TestCase的实例就是一个测试用例,测试用例就是一个完整的测试流程,包括测试前的准备环境搭建,包括测试前的准备环境搭建(setUp)、实现测试过程的代码(run),以及测试以后环境的还原(tearDown)。


3.Test Suite

一个功能的验证是需要多个测试用例,可把多个测试用例集合起来执行,这就产生了测试套件TestSuite的概念,Test Suite用来组装单个测试用例,可以通过addTest加载TestCase到TestSuite中,从而返回一个TestSuite实例


4.Test Runner
在unittest单元测试框架中,通过TestTextRunner类提供的run()方法来执行测试用例。

以上是关于python unittest单元测试框架中,如何对一个testcase参数化,具体如何实现的主要内容,如果未能解决你的问题,请参考以下文章

python unittest单元测试框架中,如何对一个testcase参数化,具体如何实现

python+requests随笔:unittest框架

Python 中 unittest 单元测试框架中需要知识点

Python必会的单元测试框架 —— unittest

python+selenium+unittest测试框架1-unittest单元测试框架和断言

python单元测试之unittest