提问人:aayush goel 提问时间:2/6/2020 更新时间:2/6/2020 访问量:98
我们如何使用现有的 selenium 脚本 (java) 来获得一些端到端性能指标(低负载)
How can we use existing selenium scripts (java) to get some end to end performance metrics (low load)
问:
我正在尝试利用自动化团队开发的 java 中现有的 selenium 自动化脚本来获得一些端到端性能指标(总页面加载时间等)——非常小的负载,与 api 负载测试并行。
请让我知道最有效的方法是什么。此外,我正在寻找对 selenium 脚本进行最小的更改,因为这将是每个版本的持续活动,并且我正在寻找使用功能脚本,因为它与性能包装器一样。
您的建议将不胜感激。
谢谢!
答:
0赞
Asyranok
2/6/2020
#1
我会避免使用 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;
最后,将这两个值相加,以便在现有硒测试的中间进行粗略/近似的性能检查。
评论
0赞
aayush goel
2/6/2020
感谢@Asyranok的建议,正如我之前提到的,这个测试的目的不是加载,而是测量 1 或 2 个并发用户的页面加载时间。我们计划与后端 API 负载测试并行执行此测试。现在回到您的建议,是否可以用 java 重写此代码,因为我们的 selenium 脚本是用该语言编写的。
0赞
Asyranok
2/6/2020
是的,我的测试不是测试“负载”。它正在测试页面加载时间。我上面的例子是针对你的 Java。我从我的 Java Selenium 框架中复制了它。所以第一个代码块是 javascript。如果你正在测试一个网页,那么它可以读取 Javascript,因为就脚本而言,这是互联网的全球语言。我建议将第一个代码块放到您正在测试的页面上。第二个代码块是 Java,在被测试的页面上执行 Javascript。
评论