循环多次的测试,没有深入理解unittest的testcase运行机制导致的误解

testcase目录下20个文件,每个文件里面是每个模块的测试用例
在mainrun函数里面加载测试用例

suite=unittest.TestLoader().discover("testcase")
ReportFileName=str(time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time())))+".html"
if "__name__"=="__main__":
	runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title=u"测试用例结果",description=u"测试执行数据报告",verbosity=2,retry=2)
	runner.run(suite)
	fp.close

然后现在希望可以等待用例执行之后接着执行,实现循环执行所有用例
第一次修改:

suite=unittest.TestLoader().discover("testcase")
if "__name__"=="__main__":
	runTimes=input("请输入您要执行的次数:")
	i=0
	while i <int(runTimes):
		ReportFileName=str(time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time())))+str(i)+".html"
		fp=open(ReportFileName,’w‘)
		runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title=u"测试用例结果",description=u"测试执行数据报告",verbosity=2,retry=2)
		runner.run(suite)
		fp.close
		i+=1

##运行发现错误,第一次运行结果正常,但是第二次运行的时候总是报结果是NoByte(具体的错误大概是这个意思,结果是空。。).
这里错误的原因后面理解了一下就是suite用例添加放在外面导致的,再来回顾一下单元测试的机制:
在这里插入图片描述
查看一下源码:

  def run(self, result):
        for test in self:
            if result.shouldStop:
                break
            test(result)
        return result

suite文件里面的run函数,也就是说其实test到最后一个的时候,这个for循环已经结束了,程序判断到这次的运行已经shouldStop,然后下次的运行self._tests=[],所以需要你再添加用例,要不然只是跑了个空。
所以修改为如下代码就可以了:

if "__name__"=="__main__":
	runTimes=input("请输入您要执行的次数:")
	i=0
	while i <int(runTimes):
	  	suite=unittest.TestLoader().discover("testcase")#每次跑完就再次添加用例
		ReportFileName=str(time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time())))+str(i)+".html"
		fp=open(ReportFileName,’w‘))
		runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title=u"测试用例结果",description=u"测试执行数据报告",verbosity=2,retry=2)
		runner.run(suite)
		fp.close
		i+=1
这是运行的时候遇到的问题,初级问题,如果描述有误,请大神指正!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值