一直用的是pytest,公司接口自动化用的是unittest,孰胜孰劣不好分析,但是都要学习,适应环境才能得到提高。
Testcase
testcase是测试用例类,所有执行用例的类都要继承unittest.Testcase
类:
class test(unittest.TestCase):
每一个继承unittest.Testcase
的子类,都是一个测试用例
class test(unittest.TestCase):
def test_01(self):
self._testMethodName = '测试01'
print(self._testMethodName)
def test_02(self):
self._testMethodName = '测试02'
print(self._testMethodName)
if __name__ == '__main__':
unittest.main()
unittest.main()执行的时候会去执行test’开头的方法,结果如下:
OK
测试01
测试02
参数化
@paramunittest.parametrized(('1', '2'), (3, 4), (5, 6))
参数化是把所需要的参数用元组的形式传参,()里面的内容可以是像上面填写的一样,也可以读取excel进行拼装,但是合适一定是元组形式,setParasemeters
是参数化所必须的方法,目的是将参数化的参数传递进来
@paramunittest.parametrized(('1', '2'), (3, 4), (5, 6))
class test(unittest.TestCase):
def setParasemeters(self, a, b):
self.a = a
self.b = b
def test_01(self):
print(self.a + self.b)
if __name__ == '__main__':
unittest.main()
执行结果如下,会按照参数化给定的参数,去执行N遍:
12
7
11
setUp和tearDown
参数化里面的用例每次执行开始和结束都会执行,可以在里面做一些数据处理
@paramunittest.parametrized(('1', '2'), (3, 4), (5, 6))
class test(unittest.TestCase):
def setParameters(self, a, b):
self.a = a
self.b = b
def setUp(self) -> None:
print('测试开始')
def test_01(self):
# self._testMethodName = '测试01'
# self._testMethodDoc = self.a
print(self.a + self.b)
def tearDown(self) -> None:
print('测试结束')
if __name__ == '__main__':
unittest.main()
discover和BeautifulReport
`discover`unittest.defaultTestLoader.discover(start_dir='test1',pattern='*.py', top_level_dir=None)