性能测试:当 UI/API 测试的运行时间增加 x% 时标记(Selenium C#)
Performance Testing: Flag when a UI/API test's runtime increases by x% (Selenium C#)
我们的团队目前使用 Selenium 和 C#(和 NUnit)来 运行 UI 自动化测试。所有测试都是手动编程的,这意味着没有使用记录器。
问题:我们现在要求这些测试跟踪它们自己的性能(以及过去的性能),并在其 运行时间增加 x% 时发出警告(5% 或 10%,等等)。
问题:完成此任务的最佳方法是什么?我们应该创建工具来从头开始分析这些 UI 和 API 测试的性能(性能历史记录),还是我们可以利用其他工具?
讨论 load/performance 测试的博客或 stackExchange 问题通常引用三个主要的 C# 工具(NeoLoad、SilkPerformer、LoadRunnerProfessional)。但是,我不确定我被要求做的是否被认为是最纯粹意义上的性能测试(负载测试),因此,不确定上述工具是否有助于实现总体目标。他们通常还会将 performance/load 测试与 UI/API 测试分开。
总结:寻求关于采取何种方向的建议and/or阅读此类测试的内容。
恕我直言,此请求在太多级别上有太多错误。
these tests track their own performance (and past performance) and raise a warning when its runtime increases by x% (5% or 10%, etc).
功能性 UI/API 测试的性能指标究竟证明了什么!?
但是,如果仍然需要实施,我会建议一个简单的方法 - 在 before/after 中使用 StopWatch 每个 C# Selenium 测试并将其存储在中央数据库中,您可以稍后查询并标记以防增加。
// generate test case id for later use
// create and start the instance of Stopwatch in your [SetUp] method
Stopwatch stopwatch = Stopwatch.StartNew();
// your test code here
// in your [TearDown] method
stopwatch.Stop();
// store this in the DB alongside TestCaseId
Console.WriteLine(stopwatch.ElapsedMilliseconds);
首先,跟踪单个用户性能的荣誉。只需确保每个请求都满足性能目标,就可以解决多达 80% 的性能问题。
其次,有一些数据点您应该获取,但可能不是,它们可以使您的工作变得容易得多:HTTP 访问日志中的 w3c 时间,以及来自 RUM 的 w3c 导航时间统计信息(真实用户监视器)Javascript 加载项。您可以将该数据推送到开源解决方案,例如 ElasticStack,以管理数据。
假设您知道功能运行的时间,您只需比较两者的统计数据,例如
运行 时间 = 最大日志输入时间 - 最小日志输入时间(针对给定测试主机集的测试集。)如果您的开发人员可以在每个顶级请求中包含一个版本标志作为'?' 后的参数集签名,更好,因为您可以将版本信息作为您的分组项进行查询。
然后您可以从日志中查看每个请求的数据,以了解哪些请求正在通过构建得到改进或降级
您还可以查看 RUM 统计数据,例如 domInteractive 和 domComplete,以检查最终用户响应时间以及它们是在改善还是在下降。
这完全是被动的,无需修改您的脚本,只需更改日志模型、添加 RUM 代理,然后将该数据收集到您可以进行仪表板更改的位置
我们的团队目前使用 Selenium 和 C#(和 NUnit)来 运行 UI 自动化测试。所有测试都是手动编程的,这意味着没有使用记录器。
问题:我们现在要求这些测试跟踪它们自己的性能(以及过去的性能),并在其 运行时间增加 x% 时发出警告(5% 或 10%,等等)。
问题:完成此任务的最佳方法是什么?我们应该创建工具来从头开始分析这些 UI 和 API 测试的性能(性能历史记录),还是我们可以利用其他工具?
讨论 load/performance 测试的博客或 stackExchange 问题通常引用三个主要的 C# 工具(NeoLoad、SilkPerformer、LoadRunnerProfessional)。但是,我不确定我被要求做的是否被认为是最纯粹意义上的性能测试(负载测试),因此,不确定上述工具是否有助于实现总体目标。他们通常还会将 performance/load 测试与 UI/API 测试分开。
总结:寻求关于采取何种方向的建议and/or阅读此类测试的内容。
恕我直言,此请求在太多级别上有太多错误。
these tests track their own performance (and past performance) and raise a warning when its runtime increases by x% (5% or 10%, etc).
功能性 UI/API 测试的性能指标究竟证明了什么!?
但是,如果仍然需要实施,我会建议一个简单的方法 - 在 before/after 中使用 StopWatch 每个 C# Selenium 测试并将其存储在中央数据库中,您可以稍后查询并标记以防增加。
// generate test case id for later use
// create and start the instance of Stopwatch in your [SetUp] method
Stopwatch stopwatch = Stopwatch.StartNew();
// your test code here
// in your [TearDown] method
stopwatch.Stop();
// store this in the DB alongside TestCaseId
Console.WriteLine(stopwatch.ElapsedMilliseconds);
首先,跟踪单个用户性能的荣誉。只需确保每个请求都满足性能目标,就可以解决多达 80% 的性能问题。
其次,有一些数据点您应该获取,但可能不是,它们可以使您的工作变得容易得多:HTTP 访问日志中的 w3c 时间,以及来自 RUM 的 w3c 导航时间统计信息(真实用户监视器)Javascript 加载项。您可以将该数据推送到开源解决方案,例如 ElasticStack,以管理数据。
假设您知道功能运行的时间,您只需比较两者的统计数据,例如
运行 时间 = 最大日志输入时间 - 最小日志输入时间(针对给定测试主机集的测试集。)如果您的开发人员可以在每个顶级请求中包含一个版本标志作为'?' 后的参数集签名,更好,因为您可以将版本信息作为您的分组项进行查询。
然后您可以从日志中查看每个请求的数据,以了解哪些请求正在通过构建得到改进或降级
您还可以查看 RUM 统计数据,例如 domInteractive 和 domComplete,以检查最终用户响应时间以及它们是在改善还是在下降。
这完全是被动的,无需修改您的脚本,只需更改日志模型、添加 RUM 代理,然后将该数据收集到您可以进行仪表板更改的位置