zoukankan      html  css  js  c++  java
  • unittest单元测试框架教程4discover命令运行多个测试脚本

    当我们有多个测试脚本时,使用python -m unittest会搜索当前目录运行所有脚本,我们建造多个文件,使用不同的测试方法。

    '''jisuanqi.py'''

    def jiafa(a,b):
    if type(a) is str or type(b) is str:
    return str(a) + str(b)
    return a+b

    def chengfa(a,b):
    if type(a) is str or type(b) is str:
    return 0
    return a*b

    '''testjiafa.py'''

    import unittest
    import ddt
    from jisuanqi import *

    testdata = [{'a':1,'b':1,'jiafa':2,'chengfa':1},
    {'a':'a','b':1,'jiafa':'a1','chengfa':'a'},
    {'a':'a','b':'b','jiafa':'ab','chengfa':'ab'}]

    @ddt.ddt
    class TestMath(unittest.TestCase):
    def setUp(self):
    pass

    def tearDown(self):
    pass

    @ddt.data(*testdata)
    def test_jiafa(self,data):
    '''测试加法程序'''
    try:
    self.assertEqual(jiafa(data['a'],data['b']),data['jiafa'])
    print(str(data['a']) + '+' + str(data['b']) + '=' + str(data['jiafa']))
    except Exception as e:
    print(str(data['a']) + '+' + str(data['b']) + '=' + str(data['jiafa'] + ' X'))
    raise e

    if __name__ == '__main__':
    unittest.main()
    '''testchengfa.py'''
    
    import unittest
    import ddt
    from jisuanqi import *
    
    testdata = [{'a':1,'b':1,'jiafa':2,'chengfa':1},
                {'a':'a','b':1,'jiafa':'a1','chengfa':'a'},
                {'a':'a','b':'b','jiafa':'ab','chengfa':'ab'}]
    
    @ddt.ddt
    class TestMath(unittest.TestCase):
        def setUp(self):
            pass
    
        def tearDown(self):
            pass
    
        @ddt.data(*testdata)
        def test_chengfa(self,data):
            '''测试乘法程序'''
            try:
                self.assertEqual(chengfa(data['a'],data['b']),data['chengfa'])
                print(str(data['a']) + '*' + str(data['b']) + '=' + str(data['chengfa']))
            except Exception as e:
                print(str(data['a']) + '*' + str(data['b']) + '=' + str(data['chengfa'] + ' X'))
                raise e
    
    if __name__ == '__main__':
        unittest.main()

    在同一目录创建runner.py

    import unittest
    
    testsuite = unittest.TestLoader().discover('./')
    runner = unittest.TextTestRunner()
    runner.run(testsuite)

    相当于python -m unittest discover

    通过从指定的起始目录递归到子目录中,找到所有测试模块,然后返回包含它们的TestSuite对象。

    运行查看结果

    .FF...
    ======================================================================
    FAIL: test_chengfa_2 (testchengfa.TestMath)
    测试乘法程序
    ----------------------------------------------------------------------
    Traceback (most recent call last):
    File "D:\PycharmProjects\unitest\venv\lib\site-packages\ddt.py", line 182, in wrapper
    return func(self, *args, **kwargs)
    File "D:\PycharmProjects\unitest\testchengfa.py", line 27, in test_chengfa
    raise e
    File "D:\PycharmProjects\unitest\testchengfa.py", line 23, in test_chengfa
    self.assertEqual(chengfa(data['a'], data['b']), data['chengfa'])
    AssertionError: 0 != 'a'

    ======================================================================
    FAIL: test_chengfa_3 (testchengfa.TestMath)
    测试乘法程序
    ----------------------------------------------------------------------
    Traceback (most recent call last):
    File "D:\PycharmProjects\unitest\venv\lib\site-packages\ddt.py", line 182, in wrapper
    return func(self, *args, **kwargs)
    File "D:\PycharmProjects\unitest\testchengfa.py", line 27, in test_chengfa
    raise e
    File "D:\PycharmProjects\unitest\testchengfa.py", line 23, in test_chengfa
    self.assertEqual(chengfa(data['a'], data['b']), data['chengfa'])
    AssertionError: 0 != 'ab'

    ----------------------------------------------------------------------
    Ran 6 tests in 0.002s

    FAILED (failures=2)
    1*1=1
    a*1=a X
    a*b=ab X
    1+1=2
    a+1=a1
    a+b=ab

    Process finished with exit code 0

    python -m unittest 与 python -m unittest discover 等价。如果你需要向探索性测试传入参数,必须显式地使用 discover 子命令。

    discover参数:

    -v--verbose

    更详细地输出结果。

    (venv) D:\PycharmProjects\unitest>python -m unittest discover -v
    test_chengfa_1 (testchengfa.TestChengfa)
    测试乘法程序 ... 1*1=1
    ok
    test_chengfa_2 (testchengfa.TestChengfa)
    测试乘法程序 ... a*1=a X
    FAIL
    test_chengfa_3 (testchengfa.TestChengfa)
    测试乘法程序 ... a*b=ab X
    FAIL
    test_jiafa_1 (testjiafa.TestJiafa)
    测试加法程序 ... 1+1=2
    ok
    test_jiafa_2 (testjiafa.TestJiafa)
    测试加法程序 ... a+1=a1
    ok
    test_jiafa_3 (testjiafa.TestJiafa)
    测试加法程序 ... a+b=ab
    ok

    ======================================================================
    FAIL: test_chengfa_2 (testchengfa.TestChengfa)
    测试乘法程序
    ----------------------------------------------------------------------
    Traceback (most recent call last):
    File "D:\PycharmProjects\unitest\venv\lib\site-packages\ddt.py", line 182, in wrapper
    return func(self, *args, **kwargs)
    File "D:\PycharmProjects\unitest\testchengfa.py", line 27, in test_chengfa
    raise e
    File "D:\PycharmProjects\unitest\testchengfa.py", line 23, in test_chengfa
    self.assertEqual(chengfa(data['a'], data['b']), data['chengfa'])
    AssertionError: 0 != 'a'

    ======================================================================
    FAIL: test_chengfa_3 (testchengfa.TestChengfa)
    测试乘法程序
    ----------------------------------------------------------------------
    Traceback (most recent call last):
    File "D:\PycharmProjects\unitest\venv\lib\site-packages\ddt.py", line 182, in wrapper
    return func(self, *args, **kwargs)
    File "D:\PycharmProjects\unitest\testchengfa.py", line 27, in test_chengfa
    raise e
    File "D:\PycharmProjects\unitest\testchengfa.py", line 23, in test_chengfa
    self.assertEqual(chengfa(data['a'], data['b']), data['chengfa'])
    AssertionError: 0 != 'ab'

    ----------------------------------------------------------------------
    Ran 6 tests in 0.006s

    FAILED (failures=2)

    -s--start-directory

    开始进行搜索的目录(默认值为当前目录 . )

    -p--pattern

    用于匹配测试文件的模式(默认为 test*.py )

  • 相关阅读:
    WebService又一个不爽的地方
    [biztalk笔记]1.Hello World!
    Flex4中使用HDividedBox,VDividedBox
    Flex:地图缩放平移效果(简易版)
    asp.net webform中submit按钮使用不当很容易犯的一个错误
    Silverlight Telerik控件学习:带CheckBox复选框的树形TreeView控件
    oracle odp.net 32位/64位版本的问题
    asmx迷10分钟升级成wcf熟手指南
    如何克制求知欲或好奇心
    随手小记:快速适应未必是个好策略
  • 原文地址:https://www.cnblogs.com/zerotest/p/13546503.html
Copyright © 2011-2022 走看看