-
以下内容包括: 写用例,用例描述,参数化,生成测试报告
-
unittest框架用例执行顺序: 根据方法名字母排序,a.b.c.d…
-
用例前置条件:
setUpClass(cls):所有用例执行前,会执行一次,可以把连接数据库,打开文件等操作放在这里
tearDownClass(cls):所有用例执行完之后,会执行一次,可以把关闭数据库等操作放在这里
setUp(self):每条测试用例运行之前都会先执行它
tearDown(self):每条测试用例运行之后都会执行它 -
单个用例管理
import unittest
import HTMLTestRunner
import HTMLTestRunnerNew
import parameterized
def add(a,b):
return a+b
def login():
return 'token'
class TestAdd(unittest.TestCase):
'''测试add方法'''#用例描述
@classmethod
def setUpClass(cls):#所有用例执行前,会执行一次,可以把连接数据库,打开文件等操作放在这里
print("setUpClass")
@classmethod
def tearDownClass(cls):#所有用例执行完之后,会执行一次,可以把关闭数据库等操作放在这里
print("tearDownClass")
def test_add_normal(self):#类里面self的含义
'''正常测试加法的,by huoziyang'''#用例描述
result = add(1,2)
self.assertEqual(3,result)#断言
def test_add_error1(self):
'''测试失败使用'''#用例描述
result = add(1,2)
self.assertEqual(4,result)
def test_add_error2(self):
'''测试失败有msg的'''#用例描述
result = add(1,2)
self.assertEqual(4,result,'正常整数加法,没有通过')
@parameterized.parameterized.expand(
[
[1,2,3,'参数化1'],
[-1,2,1,'参数化第二条'],
[-1,2,2,'参数化第三条'],
]
)
def test_param_add(self,a,b,c,desc):
token = login()
self._testMethodDoc = desc#在测试报告中显示对应的用例描述
result = add(a,b)
self.assertEqual(c,result,'预期是%s,实际结果是%s'%(c,result))
if __name__ == '__main__':
# 不产生测试报告
# unittest.main()
##单个运行某个测试用例
test_suite = unittest.TestSuite()
test_suite.addTest(TestAdd('test_add_error2'))
test_suite.addTest(TestAdd('test_add_error1'))
##运行某个类里面所有的测试用例
# test_suite = unittest.makeSuite(TestAdd)
#查找某个目录下的测试用例
# test_suite = unittest.defaultTestLoader.discover('cases','test*.py')
with open('report.html','wb') as fw:#产生测试报告
runner = HTMLTestRunner.HTMLTestRunner(stream=fw,title='天马座测试报告',
description='天马座接口测试报告',
verbosity=2
)
# runner = HTMLTestRunnerNew.HTMLTestRunner(stream=fw,title='天马座测试报告',
# description='天马座接口测试报告',
# verbosity=2
# )
runner.run(test_suite)
测试报告:
import unittest
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
#所有用例运行之前,它会执行一次
print('setUpClass\n')
@classmethod
def tearDownClass(cls):
#所有用例运行完之后,它会执行一次
print("tearDownClass\n")
def tearDown(self):
#每条测试用例运行之后都会执行它
print("tearDown")
def setUp(self):
#每条测试用例运行之前都会先执行它
print("setUp")
def testa1(self):
print('testa1\n')
def testz(self):
print("testz\n")
def testb(self):
print("testb\n")
def testa(self):
print("testa\n")
# class OpenAcc(unittest.TestCase):
#
#
# def test_open_acc_normal(self):
# '''四要素开户'''
# pass
#
# def test_open_acc_normal1(self):
# '''两要素'''
if __name__ == "__main__":
unittest.main()
执行结果:
setUpClass
setUp
testa
tearDown
setUp
testa1
tearDown
setUp
testb
tearDown
setUp
testz
tearDown
tearDownClass