如何在Loadrunner11中解决HTTP BASIC认证登录报401的问题

2024-01-13 20:58

本文主要是介绍如何在Loadrunner11中解决HTTP BASIC认证登录报401的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在对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.01.1规范的客户端(如IEFIREFOX)收到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的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/602764

相关文章

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

详解Java如何向http/https接口发出请求

《详解Java如何向http/https接口发出请求》这篇文章主要为大家详细介绍了Java如何实现向http/https接口发出请求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用Java发送web请求所用到的包都在java.net下,在具体使用时可以用如下代码,你可以把它封装成一

关于@MapperScan和@ComponentScan的使用问题

《关于@MapperScan和@ComponentScan的使用问题》文章介绍了在使用`@MapperScan`和`@ComponentScan`时可能会遇到的包扫描冲突问题,并提供了解决方法,同时,... 目录@MapperScan和@ComponentScan的使用问题报错如下原因解决办法课外拓展总结@

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组