Java JMeter中的网站URL正在重定向,而不是加载测试URL

Java JMeter中的网站URL正在重定向,而不是加载测试URL,java,jmeter,load,url-redirection,load-testing,Java,Jmeter,Load,Url Redirection,Load Testing,我正在学习JMeter。在我的作业中,我需要加载一个测试URL,但测试URL实际上重定向到另一个URL。当我尝试检查HTML格式的“查看结果树”时,我没有看到任何加载的内容,但“采样器结果”是可以的 我得到以下响应数据 <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script> </head>

我正在学习JMeter。在我的作业中,我需要加载一个测试URL,但测试URL实际上重定向到另一个URL。当我尝试检查HTML格式的“查看结果树”时,我没有看到任何加载的内容,但“采样器结果”是可以的

我得到以下响应数据

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
</head>
<script type="text/javascript">

var externalURL = "cat04-partner-external.napgsys.com".toLowerCase();
internalUrl = "cat04-partner.napgsys.com".toLowerCase();


$(document).ready(function () { 
if(window.location.href.indexOf(externalURL) > -1) {
    window.location.href = window.location.href +"sso/login/#/login2";
}
else{
    window.location.href = window.location.href +"sso/login/#/login";
}
});
</script>
<!--<META http-equiv="refresh" content="0;URL=/sso">-->
</html>

var externalURL=“cat04 partner external.napgsys.com”.toLowerCase();
internalUrl=“cat04 partner.napgsys.com”.toLowerCase();
$(文档).ready(函数(){
if(window.location.href.indexOf(externalURL)>-1){
window.location.href=window.location.href+“sso/login/#/login2”;
}
否则{
window.location.href=window.location.href+“sso/login/#/login”;
}
});
我尝试了“自动重定向”和“跟随重定向”,但没有任何帮助。 如何确保它重定向到正确的URL,我可以在HTML中验证是否加载了正确的测试URL。

您尝试的选项(“自动重定向”和“遵循重定向”)适用于在服务器端重定向的应用程序,但您的应用程序使用JavaScript代码在客户端重定向,虽然JMeter的HTTP采样器在HTTP级别上运行,但不运行:

JMeter是否处理动态页面(例如Javascript和小程序)?

否。JMeter不处理嵌入HTML页面中的Javascript或小程序

JMeter可以下载相关资源(如果设置了正确的选项,则会自动下载一些嵌入式资源),但它不会处理HTML并执行任何Javascript函数

因此,您有3种选择:

  • 选项1:假装发生重定向

    • 验证返回的响应是否包含重定向代码(例如使用RegEx后处理器)
    • 向重定向的链接发出下一个请求,就像发生了重定向一样
    此方法的优点是易于实现,完全足以进行性能测试,并允许您控制每个重定向链接的用户/迭代次数(例如,您可以添加“随机”控制器,让用户随机进入
    login
    login2
    ,或吞吐量控制器,将一定比例的用户重定向到
    login
    ,其余用户重定向到
    login2

    一些人可能会意识到的缺点是,如果您还想测试JS代码,您就不会这么做。但是JMeter通常不用于客户端测试,所以这并不是这种方法的缺点,而是使用JMeter进行功能测试的缺点

    以下是此类计划的一个示例:

    在第一个请求之后,我们检查响应页面是否包含登录重定向(这是检查它的一种方法,当然还有许多其他方法)。如果成功,则认为请求成功

    然后,随机控制器确保每次我们选择
    login
    login2
    。随机。当然,您可以根据需要使用任何其他控制器,而不是随机控制器

  • 选项2:使用Selenium WebDriver采样器

    基本上,您将创建:

    Web驱动程序采样器在浏览器(客户端)上自动执行和收集性能指标。到目前为止,大部分性能测试都是在服务器端进行的。然而,随着技术的进步,HTML5、JS和CSS的改进,越来越多的逻辑和行为被推到客户端。这增加了网站/webapp的整体感知性能,但JMeter中没有此指标。增加浏览器总体执行时间的因素可能包括:

    • 客户端Javascript执行-例如AJAX、JS模板
    • CSS转换-例如3D矩阵变换、动画
    • 第三方插件-如类似Facebook、双击广告、网站分析等
    其优点如上所述。缺点是Selenium采样器的可伸缩性不如HTTP采样器,并且不能像HTTP采样器那样提高服务器的效率。与任何基于UI的测试一样,它们也需要更多的维护

  • 选项3:将两种方法结合使用

    大多数线程都运行HTTP采样器,很少有线程使用Selenium采样器测量最终用户体验。这提供了最好的覆盖范围,但当然需要在创建和维护它们方面进行更大的投资


感谢您的详细回复。我更倾向于使用第一个选项。你能告诉我更多关于这个的情况吗。我该如何实施。我将获得响应代码,然后了解如何使用Regex后处理器以及如何创建另一个请求。@Irf:我添加了一个示例,我尝试过,但不适用于我。您可以使用我的测试url进行检查,结果显示为绿色,但断言失败,如果我检查HTML(下载资源)数据,则结果为空。文本响应数据显示对象已移动此文档可能在此处找到您的问题是关于预登录的。当前的问题是关于登录的结果。我建议在一个单独的问题中发布它(包括每个请求的详细信息、您所做的断言等等)。基本上,当您登录成功时,很可能会重定向到其他页面,但除此之外,还需要更多详细信息。