pyunit扩展:在日志中自动分级编号

对于用例中的关键步骤,如果能在日志中打印出来并自动编号,则分析日志的时候会比较方便。

如下代码引入step方法,自动对每个用例的日志进行编号,且可以设置编号的级别:


stepid = [0]
steplevel = 0
def initstep():
	global stepid, steplevel
	stepid, steplevel = [0], 0
def step(msg, level=0, id=None):  #user can define level and id
	global stepid, steplevel
	if level == steplevel:
		if None == id:
			stepid[level] += 1
		else:
			stepid[level] = id
	elif level > steplevel:	#level should = steplevel + 1
		if None == id:
			stepid.append(1)
		else:
			stepid.append(id)
		steplevel += 1
	else:
		stepid = stepid[:level + 1]
		if None == id:
			stepid[level] += 1
		else:
			stepid[level] = id
		steplevel = level
		
	prefix = 'Step-' + '.'.join([str(id) for id in stepid]) + ': '
	print prefix + msg
	
class StepTestResult(TextTestResult):
	def addSuccess(self, test):
		super(StepTestResult, self).addSuccess(test)
		initstep()
	def addError(self, test, err):
		super(StepTestResult, self).addError(test, err)
		initstep()
	def addFailure(self, test, err):
		super(StepTestResult, self).addFailure(test, err)
		initstep()

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

测试用例如下:

class test1(TestCase):
	def testaaa(self):
		step('a')
		step('b', 0, 7)
		step('c')
		step('d', 1)
		step('e', 2)
		step('f', 1)
		step('g')
	def testbbb(self):
		step('a')
		step('b', 1)
		step('c')
		fail('xxx')
		step('d', 1)
		step('e', 2)
		step('f', 1)
		step('g')
class test2(TestCase):
	def testccc(self):
		step('a')
		step('b', 0, 7)
		step('c')
		for i in range(5):
			#use different id in loop
			step('d', 1)
		step('f', 1)
		step('g')
	def testddd(self):
		step('a')
		step('b', 0, 7)
		step('c')
		for i in range(5):
			#use same id in loop
			step('d', 1, 3)
		step('f', 1)
		step('g')

运行结果:

Step-1: a
Step-7: b
Step-8: c
Step-8.1: d
Step-8.1.1: e
Step-8.2: f
Step-9: g
.Step-1: a
Step-1.1: b
Step-2: c
EStep-1: a
Step-7: b
Step-8: c
Step-8.1: d
Step-8.2: d
Step-8.3: d
Step-8.4: d
Step-8.5: d
Step-8.6: f
Step-9: g
.Step-1: a
Step-7: b
Step-8: c
Step-8.3: d
Step-8.3: d
Step-8.3: d
Step-8.3: d
Step-8.3: d
Step-8.4: f
Step-9: g
.


注意:在循环中如果使用step,且未指定编号,则日志编号会随循环不断增加,如testccc所示。

如果希望自动避免,也可以保存一个打印过的日志对应的代码行的表进行判断:如果该行日志已打印,则编号不增加,或仍采用原编号。

不过这个方案还不如用户在循环中指定编号。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值