LR访问Https接口

时间:2021-04-17 13:07:14

前言

        已经3年多没有使用LR了,这期间也发生了很多技术更新,通过这次的任务发现其实每次技术的更新和改革带来的就是考研技术人员的学习和研究能力,如何能够快速更新个人的知识库显得尤为重要。比如,这次公司对某产品要进行https类型接口的压测,我的想法是对于压测这件事而言无任何阻碍,但最大的问题是如何攻破没接触过的https。或许这种问题对于做过的人而言轻而易举,可难点就在于难了不会会了不难以及如何从无到有的完成这件事情,结果或许就是几行代码可背后却是一个又一个需要了解的知识。废话不多说,我写技术文章或者做技术的一贯套路就是实践先行,后升华成理论。原因是在这个快速迭代的互联网时代中,效率和结果导向才是最重要的。另外,我基本通翻了网络上的技术文章以及LR的官方帮助手册发现普遍存在着介绍大概并不能够针对不同情况对症下药,而我这次写的这篇文章一定会是真真正正的对于不同情况的对症下药。



实操篇

第一步:需要跟开发或者运维要到要访问的https接口的证书(有关证书的问题我们在原理中有解释)。

第二步:确定要来的证书的格式是否为pem格式的。首先,LR只能够识别pem格式的证书而且是DER类型的pem格式的证书。其次,如果要来的证书为非pem格式的则需要进行证书格式的转换。(见第三步)

第三步:对crt格式证书进行DER类型的pem格式的证书转化。

解决办法:

1、 先从iecrt证书安装到本机,然后再以cer格式导出证书


LR访问Https接口

2、 Linux系统下执行命令:openssl x509 -in 文件名称.cer -inform der -outform pem -out 文件名称.pem

3、 如果是windows系统下需要安装opensslLinux系统下直接执行即可。

第四步:在LR下配置证书

解决办法:

1、 Edit Recording Options(录制设置)中配置Port Mapping

LR访问Https接口

LR访问Https接口

注释1:这块如果有需要指定某台服务器可以输入ip,如果像我们公司是做海外产品且服务器部署在海外且ip访问无效的情况下可以选择Any Ssever

注释2:端口号必须为433,常识啊。http默认为80https默认为443

注释3httphttps的区别就在这,原理会讲在这里可以一套雾水照着配置哦。

注释4SSL Version必定选择截图,不要问我为什么,Tseng先生查遍官方文档也没找到所以然,对于哥这么“刨根问底”的人而言很痛苦可是这么配置肯定没错。当然这个问题后续我会继续研究。

注释5:很明显嘛,就不用解释太多了,请选择你转化好的DER类型的PEM格式的证书的路径。

注释6:这个问题会很突出。为啥还有密码?密码是为了干嘛?尼妹的没有密码怎么办?没有就不填呗。有密码就要来填上呗,反正当时我挺纠结。尼玛还要登录是咋滴!当然原理中还是会介绍滴。

2、 配置完毕当然是Update难道会是Cancel么?原谅我手欠的人才这么干!

3、 作为攻城狮配置完毕是不是应该规范的检查一遍?否则你怎么舍得叫攻城狮呢?

PS:作为号称当年玩烂LR的攻城狮我汗颜的是之前竟然把配置证书这步当成了录制必备,换句话说我误以为用web_set_certificate_ex();写在请求前就算完成了证书匹配的过程,坑爹啊网上的技术文章不可信啊!说话还要看语境呢!你写这些误导谁呀?对,都是他们的错。呵呵~~下面附该函数的具体使用格式,反正每个参数官方帮助写的跟没写一样,我猜都猜出来了。声明下真正生效的是按照上面的配置方法,在这里你就认为我炫技吧,这个函数唯一的用处就是录制后会出现,目前我是这么理解的反正我也不知道对不对:

web_set_certificate_ex("CertFilePath=mobimagic.pem",

                "CertFormat=PEM",

                "KeyFilePath=mobimagic.pem",

                "KeyFormat=PEM",

                "Password=123456",

                "CertIndex=1",

                LAST);

官方解释:

LR访问Https接口

