pytest实例,pytest断言捕捉结果

  pytest实例,pytest断言捕捉结果

  Pytest获取测试用例执行结果(hook函数:pytest _ runtest _ make report)_ MB 62 af F3 AFB 54 FB _ 51 CTO博客的技术博客

  简介pytest测试框架提供的很多hook函数方便我们对测试框架进行二次开发,可以根据自己的需求进行修改。

  比如:hook方法:pytest_runtest_makereport,可以清晰的了解测试用例的执行过程,获得每个测试用例的执行结果。

  test _ runtest _ makereport方法介绍。首先,看相关的源代码。在file _pytest/runner.py下,可以导入并查看它:

  源代码:from _pytest导入运行程序

  #对应的源代码

  def pytest _ runtest _ make report(item,call):

  返回a:py:class:` _ py test . runner . test report `对象

  对于给定的:py:class:`pytest.Item 和

  :py:class:` _ py test . runner . callinfo`。

   Decorator pytest . hook inpl(hook wrapper=true,tryfirst=true)说明:@ pytest . hook inpl(hook wrapper=true)修饰的钩子函数有以下两个函数:

  1.你可以得到测试用例不同执行阶段的结果(设置、调用、拆卸)。

  2.可以得到hook方法pytest _ runtest _ makereport (item,call)的调用结果(yield在测试用例执行后返回一个result对象)和调用结果result对象中的测试报告(返回一个report对象)

  Py _ runtest _ makereport (item,call) hook函数参数说明:1。Item是测试用例对象;

  2.调用是测试用例的测试步骤;具体实施过程如下:

  先执行when=setup ,返回setup用例前置操作函数的执行结果。

  然后执行when=call 并返回调用测试用例的执行结果。

  最后执行when=teardown 并返回teardown用例后操作函数的执行结果。

  第一种情况,conftest.py文件,写pytest_runtest_makereport钩子方法,打印运行过程和运行结果。# conftest.py

  导入pytest

  @ pytest . hook impl(hook wrapper=True,tryfirst=True)

  def pytest _ runtest _ make report(item,call):

  打印(-)

  #获取hook方法的调用结果并返回一个结果对象

  输出=产量

  打印(“用例执行结果”,输出)

  #从hook方法的调用结果中获取测试报告

  report=out.get_result()

  打印(“测试报告:% s“%报告”)

  打印(步骤:%s% report.when)

  print( nodeid:% s % report . nodeid)

  print( description:% s % str(item . function . _ _ doc _ _))

  Print((运行结果:%s% report.outcome))test_a.py编写一个简单的用例:def test_a():

  用例描述:test_a

  打印( 123 )运行结果:

  结果分析:从结果可以看出,测试用例的执行过程将经历三个阶段:

  setup-call-teardown的每个阶段都返回结果对象和TestReport对象,以及对象属性。(setup和teardown以上用例默认不可用,结果全部通过。)

  第二种情况,给测试用例写一个fixture()函数,增加测试用例的前后操作;Conftest.py如下所示:

  导入pytest

  @ pytest . hook impl(hook wrapper=True,tryfirst=True)

  def pytest _ runtest _ make report(item,call):

  打印(-)

  #获取钩子方法的调用结果

  输出=产量

  打印(“用例执行结果”,输出)

  #从hook方法的调用结果中获取测试报告

  report=out.get_result()

  打印(“测试报告:% s“%报告”)

  打印(步骤:%s% report.when)

  print( nodeid:% s % report . nodeid)

  print( description:% s % str(item . function . _ _ doc _ _))

  打印((运行结果:%s% report.outcome))

  @pytest.fixture(scope=session ,autouse=True)

  定义fix_a():

  打印(“安装操作前”)

  产量

  打印运行结果(“拆卸后操作”):

  第三种情况,fixture()函数的setup前置函数在执行时出现异常,即setup执行结果失败,那么后续的call测试用例、teardown后置操作函数都不会执行。

  此时的状态是error,意味着测试用例还没有开始执行就已经异常了。(运行前功能时出现异常)

  导入pytest

  @ pytest . hook impl(hook wrapper=True,tryfirst=True)

  def pytest _ runtest _ make报告(项目,呼叫):

  打印(-)

  # 获取钩子方法的调用结果

  输出=产量

  打印(用例执行结果,out)

  # 从钩子方法的调用结果中获取测试报告

  report=out.get_result()

  打印(测试报告:%s %报告)

  打印(步骤:%s % report.when)

  打印( nodeid:% s %报告。nodeid)

  打印(描述:% s % str(项目。功能。_ _ doc _ _))

  打印((运行结果:%s % report.outcome))

  @pytest.fixture(scope=session ,autouse=True)

  定义fix_a():

  打印(设置前置操作)

  断言1==2

  产量

  打印(拆卸后置操作)运行结果:

  第四个案例设置前置操作函数正常执行,测试用例呼叫执行发生异常。

  此时的测试用例执行结果为不成功的

  # conftest.py

  导入pytest

  @ pytest。hook impl(hook wrapper=True,tryfirst=True)

  def pytest _ runtest _ make报告(项目,呼叫):

  打印(-)

  # 获取钩子方法的调用结果

  输出=产量

  打印(用例执行结果,out)

  # 3.从钩子方法的调用结果中获取测试报告

  report=out.get_result()

  打印(测试报告:%s %报告)

  打印(步骤:%s % report.when)

  打印( nodeid:% s %报告。nodeid)

  打印(描述:% s % str(项目。功能。_ _ doc _ _))

  打印((运行结果:%s % report.outcome))

  @pytest.fixture(scope=session ,autouse=True)

  定义fix_a():

  打印(设置前置操作)

  产量

  打印(拆卸后置操作)# test_a.py

  定义测试_a():

  用例描述:test_a

  打印( 123 )

  断言1==0运行结果:

  第五个案例设置前置操作函数正常执行,测试用例呼叫正常执行,拆卸后置操作函数执行时发生异常。

  测试用例正常执行,但是测试结果中会有错误,因为拆卸后置操作函数在执行时发生异常

  # conftest.py

  导入pytest

  @ pytest。hook impl(hook wrapper=True,tryfirst=True)

  def pytest _ runtest _ make报告(项目,呼叫):

  打印(-)

  # 获取钩子方法的调用结果

  输出=产量

  打印(用例执行结果,out)

  # 从钩子方法的调用结果中获取测试报告

  report=out.get_result()

  打印(测试报告:%s %报告)

  打印(步骤:%s % report.when)

  打印( nodeid:% s %报告。nodeid)

  打印(描述:% s % str(项目。功能。_ _ doc _ _))

  打印((运行结果:%s % report.outcome))

  @pytest.fixture(scope=session ,autouse=True)

  定义fix_a():

  打印(设置前置操作)

  产量

  打印(拆卸后置操作)

  引发异常(拆卸失败了)# test_a.py

  定义测试_a():

  用例描述:test_a

  打印( 123 )运行结果:

  第六个案例:只获取呼叫结果场景:编写测试用例时,在保证设置前置操作函数和拆卸后置操作函数不报错的前提下,我们一般只需要关注测试用例的执行结果,即只需要获取测试用例执行呼叫的结果。

  解决办法:因为前面的pytest_runtest_makereport钩子方法执行了三次。所以在打印测试报告的相关数据之气可以加个判断:if report.when==call 。

  导入pytest

  from _pytest导入运行程序

  # 对应源码

  def pytest _ runtest _ make报告(项目,呼叫):

  返回答:py:class:` _ py测试。奔跑者。测试报告对象

  对于给定的:py:class:`pytest.Item 和

  :py:class:` _ py测试。奔跑者。callinfo `

  @ pytest。hook impl(hook wrapper=True,tryfirst=True)

  def pytest _ runtest _ make报告(项目,呼叫):

  打印(-)

  # 获取钩子方法的调用结果

  输出=产量

  #打印(用例执行结果:,out)

  # 从钩子方法的调用结果中获取测试报告

  report=out.get_result()

  if report.when==call :

  打印(测试报告:%s %报告)

  打印(步骤:%s % report.when)

  打印( nodeid:% s %报告。nodeid)

  打印(描述:% s % str(项目。功能。_ _ doc _ _))

  打印((运行结果:%s % report.outcome))

  @pytest.fixture(scope=session ,autouse=True)

  定义fix_a():

  打印(设置前置操作)

  产量

  打印(拆卸后置操作)运行结果:

  Conftest.py移除pytest_runtest_makereport的hook方法,正常执行测试用例# conftest.py。

  导入pytest

  @pytest.fixture(scope=session ,autouse=True)

  定义fix_a():

  打印(“安装操作前”)

  产量

  打印(拆卸后操作)# test_a.py

  定义测试_a():

  用例描述:test_a

  打印( 123 )运行结果:

  期待陌生,拥抱惊喜。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: