Python软件测试理论

[学习笔记]Python单元测试框架-unittest-实例

2017-03-07  本文已影响1123人  CC先生之简书

让我们用官网上的一个简单的例子来先看看Unittest的使用方式:

import unittest

class TestStringMethods(unittest.TestCase):

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())

    def test_split(self):
        s = 'hello world'
        self.assertEqual(s.split(), ['hello', 'world'])
        # check that s.split fails when the separator is not a string
        with self.assertRaises(TypeError):
            s.split(2)

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

接下来我们再看一个例子,现在有一个测试的类calculator.py:

class Count:

    def __init__(self,a,b):
        self.a = int(a)
        self.b = int(b)

    # 加法
    def add(self):
        return self.a + self.b

    # 减法
    def sub(self):
        return self.a - self.b

    # 乘法
    def mul(self):
        return self.a * self.b

    # 加法
    def div(self):
        return self.a / self.b

如果我们想对里面的4个函数进行测试,下面是用unittest框架写出来的代码:

from Unittest.calculator import Count
import unittest

class TestCount(unittest.TestCase):
    #测试的初始化
    def setUp(self):
        print("test start")

    #测试用例add的编写
    def test_add(self):
        self.Count = Count(2, 3)
        self.assertEqual(self.Count.add(),5)

    # 测试用例sub的编写
    def test_sub(self):
        self.Count = Count(6, 3)
        self.assertEqual(self.Count.sub(), 3)

    # 测试用例mul的编写
    def test_mul(self):
        self.Count = Count(6, 3)
        self.assertEqual(self.Count.mul(), 18)

    # 测试用例div的编写
    def test_div(self):
        self.Count = Count(6, 3)
        self.assertEqual(self.Count.div(), 2)

    #测试的回收-测试的环境还原
    def tearDown(self):
        print("test end")

if __name__ == "__main__":
# 构造测试集
    suite = unittest.TestSuite()
    suite.addTest(TestCount("test_add"))
    suite.addTest(TestCount("test_sub"))
    suite.addTest(TestCount("test_mul"))
    suite.addTest(TestCount("test_div"))


# 测试
    runner =unittest.TextTestRunner()
    runner.run(suite)
state.png

从上图可以看出整个书写Unittest的流程为:首先是要写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中,整个过程集成在unittest.main模块中。


在上面的例子中,我们已经将相似的功能放到了同一个类中,如果我们将相似的功能放到同一个文件中时,可能就会有以下的结构方式:

testcount/

|-count.py

|-testadd.py

|-testsub.py

|-testmul.py

|-testdiv.py

|-runtest.py

当有多个测试用例需要运行,需要添加新的用例时就可以到相应的文件中去添加,但是此时的runtest.py文件中通过addTest()来添加/删除测试用例还是会很麻烦,Unittest中有个功能可以很好的解决这个问题,这个方式就是discover(),此方法是来自于TestLoader.discover()

discover(start_dir, pattern='test*.py', top_level_dir=None)

现在通过discover()方法重新实现runtest.py文件的功能。

import unittest
#定义测试用例的目录为当前目录
test_dir ='./'
discover= unittest.defaultTestLoader.discover(test_dir,pattern='test*.py')

编写Web测试用例

以一个查询的具体的单元测试用例为实例,目录如下:

unittest.png
.C:\Program Files\Python35-32\lib\site-packages\selenium\webdriver\remote\webdriver.py:585: DeprecationWarning: use driver.switch_to.alert instead
  warnings.warn("use driver.switch_to.alert instead", DeprecationWarning)
.
----------------------------------------------------------------------
Ran 2 tests in 27.463s

OK

最终代码可参见:http://git.oschina.net/ccsensei/gittest

上一篇 下一篇

猜你喜欢

热点阅读