第五步:证书都配置完毕了,那就是写请求呗。别告诉getpost都分不清楚。反正getpost请求就那么几个函数。web_link();web_url();web_submit_data();web_submit_form();一堆一堆的,我就是想炫耀知识渊博,其实跟高手比还是个战五渣。这里想提醒的是,如果你的post请求写在body里了还特么加密了咋整?这些请求函数都不好使,换web_custom_request();吧。

LR访问Https接口

第六步:神圣的时刻,F5运行下

LR访问Https接口

第七步:诶呦?你以为这就结束了?这就was successful了?如果你运气不好会碰到报错。

LR访问Https接口

解决办法:

    到Run-time Setting(运行设置)中将图内的选项勾选,这个选项从网上查到的解释是“VuGen专用的基于套接字的重播是一种可伸缩以便进行负载测试的轻型引擎。使用线程时是准确的。基于套接字的引擎不支持socks代理服务器。如果在这样的环境中录制,应该使用winInet重播引擎。”但是至于为什么这么用作为下一个课题进行研究。

LR访问Https接口

第八步:此刻你会惊喜万事大吉么?NO!你以为LR是有多智能?他说was successfulsuccessful了?作为攻城狮责任一定要到底!你当然需要到服务端查看下你发的请求的状态码是不是200?传送body里是否有内容?返回是不是正确的了?废话不多说,上图。

LR访问Https接口

看到了么?windows的机器的请求,这就够了。另外,作为攻城狮是不是要发散下?为了模拟正常的用户行为我们是不是访问这个接口会有N多种机器型号?肿么办?用web_add_header();进行参数化呗,你想要什么header就出什么header

                                                                                                       至此,实操篇结束。

   题外话:以上只是真正做压测的第一步,至于如何进行完整的压测,怎么设置压力机?如何设置监控指标?设置哪些监控指标?监控目标应该是啥?如何进行场景鸡舍?如何进行数据分析?不同的数据之间有什么联系?每个指标代表了什么?等等等等,太多了,后续我会继续写文章,包括技术的周边。



理论篇

小注:

每次说到原理、理论都是大家特别反感的原因是这些东西很枯燥,但是高中哲学的唯物主义辩证法中有这么个原理和方法论就是实践与认知的辩证关系。其中里面说的很清楚,实践是认识的基础。实践是认识的来源;实践是认识发展的动力;实践是检验认识真理性的唯一标准;实践是认识的目的和归宿。认识对实践具有反作用。其实归纳下就一点理论是实践的升华。

 

说到https必然要先了解到https是个什么?他和很像的http有啥关系?那http是啥?我觉得,理论的东西大漫天且研究论证的过程很艰辛这些交给科学家就好我们没必要去了解那么深只需要知道大体是怎么回事怎么应用就好。其实,简单说来HTTP协议传输的数据都是未加密的,因此使用HTTP协议传输隐私信息非常不安全。为了保证这些隐私数据能加密传输,于是网景公司设计了SSLSecure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPSHTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。因此将原来的http换成了https链接。

那么问题来了,实操中说到证书和上边介绍的加密有啥关系呢?答案是,https属于非对称加密,需要公钥和私钥才能完全得到想要的数据,换句说公钥可以进行访问,私钥相当于可以造数据,换成普通话说想要知道https怎样加解密需要两把钥匙一把是公钥一把是私钥,这两把钥匙是各司其职。接下来就会有个问题,https的工作流程是如何进行的?我估计这个问题你网上一搜一大把,但是纯理论不接地气,我想说的是以往的http请求无需身份验证就可以直接做请求来者不拒,但是https相当于在做请求前先要进行一下身份验证,这个验证就需要到公钥有的公司为了更安全可能设置了密码,所以大体的请求交互流程就是身份验证通过后进行请求。从代码流程上就要分身份验证和请求两块,也就是说要将获取到的证书先进行配置在进行验证最后执行请求函数。当然,这里说的简单些,原因是基于LR进行的脚本输出。

总结下,做这件事其实难度不大,关键点在于如何了解https周边的这些问题,然后根据所需的工具或者语言一步一步的拆解。或许在拆解的过程中会遇到很多问题,但是解决问题除了埋头研究外更多的还是请教沟通,所以感谢公司各个岗位的攻城狮们,东阳、保威、鑫哥、倩倩等等。


http://mp.weixin.qq.com/s/c2Eze_GwxENwpDQObbFUKA