实现一个简单的python自动化测试框架。
父类中实现runTest()方法和assertEqual()。子类编写test开头的测试函数,其中调用assertEqual()。
实例化子类,运行父类中runTest()方法,执行测试函数。使用try捕捉异常,一个test异常,不影响其它test执行。
如何让父类中的runTest()发现子类中的测试函数?
我们使用的是子类的实例调用runTest(),所以dir()就能够知道子类中的所有的属性和方法的名字,然后使用getattr()通过名字得到测试函数。
另外在父类中实现了钩子方法setUp()和tearDown()。
子类中可以定义自己的setUp()和tearDown()。
#python3.6
#coding=utf-8
#author=刘一凡
'''
实现一个简单的python自动化测试框架。
父类中实现runTest()方法和assertEqual()。子类编写test开头的测试函数,其中调用assertEqual()。
实例化子类,运行父类中runTest()方法,执行测试函数。
如何在父类中的runTest()中发现子类中的测试函数?
我们使用的是子类的实例调用runTest(),所以dir()就能够知道子类中的所有名字,然后使用getattr()将名字转换成测试函数。
另外在父类中实现了钩子方法setUp()和tearDown()。
子类中可以定义自己的setUp()和tearDown()。使用try捕捉异常,一个test异常,不影响其它test执行。
'''
class MyUnitTest():
def setUp(self):
pass
def tearDown(self):
pass
def runTest(self):
for elem in dir(self):
if elem.startswith("test"):
test = getattr(self, elem)
#找到并且执行其中的测试函数
if callable(test):
try:
self.setUp()
print(elem,end=': ')
test()
self.tearDown()
except Exception as err:
print(err)
def assertEqual(self,expected,actual):
if actual==expected:
print("PASS")
else:
print("FAIL",end=": ")
print("{0} is not equal {1}.".format(actual,expected))
class MyTestCase(MyUnitTest):
def setUp(self):
print("setUp")
def testAdd(self):
self.assertEqual(3,1+2)
def testAdd2(self):
self.assertEqual(4,1+2)
def tearDown(self):
print("tearDown")
testcase = MyTestCase()
testcase.runTest()
运行后的输出:
setUp
testAdd: PASS
tearDown
setUp
testAdd2: FAIL: 3 is not equal 4.
tearDown