python测试用例示例及执行脚本

run_test.sh内容如下

  • 执行全部用例:./run_test.sh
  • 执行某个文件全部用例: ./run_test.sh 文件名
  • 执行文件中某个测试套全部用例:./run_test.sh 文件名.测试类名
  • 执行某个用例: ./run_test.sh 文件名.测试类名.测试用例名
#!/bin/bash
export PYTHONPATH=$PYTHONPATH:`pwd`/../

strout=""
if [ "$#" -gt "0" ]
then
    echo "*****************************$1*****************************"
            strout=$(python3 -W ignore -m unittest $1 2>&1)
else

    for i in `ls test/test_*`
    do
            echo "*****************************$i*****************************"
            strout=$strout$(python3 -W ignore $i 2>&1)
    done
fi

result=$(echo $strout | grep -i "fail")
echo "$strout"
if [ "$result" != "" ]
then
  exit 1
else
  exit 0
fi

用例写法示例

#! /usr/bin/env python
# coding=utf-8
"""
Copyright (c) Technologies Co., Ltd. 2020-2020. All rights reserved.
Description:测试样例代码
"""
import os
import unittest
from unittest import mock
from test_config import TestFunction
#================================================================
# 布尔断言
# assertEqual(arg1, arg2, msg=None) # 验证arg1=arg2, 不等则fail
# assertNotEqual(arg1, arg2, msg=None) # 验证arg1 != arg2, 相等则fail
# assertTrue(expr, msg=None) # 验证expr是true,如果是false,则fail
# assertFalse(expr, msg=None) # 验证expr是false,如果是true, 则fail
# assertIs(arg1, arg2, msg=None) # 验证arg1、arg2是同一个对象,不是则fail
# assertIsNot(arg1, arg2, msg=None) # 验证arg1、arg2不是同一个对象,是则fail
# assertIsNone(expr, msg=None) # 验证expr是None,不是则fail
# assertIsNotNone(expr, msg=None) # 验证expr不是None,是则fail
# assertIn(arg1, arg2, msg=None) # 验证arg1是arg2的字串,不是则fail
# assertNotIn(arg1, arg2, msg=None) # 验证arg1不是arg2的字串,是则fail
# assertIsInstance(obj, cls, msg=None) # 验证obj是cls的实例,不是则fail
# assertNotIsInstance(obj, cls, msg=None) # 验证obj不是cls的实例,是则fail

# 比较断言
# assertAlmostEqual(first, second, places=7, msg=None, delta=None) # 验证first约等于second, places:指定精确到小数点后多少位的序列号(第一个小数的序列号是0), delta表示first和second之间的差值必须<=delta
# assertNotAlmostEqual(first, second, places=7, msg=None, delta=None) # 验证first不约等于second, places:指定精确到小数点后多少位的序列号(第一个小数的序列号是0)
# assertGreater(first, second, msg = None) # 验证first > second,否则fail
# assertGreaterEqual (first, second, msg = None) # 验证first ≥ second,否则fail
# assertLess (first, second, msg = None) # 验证first < second,否则fail
# assertLessEqual (first, second, msg = None) # 验证first ≤ second,否则fail
# assertRegexpMatches(text, regexp, msg = None) # 验证正则表达式regexp搜索匹配的文本text。 regexp:通常使用re.search()

# 复杂断言
# assertListEqual(list1, list2, msg=None) # 验证list1、list2相等, 不等则fail
# assertTupleEqual(tuple1, tuple2, msg=None) # 验证tuple1、tuple2相等, 不等则fail
# assertSetEqual(set1, set2, msg=None) # 验证set1、set2相等, 不等则fail
# assertDictEqual(expected, actual, msg=None) # 验证expected、actual相等, 不等则fail

# 运行方法
# 方法1:python test_example.py
# 方法2:python -m unittest test_example
#================================================================
class ExampleFunction(object):
    filed = "origin"
    def read_file(self):
        fileList = [1, 2, 3, 4]
        return fileList

    def GetFileNum(self):
        result = self.read_file()
        return len(result)

class TestDataset1(unittest.TestCase):
    def setUp(self):
        pass

    def tearDown(self):
        pass

    def test_example_function(self):
        exampleFunction = ExampleFunction()
        #--打桩设置某个变量的值
        mock_value = mock.Mock(return_value='test')
        self.assertEqual(mock_value(), 'test')

        #--打桩替换掉read_file方法, 采用mock.patch.object方法
        with mock.patch.object(ExampleFunction, "read_file", return_value = [1, 3]) as mock_func:
            result1 = exampleFunction.GetFileNum()
            self.assertEqual(result1, 2)
        result2 = exampleFunction.GetFileNum()
        self.assertEqual(result2, 4)

        #--打桩替换掉read_file方法, 采用mock.patch方法
        test_function = TestFunction()
        with mock.patch('test_config.TestFunction.read_file', return_value = [1, 2, 3]) as mock_func:
            result3 = len(test_function.read_file())
            self.assertEqual(result3, 3)

        #--使用Mock中side_effect调用某个函数
        mock_func = mock.Mock()
        mock_func.side_effect = exampleFunction.read_file
        result4 = mock_func()
        self.assertEqual(result4, [1, 2, 3, 4])

        #--使用side_effect指定一个列表,这样在每次调用mock对象时会依次返回
        mock_object = mock.Mock(side_effect = [1, 2, 3])
        self.assertEqual(mock_object(), 1)
        self.assertEqual(mock_object(), 2)
        self.assertEqual(mock_object(), 3)

    #--忽略某个测试用例
    @unittest.skip
    def test_example_2(self):
        self.assertEqual(2, 3)

class TestDataset2(unittest.TestCase):
    def setUp(self):
        pass

    def tearDown(self):
        pass

    def test_example_function(self):
        exampleFunction = ExampleFunction()
        result2 = exampleFunction.GetFileNum()
        self.assertEqual(result2, 4)

if __name__ == '__main__':
    # unittest.main()
    #--通过testloader运行测试集
    suite1 = unittest.TestLoader().loadTestsFromTestCase(TestDataset1)
    suite2 = unittest.TestLoader().loadTestsFromTestCase(TestDataset2)

    suite = unittest.TestSuite([suite1, suite2])
    unittest.TextTestRunner(verbosity=2).run(suite)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值