• 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 )

  • 相关阅读:
    CentOS
    Ubuntu
    Ubuntu
    Ubuntu
    2020-10-12 分享——Bigdata & ML Development WITH SCALA/python & SPARK (待续)
    postgresql 自增列 初始值设置
    白话布隆过滤器BloomFilter(转发)
    Typora ---一款简洁的Markdown编辑器
    postman —— API测试工具 && HTTP请求 (filddler 同类)
    K8S —— 学习资料(待看)
  • 原文地址:https://www.cnblogs.com/zerotest/p/13546503.html
Copyright © 2020-2023  润新知