首页 > 解决方案 > 我们如何使用现有的 selenium 脚本(java)来获得一些端到端的性能指标(低负载)

问题描述

我正在尝试利用自动化团队开发的 java 中现有的 selenium 自动化脚本来获得一些端到端的性能指标(总页面加载时间等)——非常小的负载,与 api 负载测试并行。

请让我知道最有效的方法是什么。此外,我正在寻找对 selenium 脚本进行最小更改,因为这将是每个版本的持续活动,我正在寻找使用功能性脚本,因为它与围绕它的性能包装器一起使用。

您的建议将不胜感激。

谢谢你!

标签: performanceseleniumtestingclientclient-side

解决方案


我会避免使用 Selenium 进行负载测试。如果设置专用性能测试不是一个选项,您至少可以这样做:

//Put this into the loaded scripts of your page under test. Make sure loadTimeMs is a global variable or saved to a hidden control.
var loadTimeMs = 0;
var pageContentRecieved = (new Date()).getTime();
$(window).load(function () {
    var pageLoaded = (new Date()).getTime();
    loadTimeMs = pageLoaded - pageContentRecieved;
});

这将为您提供加载页面同步部分的大致时间。更重要的是 Web 服务器为您提供内容的时间。我建议通过将页面作为 javascript 中的 API 回调来以受控方式执行此操作。

//Return previous value for page load time.
JavascriptExecutor je = (JavascriptExecutor)driver;
int pageLoad = je.executeAsyncScript("return loadTimeMs;");

//Goes into Java code.
je = (JavascriptExecutor)driver;
int apiResponseTime = je.executeAsyncScript(
    "var loadTimeMs = 0;" +
    "var pageContentRecieved = (new Date()).getTime();" +
    "$.ajax({url: "demo_test.txt", success: function(result){" +
        "var pageLoaded = (new Date()).getTime();" +
        "return pageLoaded - pageContentRecieved;" +
    "}});" +
);
int fullLoadTime = pageLoad + apiResponseTime;

最后,在现有的 selenium 测试中将这两个值相加以进行粗略/近似的性能检查。


推荐阅读