在对Carte+kettle的性能测试过程中,通过在loadrunner中用web_set_user("cluster", "cluster","172.17.2.89:8080");可以登录carte服务页面,但是压力测试过程中发现报告中产生了大量的HTTP 401请求。虽然这个错误不影响最终的测试,但是让追求完美的我,感觉不舒服,总觉得哪里有个重要事情我没搞明白。

通过Fiddler工具也能捕捉到这个401错误,但是登录成功后,接着就是HTTP 200,这和loadrunner返回结果一致(先报401,接着就报200)。

这是为什么呢,难道是Carte服务有问题?带着这个问题上网找相关资源,同时与开发一起探讨,最终得到一个比较有说服力的解答如下:

------------------------------------------------------------------------------------------------------------------------------------------------------------------

关于BASIC认证的过程

1.  客户端向服务器请求数据,请求的内容可能是一个网页或者是一个其它的MIME类型,此时,假设客户端尚未被验证,则客户端提供如下请求至服务器:

Get /index.html HTTP/1.0
Host:www.google.com

2.  服务器向客户端发送验证请求代码401,服务器返回的数据大抵如下:

HTTP/1.0 401 Unauthorised
Server: SokEvo/1.0
WWW-Authenticate: Basic realm="google.com"
Content-Type: text/html
Content-Length: xxx

3.  当符合http1.0或1.1规范的客户端(如IE,FIREFOX)收到401返回值时,将自动弹出一个登录窗口,要求用户输入用户名和密码。

4.  用户输入用户名和密码后,将用户名及密码以BASE64加密方式加密,并将密文放入前一条请求信息中,则客户端发送的第一条请求信息则变成如下内容:

Get /index.html HTTP/1.0
Host:www.google.com
Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxx
注:xxxx....表示加密后的用户名及密码。

5.  服务器收到上述请求信息后,将Authorization字段后的用户信息取出、解密,将解密后的用户名及密码与用户数据库进行比较验证,如用户名及密码正确,服务器则根据请求,将所请求资源发送给客户端

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

说明这个401错误是由HTTP BasicAuthenticator认证机制决定的,虽然得到了解答,但我还是不满意,如何才能不报这个错呢,对比了一下Jmeter,就发现Jmeter没有这个问题,因为Jmeter通过加HTTP授权管理器就能解决,如下所示:

对比loadrunner的web_set_user函数,我们会发现,Loadrunner正是少了这个BASIC_DIGEST属性,通过网上找资料,发现一个英文的资料有很明确的说明,参考链接如下

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

针对这上面英文资料说明,我就在web_set_user("cluster", "cluster","172.17.2.89:8080");后面再加一句web_set_sockets_option("INITIAL_BASIC_AUTH","1"); 然后回放脚本,不再报401错误,很正常的显示出HTTP 200,而且直接马上显示完美的 Show status !  给自己鼓个掌!!!!!

最后提供一下http 基本认证登录的脚本以供大家参考:

web_set_user("cluster", 
                "cluster",  //r_decrypt("58cf7265b1677820107f74"), //可以选择对密码加密
                "172.17.2.89:8080");

web_set_sockets_option("INITIAL_BASIC_AUTH","1");

web_url("172.17.2.89:8080", 
                  "URL=http://172.17.2.89:8080/", 
                  "Resource=0", 
                  "RecContentType=text/html", 
                  "Referer=", 
                  "Snapshot=t2.inf", 
                  "Mode=HTTP", 
       LAST);

 

