python接口unittest测试框架,python中unittest
目录
一、跑步者简介
二、TextTestRunner源代码分析
1.类的实例化
2.运行方法
三。摘要
一、runner简介公文的描述是:
将结果输出到流的基本测试运行器实现。
基本的runner组件用于将结果输出到数据流。
按照它的解释,runner的最终功能是得到一个结果对象,也就是结果,并反馈给用户。上一章我们了解到runner的本质是一个实例化的TextTestRunner类,我们最后调用这个实例的run(test)方法来执行测试并得到结果。在本章中,我们将分析这个类的源代码,以了解这个过程是如何实现的。
二。TextTestRunner源代码分析TextTestRunner的位置在runner.py文件中。
1.该类的实例化显示了__init__方法的源代码:
texttestrunner(object):result class=texttestresult # Assign初始值def _ _ init _ _ (self,stream=none,descriptions=true,verbosity=1,failfast=False,buffer=False,resultclass=None,warnings=None,*,tb_locals=False):如果stream为None:stream=sys . stderr self . stream=_ WritelnDecorator(stream)self . descriptions=descriptions self . verbosity=verbosity self . fail fast self . buffer=buffer self . TB _ locals=TB _ locals self . warnings结果请参考作者手动翻译的unittest。TextTestRunner了解每个属性的含义。应该注意self.resultclass属性,该属性在__init__()方法之外的代码中被赋予一个默认值。如果用户在实例化时在参数中给出这个参数,这个值将被覆盖。
2.运行方法源代码:
def _ makesult(self):创建结果对象回归自我。结果类(自我。stream,self.descriptions,self.verbosity) def run(self,test):"运行给定的测试用例或测试套件。"结果=自己. makeResult() #创建结果对象注册结果(结果)#为形状的副本操作绑定这个结果对象result.failfast=self.failfast #是否遇到失败或错误时就停止测试结果。缓冲=自我。缓冲结果。TB _ locals=self。带有警告的TB _ locals。catch _ warnings():如果self。警告:#警告过滤器警告。简单过滤器(自身。警告)如果自己。[ default , always ]中的警告:警告。筛选警告( module ,category=DeprecationWarning,message=r)请改用assert \ w’)开始时间=时间。time()startTestRun=getattr(result, startTestRun ,None)如果开始测试运行不为None: startTestRun() # test运行之前被调用的方法尝试:测试(结果)#这里的试验是测试集类实例,调用它时等用于调用它的奔跑方法最后:stopTestRun=getattr(结果, stopTestRun ,无)如果停止测试运行不为None: stopTestRun() # test完全运行完之后被调用的方法停止时间=时间。时间()所用时间=停止时间-开始时间#计算测试耗时结果。如果hasattr(结果,“分隔符2”):self,则打印错误()。溪流。writeln(结果。分离器2)运行=结果。测试运行#测试用例的数量self.stream.writeln(在% .3fs"%(跑,跑!=1和“s”或,time taken)#打印运行的测试总数self.stream.writeln() #打印空行预期失败=意外成功=跳过=0 try:results=map(len,(result.expectedFailures,result.unexpectedSuccesses,result.skipped)) #统计括号中3种情况的次数except属性错误:pass else:expected fails,unexpectedSuccesses,skipped=results infos=[]if not result。成功():#如果测试存在失败或错误,在结果信息中添加错误或失败的数量# 如果测试成功,显示OK self.stream.write(FAILED )失败,errored=len(结果.失败),len(结果.错误)如果失败:infos。追加(失败=% d %失败)如果出错:infos。追加(错误=% d % errored )否则:self.stream.write(OK) #统计跳过、预期的失败及非预期的成功的数量如果跳过:信息。如果预期失败,则追加( skipped=% d % skipped ):信息。如果意外成功,则追加(预期失败=% d %预期失败:信息。如果infos:self,则追加(意外成功=% d %意外成功)。溪流。writeln((% s) %(, .join(infos),))else: self.stream.write(\n )返回结果在奔跑方法中,先用自我. makeResult方法创建结果对象。在带有警告。catch _警告代码块中执行测试可以测试用例执行过程中的警告进行过滤(因为单元测试中有很多废弃的曾用名,可能会引发警告,也可以自定义过滤规则,详情可查看官方文档警告模块)。执行测试的关键代码是test(result),这里的试验是一个测试集类的实例对象,这里以函数的方式调用等同于执行test.run(result)。
剩余代码是用于打印信息,就只在源码中作标注。
三。总结runner.py模块的内容相当简短。测试的底层实现没有在这个模块中显示,但是结果对象是在这里创建的,然后测试结果将存储在这个对象中。这个类的实例用于存储和打印结果。这里子类中覆盖的方法的功能是在相应的情况下(例如,错误、失败、跳过等)打印相关信息。)发生,如下图所示。
下一期我们将详细介绍result对象,因为它是执行test.run(result)方法时必须使用的参数。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。