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 )

  • 相关阅读:
    函数表达式
    BOM
    让超出容器高度的内容滚动显示但不出现滚动条
    插件书写示例
    php中redis的安装
    日常工作bug总结
    pip freeze requirements.txt命令迁移模块
    Django18-中间件和cache实现限制用户访问频率
    Django17-文件上传下载
    Django16-cache缓存
  • 原文地址:https://www.cnblogs.com/zerotest/p/13546503.html
Copyright © 2011-2022 走看看