当前位置: 首页 > 质量专栏 > 测试执行时间——为什么它很重要,我们如何才能加快它的速度?
测试执行时间——为什么它很重要,我们如何才能加快它的速度?
2023-04-28 浏览次数859

  随着我们被测系统的复杂性增加,这可能意味着我们的测试数量将继续呈指数增长。大型测试套件意味着更长的测试执行时间。我们可能会遇到有很多测试(尤其是回归测试)的情况,并且运行所有这些测试可能需要很长时间。更不用说分析测试结果、调查失败的测试、调试和修复不稳定的测试等所花费的时间和资源了。因此,事不宜迟,让我们看看我们可以做些什么来使我们的自动化测试执行得更快。

  1、将 API 测试与 UI 测试相结合

  有时我们将不得不处理没有某些先决条件就无法执行的测试。有时我们可能需要一组特定的测试数据才能测试我们需要测试的内容。对于这种情况,如果我们可以访问 API,它可以让我们的生活更轻松一些。API 不仅更适合自动化业务逻辑,而且还非常适合测试准备。推理与通过 API 而不是 UI 进行身份验证相同。我们可以走捷径并节省大量时间,从而大大缩短测试执行时间。对于经常用于不同测试的先决条件尤其如此。许多工具都支持这一点,有些工具甚至具有原生的、开箱即用的支持,可以从您的 UI 测试框架进行 API 调用。此外,API 测试可以帮助我们避免恶意代码,并更快地执行测试,它们较少依赖任何技术堆栈,因为我们主要依赖通用 HTTP 协议。对业务来说最重要的好处是,与 UI 测试相比,API 测试要便宜得多。

  2、尽可能支持较小的测试

  小型测试有时被称为原子测试——每个测试都非常小,不依赖于其他测试。独立于其他测试失败或通过的测试使其更可靠,执行速度更快,并且在失败时更容易调试。此外,当这些测试较小时,添加新测试会容易得多。诚然,并不总是可以进行非常短的测试——有时我们需要模拟真实世界的用户旅程,但作为一般规则,我们应该支持许多较小的测试,而不是一些非常冗长的详细测试。

  3、只有在无法避免的情况下才自动执行动态 UI 部分

  有时最好不要自动化网页或应用程序的某些元素。具有大量动画或高度交互元素的自动化元素可能要求很高。这通常涉及在您的测试中添加大量等待——并且此类测试难以维护。动态元素应该手动测试,因为自动化它们可能非常不稳定且要求很高。

  例如,让我们想象一个相关的 CSS 动画。当用户将商品添加到购物车时,购物车图标可能会移动并更新以显示购物车中的商品数量。现在让我们想象一下,我们有一个非常慢的网络,我们需要告诉测试等待直到动画发生,直到更新的元素可见。结果是这个测试可能由于多种原因而失败,这使得调试变得困难,而且这样的测试执行起来会很慢。所以最后,考虑一下自动化动态元素的经济效益,并确定它是否值得投资——通常是不值得的。

  4、确保模拟第 3 方依赖项

  当我们的应用程序需要连接到 3rd 方系统时,这会为我们的测试增加另一层复杂性。我们遇到的情况是,我们最终测试了我们不负责的代码。我们假设我们正在使用的第三方代码已经过测试,这被认为是理所当然的。在处理敏感数据时(例如使用支付插件时),这一点尤为重要。在这种情况下,集成的安全性至关重要。这些外部依赖项应该被模拟(使用虚拟版本来模拟真正的第 3 方扩展)或在 API 级别绕过。尤其要避免测试别人的 UI,如有必要,请使用他们的 API。出于模拟目的,您可以使用公共模拟库来生成看起来可信的测试数据。如果你不熟悉嘲笑,您可以随时联系您的开发人员寻求帮助。开发人员习惯于使用许多模拟库,他们主要将这些库用于单元测试 - 以隔离测试小块代码。最后,模拟依赖项使我们能够专注于测试对利益相关者至关重要的内容,而不是花时间在太多细节上。

  5、使用直接 URL 而不是按钮点击

  当我们自动化用户旅程时,我们需要考虑幕后发生的事情。有时将手动测试用例转化为自动化测试并不是最好的方式,也是最优化的方式。让我们来看一个简单的导航示例:如果我们有一个导航菜单,我们不会自动点击它。直接导航到该菜单项最初链接到的 URL 会更快。这具有使我们的测试不太容易出现片状问题的积极影响,无论是假阳性还是假阴性测试执行结果。通过避免点击导航按钮,我们减少了操作次数,并改善了页面加载时间。

  6、优先使用 API 身份验证而不是 UI 登录

  对登录表单进行专门的测试可能会非常昂贵,并且是一个很大的瓶颈。许多测试人员可能已经看到调用 UI 登录测试作为许多其他测试的先决条件的方法。这是一个巨大的时间浪费和不必要的开销。因此,如果您有 API,则应该改用它。通过 API 进行身份验证比基于 UI 的登录要快得多,而且可重用性更高。最好的是,这种 API 测试是最简单的测试之一——您通常需要电子邮件/用户名、密码,也许还需要 cookie 同意。发出您的 POST 请求,砰!您只需单击 UI 即可完成完全身份验证所需时间的一小部分。请确保您不是盲目地这样做,首先确保您对登录选项有透彻的了解,

  7、避免自动化 cookie 同意横幅

  Cookie 同意横幅是任何自动化工程师生存的祸根。自动化通常是多余的,应该绕过它们——因为从更多的法律接受的角度来看,它们需要单独测试。此外,另一件事是它们真的很容易被绕过,从而显着加快我们的测试执行时间。大多数时候,您可以使用浏览器中的开发人员工具轻松摆脱这些同意横幅。我们需要做的就是提供所需的值并在我们的页面加载之前放置 cookie。这将使我们在加载测试时甚至看不到 cookie 同意弹出窗口。

  8、并行运行测试

  最终,您需要执行的测试数量会随着时间的推移而增加,使得顺序执行非常耗时。想象一下(这尤其适用于 UI 测试)有数百或数千个测试——每个测试仅在前一个测试执行后运行!并行运行这些测试将使您能够同时运行多个测试。您可以在多台机器(如虚拟机)上并行运行测试,以显着减少测试执行时间。

  您可以尝试的另一种更方便的方法是使用云服务,例如HyperExecute为您的测试。这样您就不必设置测试环境并自行提供资源,从而节省更多时间。这种方法需要在您分配的测试预算之内,因为这些主要是基于商业的服务。当并行运行测试时,我们应该记住我们应该避免硬编码任何值,而是确保我们的测试数据组织良好。如果我们“正确”做事并在我们的测试自动化策略中使用智能并行化,我们将获得很多好处。我们的测试将更快、运行起来更经济、覆盖率更好、更好地集成到管道(我们的 CI/CD 流程)中,使我们能够拥有更好的测试实践,并让我们有机会进入持续测试的方向。

  因此,让我们简要总结一下我们可以做些什么来改进我们的测试执行:

  1)将 API 测试与 UI 测试相结合——我们这样做是为了获得更快的执行速度,编写更少的自动化代码,并降低执行成本。

  2)尽可能支持较小的测试——较小的测试更容易调试和维护,有单点故障,并且应该独立于其他测试通过或失败。

  3)仅在无法避免的情况下才自动执行动态 UI 部分——避免自动执行高度动态的内容,因为它要求很高,而是手动检查它们。

  4)确保模拟第 3 方依赖项——不要投资于测试其他人的代码,模拟第 3 方依赖项以节省时间并使您的测试更稳定。

  5)使用直接 URL 而不是单击按钮——直接打开 URL 而不是单击按钮将节省我们的时间,同时,它也会使测试更简单。我们的测试将更稳定,执行速度更快,页面加载速度更快,等待时间更少。

  6)优先使用 API 身份验证而不是 UI 登录——通过 API 进行身份验证比将 UI 测试用作某种共享步骤(其他测试所依赖的步骤)更快且可重用性更高。测试应该分别失败或通过。

  7)避免自动化 cookie 同意横幅——这些横幅越来越多,直接从 UI 处理它们可能非常耗时,尤其是从长远来看。我们应该直接访问 cookie 而无需单击按钮,我们的页面将感谢我们能够更快地加载!

  8)并行运行测试——与按顺序执行测试相比,并行执行测试允许我们在更短的时间内执行更多测试。我们可以利用虚拟化和云技术使我们的并行化工作更加有效。

  我们可以做一些其他较小的事情来使我们的测试执行得更快。如果我们使用像 Selenium 这样的工具,我们可以通过删除冗余的 Selenium 命令来加速我们的测试,我们应该尽量减少用于获得速度优势的数量。另一件事是支持显式等待而不是隐式等待,显式等待的实现要求更高,但值得付出额外的努力。

  从 UI 方面来看,我们也可以做一些小调整,例如尽可能避免使用 Xpath,以及使用标签和数据属性直接操作元素。在无头浏览器模式下运行我们的测试允许直接从内存运行 UI 测试,无需与浏览器的 GUI 交互,大多数现代测试工具都内置了对无头模式的支持。此外,我们需要选择运行测试的时间以及频率;可以安排一组较小的健全性测试每天运行几次,而较大的测试集应该不太频繁地触发。

  我们还应该花时间探索不同的工具,以找到最适合我们环境的工具。我们的测试也应该是确定性的,这意味着它们应该具有弹性并且不会因环境和数据问题而失败。另一个好的做法是清理数据库和测试环境,因此我们在运行测试时从一个干净的平台开始。确保你的测试被记录在案(它不必过于详细,只要它提供价值),并支持较低级别的测试而不是更复杂的测试。

  希望这些技巧对您有所帮助,祝您测试愉快!

        卓码软件测评是一家[ 具备CMA、CNAS双重资质 ]的专业做软件测试的第三方软件测试服务机构, 可根据您的需求提供各类软件测试服务,并出具合格有效的软件测试报告。点击→→可了解测试报价

        部分文字、图片来自网络,如涉及侵权,请及时与我们联系,我们会在第一时间删除或处理侵权内容。负责人:曾菲       电话:4006070568


文章标签: 软件测试
咨询软件测试