LoadRunner 和 HTTP 401 验证

原文: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,#,接口测试)