如何在Loadrunner11中解决HTTP BASIC认证登录报401的问题的更多相关文章

  1. 如何在 Linux 中配置基于密钥认证的 SSH

    什么是基于 SSH 密钥的认证? 众所周知,Secure Shell,又称 SSH,是允许你通过无安全网络(例如 Internet)和远程系统之间安全访问/通信的加密网络协议.无论何时使用 SSH 在 ...

  2. 如何在CSS中解决长英文单词的页面显示问题?CSS3

    简言 在页面排版中,经常遇到长英文单词溢出段落容器的情况,如何解决该问题?现编制如下对比演示程序: 演示程序 42du.cn-在线演示程序 部分html代码 <div class="b ...

  3. 如何在 pyqt 中解决国际化 tr() 函数不起作用的问题

    前言 有些时候我们在父类中使用了 self.tr('XXX'),使用 Qt Linguist 完成翻译并导出 qm 文件后,发现子类中仍然是英文原文.比如下面这段代码: class AlbumCard ...

  4. 如何在 iOS 中解决循环引用的问题

    稍有常识的人都知道在 iOS 开发时,我们经常会遇到循环引用的问题,比如两个强指针相互引用,但是这种简单的情况作为稍有经验的开发者都会轻松地查找出来. 但是遇到下面这样的情况,如果只看其实现代码,也很 ...

  5. 如何在 pyqt 中解决启用 DPI 缩放后 QIcon 模糊的问题

    问题描述 如今显示器的分辨率越来越高,如果不启用 DPI 缩放,软件的字体和图标在高分屏下就会显得非常小,看得很累人.从 5.6 版本开始,Qt 便能支持 DPI 缩放功能,Qt6 开始这个功能是默认 ...

  6. 解决spring+shiro cacheManager 登录报错

    一.项目启动,登录报错 org.springframework.beans.factory.BeanCreationException: Error creating bean with name ' ...

  7. [ASP.NET MVC] 利用自定义的AuthenticationFilter实现Basic认证

    很多情况下目标Action方法都要求在一个安全上下文中被执行,这里所谓的安全上下文主要指的是当前请求者是一个经过授权的用户.授权的本质就是让用户在他许可的权限范围内做他能够做的事情,授权的前提是请求者 ...

  8. 如何在Dreamweaver中使用emmet

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=3666 一.emmet ...

  9. 利用自定义的AuthenticationFilter实现Basic认证

    [ASP.NET MVC] 利用自定义的AuthenticationFilter实现Basic认证   很多情况下目标Action方法都要求在一个安全上下文中被执行,这里所谓的安全上下文主要指的是当前 ...

随机推荐

  1. sublime3设置快捷键在浏览器打开预览

    我下的st3默认不能使用快捷键在浏览器打开,所以要找到源文件然后选择在浏览器打开,非常麻烦.找了很久,终于找到了一个在浏览器打开的快捷方式. 亲测有效. 1.确保你的st3已经安装了package c ...

  2. percona-toolkit使用教程

    1:慢日志查询 [root@test_dx modify]# wget percona.com/get/pt-query-digest [root@test_dx modify]# file pt-q ...

  3. 网络基础篇(一)--TCP/IP协议族

    TCP/IP协议族是一个分层,多协议通信体系. 1 TCP/IP协议族体系结构 TCP/IP协议族自底而上分为四层: 数据链路层, 网络层, 传输层和应用层. 1.1 数据链路层 实现网卡接口的网络驱 ...

  4. Eclipse搭建maven开发环境

    上一篇学习了maven开发环境的搭建,而且手动编写了一个mavenproject,可是这样子效率非常低下.今天带大家学习在eclipse下搭建maven开发环境. 经常使用的maven命令 mvn c ...

  5. UVa 263 - Number Chains

    题目:给你一个数字n0.将它的每一个位的数字按递增排序生成数a,按递减排序生成数b, 新的数字为n1 = a-b,下次依照相同方法计算n1,知道出现循环,问计算了多少次. 分析:数论.模拟.直接模拟计 ...

  6. jQuery - 选中复选框则弹出提示框

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  7. C++重载运算符简单总结

    当运算符作用于类类型的运算对象时,可以通过运算符重载重新定义该运算符的含义.明智的使用运算符重载能令我们的程序更易于编写和阅读. 一.基本概念 什么是运算符重载?重载的运算符是具有特殊名字的函数:它们 ...

  8. wesome-android

    awesome-android Introduction android libs from github System requirements Android Notice If the lib ...

  9. hdu 2177(威佐夫博奕+打表)

    取(2堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  10. Codeforces--630K--Indivisibility(容斥)

     K - Indivisibility Crawling in process... Crawling failed Time Limit:500MS     Memory Limit:65536 ...