pyunit扩展:数据驱动测试(Data Driven Test)

数据与脚本分离是测试自动化的一大进步。在相同逻辑对应多组数据的情况下,采用测试驱动测试DDT的方式能更高效、简洁的开发自动化测试用例。


框架扩展:

class DataDrivenTestCase(TestCase):
	def gettestdata(self, key):
		return self.testdata[key]
	def run(self, result=None):
		#run once for every test data
		#eg. there are three times for loginok, loginfail, loginerror
		for self.testdata_name_inrun in testdata[self._testMethodName].keys():
			self.testdata = testdata[self._testMethodName][self.testdata_name_inrun]
			super(DataDrivenTestCase, self).run(result)
class DataDrivenTestResult(TextTestResult):
	def printErrorList(self, flavour, errors):
		for test, err in errors:
			self.stream.writeln(self.separator1)
			#print test data name for failed result
			self.stream.writeln("%s: %s: %s" % (flavour,self.getDescription(test), test.testdata_name_inrun))
			self.stream.writeln(self.separator2)
			self.stream.writeln("%s" % err)

if __name__ == '__main__':
	TestProgram(testRunner=TextTestRunner(resultclass=DataDrivenTestResult))

测试数据和脚本如下:

testdata = {'testaaa':{	#test method name
			'loginok':	#test data name
				{'user':'admin','pwd':'admin'},	#test data key, test data value
			'loginfail':{'user':'user','pwd':'wrong'},
			'loginerror':{'user':'guest','pwd':'error'},
		},
		'testbbb':{
			'click':{'target':'button'},
			'touch':{'target':'screen'},
		}
	}

class test1(DataDrivenTestCase):
	def testaaa(self):
		print self.gettestdata('user')
		if self.gettestdata('pwd') == 'wrong':
			fail('wrong pwd')
			
	def testbbb(self):
		print self.gettestdata('target')
		if self.gettestdata('target') == 'screen':
			fail('do not support screen')


则testaaa对应三组数据,testbbb对应两组数据,框架将自动为数据扩展用例,执行结果如下:

guest
.admin
.user
Escreen
Ebutton
.
=============================================
ERROR: testaaa (__main__.test1): loginfail
---------------------------------------------
Traceback (most recent call last):
  File "a.py", line 117, in testaaa
    fail('wrong pwd')
NameError: global name 'fail' is not defined
=============================================
ERROR: testbbb (__main__.test1): click
---------------------------------------------
Traceback (most recent call last):
  File "a.py", line 122, in testbbb
    fail('do not support screen')
NameError: global name 'fail' is not defined
---------------------------------------------
Ran 5 tests in 0.005s

FAILED (errors=2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值