paint-brush
测量测试运行时间:如何优化测试套件性能经过@launchable
7,485 讀數
7,485 讀數

测量测试运行时间:如何优化测试套件性能

经过 Launchable6m2023/07/25
Read on Terminal Reader

太長; 讀書

了解为什么测量测试运行时间可以帮助加快您的开发周期以及完成测量的最佳方法。
featured image - 测量测试运行时间:如何优化测试套件性能
Launchable HackerNoon profile picture

您今天就可以开始使用手动和人工智能驱动的测试运行时方法

随着时间的推移,软件开发变得越来越复杂,软件测试对于发布稳定可靠的产品同样重要。但我们知道,臃肿的测试套件是加快发布速度的臭名昭著的瓶颈。


开发团队需要能够加快测试速度以保持进度,但这并不是那么简单。


测量测试套件的运行时间可以显着影响您的开发周期,从而实现快速反馈循环、有效的资源利用以及更好的测试可维护性。考虑到所有这些,您可以看到测量测试运行时间是多么重要。

测量测试运行时间的传统方法

有多种测量测试运行时间的方法,足以满足几乎任何人的需求。然而,这并不总是意味着它们是最好的方法。让我们谈谈您可能听说过的一些最常见的方法:


  • 手动计时- 这是最基本的方法,使用传统时钟和秒表对这些测试进行计时并非完全闻所未闻。您所需要的只是一种跟踪时间流逝的方法(例如手机上的秒表功能)和一些良好的时机。然而,它远非最准确,因为它仍然依赖于人类互动。


  • 与 CI 工具集成——大量 CI 工具包含用于测量测试运行时间的功能。 TravisCI 和 Jenkins 等工具可以记录所提供作业的开始和结束时间,让您了解它们的执行情况以及是否发生变化。


  • 分析日志并使用时间戳- 另一种更“手动”的方法是在测试运行时简单地在测试中设置日志。无论您使用什么语言,总会在某个地方有一个等效的 print() 函数。您还可以将测试设置为记录这些结果以便于解析,但任一选择都会使编写测试的时间更长。

Python 中的分析日志示例

当您的测试框架生成日志时,您可以解析它们以提取必要的信息,例如测试开始时间和测试完成时间。


 import re def parse_logs(log_file): with open(log_file, 'r') as f: logs = f.readlines() test_start_time = None test_end_time = None for line in logs: if 'Test started' in line: test_start_time = extract_timestamp(line) elif 'Test completed' in line: test_end_time = extract_timestamp(line) if test_start_time and test_end_time: test_runtime = test_end_time - test_start_time print(f"Test runtime: {test_runtime}") def extract_timestamp(log_line): # Regular expression to extract timestamp (assuming format: [YYYY-MM-DD HH:MM:SS]) timestamp_pattern = r'\[(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\]' match = re.search(timestamp_pattern, log_line) if match: timestamp = match.group(1) return convert_to_datetime(timestamp) return None def convert_to_datetime(timestamp): from datetime import datetime datetime_format = "%Y-%m-%d %H:%M:%S" return datetime.strptime(timestamp, datetime_format) # Usage parse_logs('test_logs.txt')


在此示例中,parse_logs 函数逐行读取日志文件并搜索特定标记(“测试开始”和“测试完成”)以提取相应的时间戳。它使用正则表达式提取时间戳并将其转换为 DateTime 对象以进行进一步计算。

Python 的时间戳示例

另一种方法是直接在测试代码中记录时间戳。在下面的示例中,run_test 函数在执行测试逻辑之前使用 time.time() 记录开始时间。


测试完成后,它通过从结束时间减去开始时间来计算运行时间,结束时间也是使用 time.time() 获得的。


结果将打印为测试运行时间(以秒为单位)。


 import time def run_test(): start_time = time.time() # Test logic goes here # ... end_time = time.time() test_runtime = end_time - start_time print(f"Test runtime: {test_runtime} seconds") # Usage run_test()


无论您采用哪种方法,这些方法都往往存在一些缺陷。无论是人为错误还是外部因素,都很难从这些方法中获得完全准确的结果。


另外,其中许多无法随着您的测试而扩展。这意味着您需要找到更准确的测量方法。

为什么我应该测量测试运行时间?

我们一直在谈论“如何”,但为什么呢?您的测试至关重要,但测试管道可能成为交付瓶颈。


通过跟踪测试的运行方式,您可以全面了解其性能,将测试套件智能结合在一起,并采取措施进一步简化测试,包括三个常见领域:

并行化优化

测量测试套件的运行时间可以让您发现哪些测试的运行时间最长。这种透明度使您能够在可能的情况下通过并行测试进一步优化测试,从而为您提供更快的结果和更短的反馈循环。

资源分配

准确测量测试运行时间可以帮助您更有效地规划测试阶段。您将能够为较长的测试分配时间和计算能力,并避免以后出现瓶颈。

测试优先级

确定最慢的测试还可以让您后退一步,优先考虑最关键的测试以及可以保存以供以后使用的测试。这样,您可以先运行更快的测试,从而在较长的测试开始工作之前为您提供对构建的重要见解。

连续的提高

测试运行时间在 CI/CD 管道中至关重要,其中快速反馈至关重要。通过测量和优化测试运行时间,您可以减少 CI/CD 过程所需的时间,从而实现更快的部署。


这反过来又提高了开发过程的整体敏捷性,并允许更频繁的迭代。

通过 Launchable 自动跟踪测试运行时间和关键 KPI

很明显,测量测试运行时间可能是整个测试过程中的一个重要因素。通过 Launchable,您可以立即开始测量并使您的测试更加高效。

Launchable 如何衡量测试运行时间?

Launchable 通过与所有您喜爱的 CI/CD 工具(包括 TravisCI、Jenkins 和 GitHub Actions)集成来自动化测试运行时跟踪。这意味着您可以轻松地将 Launchable 滑入现有管道中,从而允许我们的 ML 模型分析您的测试。


一旦我们进入,我们就可以跨多个构建无缝地测量测试运行时间,为您提供关于测试的重要见解,而不仅仅是运行时间

超越运行时的更深入的测试见解,以实现完整的测试套件健康状况

使您的团队能够量化测试套件中的更改在测试运行时之外的影响。 Launchable 为数据驱动的 QA 提供了测试套件运行状况指标,以提高测试套件的透明度。


  • 优先考虑有影响力的片状测试:片状测试可能会让 QA 团队非常头疼,耗费时间和精力。 Launchable 根据影响来识别不稳定的测试,使您能够更可靠地处理和运行它们。从我们的每日不稳定报告中获取见解,并充满信心地修复您的测试。


  • 跟踪测试会话持续时间:测量测试套件在多个会话中运行所需的时间。我们的跟踪功能突出显示超出预期持续时间的测试,帮助您识别和解决任何性能问题。


  • 优化测试会话频率:监控测试套件的执行频率并将其与会话持续时间结合起来。确保测试以正确的时间间隔运行。此外,预测测试选择通过在最佳时间运行最相关的测试来节省时间和资源。


  • 确定测试会话失败率:查明经常失败的测试并调查测试或当前构建的潜在问题。获得有关测试过程稳定性的宝贵见解,并做出明智的决策以提高整体质量。


有效利用测试基础设施是最大限度减少空闲时间和最大化资源的关键。通过使用 Launchable 测量测试运行时间,轻松识别阻碍性能的任何瓶颈。


获取测试中测试套件模式和趋势所需的所有信息,使您能够做出明智的、数据驱动的决策来优化您的测试。通过这样做,您可以简化整个测试流程