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)