美文网首页
LoadRunner 和 HTTP 401 验证

LoadRunner 和 HTTP 401 验证

作者: smooth00 | 来源:发表于2018-05-09 08:26 被阅读10次

    原文:https://ptfrontline.wordpress.com/2009/12/23/loadrunner-http-401-authentication/

    译文(转载请标注smooth的博客):

            在笔者最近做的一个项目中,偶然发现了一个HTTP验证机制方面的有趣问题。

            本人有一个设备对设备(M2M)的接口,在这个接口上用户(客户端)使用HTTP验证来确认是他们自己向服务器传输数据。在这种情况下,没有收到来自服务器对于HTTP 401的响应,因为该用户(客户端)在初始请求中包含了身份验证的信息。

            笔者发现LoadRunner不会出现相同的情况。它会在实际发送验证信息之前,先等待HTTP 401响应。如果我们模拟一个专为使用者服务的网络服务,那么这是一个正确的动作,但是在本次案例中,LoadRunner是执行了一个额外的POST请求,而这导致了灾难性的结果,因为这样我一共执行了两个额外的POST请求!

           这带来的后果是,我们向整个网络提交了双倍的数据量、向服务器提交了双倍的请求,并因此使连接到服务器的实际负载和吞吐量加倍!

           为了解决这个问题,笔者只能在初始请求中包含验证表头。为实现这一操作,笔者使用了Base64Encoder (Base64编码/解码工具)制作所需的HTTP验证基础表头信息,然后使用web_add_header功能添加到请求中。

            以下是本项目中体现如何创建和使用自定义验证表头的代码段:

    // Must remove stdauth mechanism since this causes 2POSTS instead of one

    // web_set_user( "{Username}","{Password}", "{Domain}:8000" );

    // Create Base64 encoded string

    b64_encode_string( "{Username}:{Password}","BasicAuth" );   //b64_encode_string函数在网上能搜索到,在此不另提供

    // Add HTTP Authorization header "Authorization:Basic XXXXXXXXXXXXXXXXXX==\r\n"

    web_add_header("Authorization",lr_eval_string("Basic {BasicAuth}"));

    lr_start_transaction("Custom_HTTP_Auth");

    web_custom_request("Custom_HTTP_Auth",

        "Method=POST",

        "EncType=text/xml;charset=\"UTF-8\"",

    "URL=http://{Domain}/{Path}/{Document}"

        "BodyFilePath=XML.xml",

       LAST);

    lr_end_transaction("Custom_HTTP_Auth",LR_AUTO);

           此外我还发现了另外一种可能有效的办法。这种方法目前只用LR11.03试验过有效。参见如下:

    // Standard Web Set User here

    web_set_user( "{Username}","{Password}", "{Domain}:8000" );

    // Set UNDOCUMENTED socket option to make LR sendAuthentication headers with every request to the domain

    web_set_sockets_option("INITIAL_BASIC_AUTH","1");

    lr_start_transaction("Custom_HTTP_Auth");

    // Now the HTTP request adds the Authentication headerautomatically without receiving

    // a HTTP 401 first and then sending the auth header.

    web_custom_request("Custom_HTTP_Auth",

        "Method=POST",

        "EncType=text/xml;charset=\"UTF-8\"",

    "URL=http://{Domain}/{Path}/{Document}"

        "BodyFilePath=XML.xml",

        LAST);

    lr_end_transaction("Custom_HTTP_Auth",LR_AUTO);

    相关文章

      网友评论

          本文标题:LoadRunner 和 HTTP 401 验证

          本文链接:https://www.haomeiwen.com/subject/vbhirftx.html