微信小程序自动化测试pytest版-失败截图

港控/mmm° 2023-09-24 16:53 158阅读 0赞

截图

在mini中截图使用的是screenshot_pic方法

  1. @allure.step("截图并存放到「{path}」中")
  2. def screenshot_pic(self, path: str):
  3. self.native.screen_shot(path)

两种断言方式

在编写测试用例的时候会使用到两种断言方式

  1. # 常规方式
  2. assert False, '错误描述'
  3. # 多重断言 使用pytest-assume插件
  4. pytest.assume(False, '错误描述')

常规方式断言失败截图

常规方式断言会在用例执行失败后结束当前用例,所以使用pytest自带的钩子:pytest_runtest_makereport

50e61b822e3d806b2a13767b0c04f00b.png

  1. @hookspec(firstresult=True)
  2. def pytest_runtest_makereport(
  3. item: "Item", call: "CallInfo[None]"
  4. ) -> Optional["TestReport"]:
  5. """Called to create a :class:`~pytest.TestReport` for each of
  6. the setup, call and teardown runtest phases of a test item.
  7. See :hook:`pytest_runtest_protocol` for a description of the runtest protocol.
  8. :param item: The item.
  9. :param call: The :class:`~pytest.CallInfo` for the phase.
  10. Stops at first non-None result, see :ref:`firstresult`.
  11. """

它会在用例执行完成后进入

在执行后判断一下当前case是否失败或异常,如果是则截图

所以当一个对象有native对象时,它就能进行截图

使用item.funcargs.items()从堆栈中找到包含native对象的对象,然后进行截图

  1. @pytest.hookimpl(tryfirst=True, hookwrapper=True)
  2. def pytest_runtest_makereport(item, call):
  3. """
  4. pytest 失败后执行
  5. :param item: 测试用例
  6. :param call: 测试步骤
  7. :return:
  8. """
  9. out = yield
  10. result = out.get_result()
  11. if result.outcome in ['failed', 'error']:
  12. for k, v in item.funcargs.items():
  13. try:
  14. if hasattr(v, 'native'):
  15. attach_png(f'{Constant().TEST_PIC}/{int(time.time())}.png', "失败截图", v)
  16. break
  17. except Exception as e:
  18. logger.error(f"失败截图异常:{e}")

多重断言失败截图

在pytest_assume插件中有一个hook:pytest_assume.hooks.pytest_assume_fail

  1. def pytest_assume_fail(lineno, entry):
  2. """
  3. Hook to manipulate user-defined data in-case of assumption failure.
  4. lineno: Line in the code from where asumption failed.
  5. entry: The assumption failure message generated from assume() call
  6. """
  7. pass

当assume第一个参数是False时,它就会进入pytest_assume_fail钩子

同上,找到包含native对象的对象,然后进行截图

  1. def pytest_assume_fail(lineno, entry):
  2. """
  3. assume 断言报错截图
  4. """
  5. for i in inspect.stack():
  6. if os.path.split(i.filename)[1].startswith('test_'):
  7. try:
  8. for k, v in i.frame.f_locals.items():
  9. if hasattr(v, 'native'):
  10. attach_png(f'{Constant().TEST_PIC}/{int(time.time())}.png', f"失败截图_{int(time.time())}", v)
  11. break
  12. except Exception as e:
  13. logger.error(f"失败截图异常:{e}")

b0dba227e7f146d108f15e4294b7348f.png

最后:在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。【保证100%免费】

软件测试面试刷题

eda9994b946c48b18439c37ffd5022fe.png

eacd6b72c45944d297f8bee39f56d0a3.png

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,158人围观)

还没有评论,来说两句吧...

相关阅读

    相关 程序测试

    程序跟app一样,上线需要经过微信的审核。小程序实际是一种免安装的app。类似的比如、小米等手机厂商推出的快应用、支付宝小程序。微信小程序实际是运行在微信之上。小程序的类...

    相关 如何测试程序

    最近羊了个羊小程序游戏火了起来,不过根据网友反馈,小游戏崩了 后续官方回应,出现登录异常的问题已经修复 那我们该如何进行微信小程序测试呢? 1、功能测试 功能测试以需求

    相关 程序 单元测试

    [完整微信小程序(Java后端) 技术贴目录清单页面(必看)][Java_] 在编写高质量的自定义组件过程中,单元测试是永远避不开的一个话题。完善的测试用例是提高自定义组件可