首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该如何处理在注销之前失败的测试并导致其他测试失败?

问我应该如何处理在注销之前失败的测试并导致其他测试失败?
EN

Stack Exchange QA用户
提问于 2017-12-19 11:34:46
回答 2查看 2K关注 0票数 1
  1. 我有需要用户登录的测试
  2. 对于这样的测试,我注册了新用户。
  3. 这样的测试还具有user_logout函数(在断言之前)

问题是:

如果测试在调用user_logout和断言之前发生了故障,它会中断一些需要注册的测试--设计注册表单对于登录用户是不可用的,因此用户注册流失败,因为selenium无法找到注册表单(没有注销保留的用户会话--没有注册表单)。

我有两个想法,如何防止测试失败,而不是因为断言影响到以下测试:

  1. 添加到带有登录标志'requires_logout‘的测试中,并使用pytest_exception_interact 向conftest.py添加一些处理程序
    • 优点:解决方案看起来很坚固,impressively
    • 缺点: conftest将需要导入UI测试、句柄库来调用user_logout。不知道为什么,但我不喜欢it

  2. 将测试本身封装在try中--除非是在user_logout并在任何exception. 上断言和执行“紧急”user_logout
    • 优点:似乎很容易,而且reliable
    • 缺点:怀疑它是否正确地使用了异常和测试框架;在测试文件中调用了双user_logout (在try-以外和“常规”优先assert.中)。

  3. 在注册流程中,检查是否登录和注销,但有一天我将编写测试,以检查已登录的users.是否可用注册

处理这种情况的最佳方法是什么?

EN

回答 2

Stack Exchange QA用户

回答已采纳

发布于 2017-12-19 13:53:52

每个测试都应该独立于任何其他测试。

如果要使用登录/注销状态,请不要从其他测试中设置登录/注销。这是不好的,并导致了你的问题。

如果要在测试之前设置某些状态,请使用测试夹具。因此,如果您有大量需要登录的测试,那么您将需要测试设置来登录,然后运行测试,然后测试删除日志(或者更好的退出驱动程序)。

票数 1
EN

Stack Exchange QA用户

发布于 2017-12-19 13:03:15

这里的问题是您的测试不是独立的:用户注册的测试取决于先前的测试成功,以及那些测试中的用户已经注销。

有不同的方法可以使你的测试独立--我给出的建议是一些简单的方法。

  • 在每个测试开始时重新创建webdriver。这是使您的测试独立的最简单方法。如果您使用测试前的方法来执行实例化,使用测试后的方法来清理任何剩余的活动,那么您就不需要有大量的复制粘贴代码。
    • 优点-简单,易于实现
    • 缺点--如果有大量的测试,就会增加大量的时间和处理成本。重新创建webdriver还强制使用一个新的浏览器实例,这会使测试运行在快速开发环境中缓慢得令人无法接受。

  • 在测试结束时关闭浏览器/会话。这与先前的建议略有不同,但不需要重新创建webdriver实例。相反,使用前测试方法作为起点,使用后测试来关闭会话或关闭浏览器。这将给您一个干净的会话,无论测试成功还是失败。
  • 在测试后的方法中添加logged_on检查。如果您正在运行大量测试,并且出于性能原因需要将浏览器和webdriver保存在内存中,这是您的最佳选择。使用此选项的主要缺点是,您需要重构断言,因为在断言之前要注销。好的一面是,如果您已经正确地构造了代码,并且使用了Page或类似的代码,那么您只需要这样的东西(伪代码):[after-test] method testCleanup() if currentPage.isLoggedOn() then currentPage.Logoff()
票数 1
EN
页面原文内容由Stack Exchange QA提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://sqa.stackexchange.com/questions/31140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档