性能测试工具 Windows 下的 Gatling 学习笔记第二季

jet · 发布于 2016年03月15日 · 最后由 568014486 回复于 2017年06月12日 · 142 次阅读
本帖已被设为精华帖!

一、淘宝惨案
我充满期待地打开了Recorder,设置好相关的参数,将FF代理打到Recorder设置的端口上,开始录制并访问双十一依然稳如狗的www.taobao.com.

这样的问题一出现,头就会很大,因为往往要去Google半天才能找到问题所在,what a xxx!
好吧,既然看起来淘宝是全站https的,自然是证书问题了。我注意到FF给的一句提示:

此网站使用了 HTTP 严格传输安全协议(HSTS),要求 Firefox 只应与其建立安全的连接。正因如此,此证书无法添加到例外。

由于我弱爆了我并不知道HSTS是什么协议,所以我又试了一下百度。

我发现百度并未使用HSTS协议什么的,还有一个救命按钮“添加例外”。

信任并添加例外后,百度果然可以正常的访问到了。

仔细回想了一下,在Recorder的设置中,的确是有关于Https的相关配置,于是查看了一下

现在原理可以大概的想通了(个人理解):Gatling Record此时是作为FF访问外网的代理服务器。现在FF这边发出一个https的请求,肯定会向淘宝服务器索要证书。然而,FF的这个请求被Recorder拦截了,Recorder返回了一个非法证书——Self-signed Certificate给FF。而且这个非法证书过于坑爹,签名摘要都没有。这个证书的颁发者是一个虚构的CA——Gatling,FF自然是不会认同,所以会提示风险。再者,淘宝采用了一个更为严格的协议,这个协议不允许浏览器添加例外,凡是证书不合法均不予访问;百度则没有采用此协议,故可以添加例外。
从官方教程http://gatling.io/docs/2.0.0-RC2/http/recorder.htmlCertificates的说明可以找到一个解决方法。中对

Steps: Generate a Certificate Authority certficate Generate a server
certificate signed by the CA certificate for the proxy. The
certificate is generated against the site domain name(s) being
recorded Import the server certificate and Chain (CA cert) into a java
keystore Import the CA certificate into the Device/Client configure
the recorder to use the custom keystore

简而言之,我需要通过openssl自己构造CA及证书,然后让Firefox认为这一切都是真的。

openssl genrsa -out device.key 2048 openssl req -new -key device.key
-out device.csr openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 1 openssl pkcs12
-export -in device.crt -inkey device.key -out server.p12 -name gatling -CAfile rootCA.pem -caname gatling -chain keytool -importkeystore -deststorepass gatling -destkeypass gatling -destkeystore gatling-custom.jks -srckeystore server.p12 -srcstoretype PKCS12
-srcstorepass gatling -alias gatling

如上的流程我暂时也无力阐述,不过在某一步要求你输入CommonName的时候,要对应的输入你要测试的目标域名如www.taobao.com。执行完毕后,会在执行目录生成如下一些文件。


把rootCA.pem通过导入功能添加到FireFox -> 高级 -> 证书 -> 查看证书 -> 证书机构中

再在Recorder的Https Mode处把原来的 Self-signed Certificate改为 Provided keystore,并Browse选择刚生成的jks后缀文件即可。

我再开始录制,访问taobao,Awesome!

注:本段内容涉及了一些关于Https的内容。由于题主在这方面确实薄弱,也只能歪打正着按照官方文档去配置出来。其中的具体细节,希望能有精通这方面的朋友指点一下,阐述一下整个流程,比如对于一个普通的https请求,如果有代理服务器的介入,浏览器是否会预警?Gatling所做的事和普通的代理服务器区别何在?为什么通过Gatling的代理访问到https页面后,图片和样式的显示都不正常?

二、HAR文件生成脚本
Gatling的Recorder提供了HAR Converter的功能。前一节所述的问题,如果用HAR Converter去解决就会很方便。
1. 用浏览器记录网络请求
打开Chrome,按开F12,选中网络面板,访问淘宝首页。

可以看到浏览器记录了所有的请求,各种静态资源js,css也在其中。

2. 保存为har文件
右击任一请求,选择 “Copy all as har”.此时你的剪贴板中已经保存了我们所需har文件的所有内容。打开你的编辑器,将内容粘贴并保存为taobao.har. har文件实际上就是描述这些请求的JSON对象,仅此而已。

3. 利用HAR Converter

在Recorder mode处选择Har Converter. Browse选择到刚才保存的Har文件,配置好相关参数后直接Start,.scala脚本就会直接生成了。录制到的urls如下:

val uri01 = "https://atanx.alicdn.com/t"
    val uri02 = "tce.alicdn.com"
    val uri03 = "https://log.mmstat.com"
    val uri04 = "https://ecpm.tanx.com/ex"
    val uri05 = "www.taobao.com"
    val uri06 = "headline.taobao.com"
    val uri07 = "gtms02.alicdn.com"
    val uri08 = "auto.alicdn.com"
    val uri09 = "cart.taobao.com"
    val uri10 = "assets.alicdn.com"
    val uri11 = "https://gtd.alicdn.com/tps"
    val uri12 = "www.taobao.com"
    val uri13 = "ossgw.alicdn.com"
    val uri14 = "dfhs.tanx.com"
    val uri15 = "https://g.alicdn.com"
    val uri16 = "https://msg.taobao.com/json"
    val uri17 = "vip.taobao.com"
    val uri18 = "mpp.taobao.com"
    val uri19 = "https://gtms01.alicdn.com/tps/i1"
    val uri20 = "https://img.alicdn.com"
    val uri21 = "opehs.tanx.com"
    val uri22 = "suggest.taobao.com"
    val uri23 = "ald.taobao.com"
    val uri24 = "https://at.alicdn.com/t"
    val uri25 = "cookiemapping.wrating.com"
    val uri26 = "https://gm.mmstat.com"
    val uri27 = "wwc.alicdn.com"
    val uri28 = "https://aecpm.alicdn.com/simba/img"
    val uri29 = "allot-mpp.taobao.com"
    val uri30 = "textlink.simba.taobao.com"
    val uri31 = "1234-a5lvd2i7mascabaxzauv4vsl--1513252938.cmos.greencompute.org"
    val uri32 = "gw.alicdn.com"

可以看到,https请求也能被正常的转换,用于后期的测试。

共收到 6 条回复
605

不错~写得很完整。

弱弱地问句, HSTS 是啥?

4181
jet · 2楼 · 2016年03月15日 作者

@chenhengjie123 有无看到文中有一句话:

由于我弱爆了我并不知道HSTS是什么协议,所以我又试了一下百度。

我还是查了下 ,点这里看 不过要真正了解那又是另一本书了。。

605

#2楼 @jet 谢谢提醒~我看得太仓促,没留意到这句话了。。。

又学习到新东西了~感谢~

3095

以为HSTS是打错的HTTPS协议呢,不错,赞一个

6504

如何监控服务器?楼主还会出继续出分享吗

96

您好,我想问一下,文中说的“如上的流程我暂时也无力阐述,不过在某一步要求你输入CommonName的时候,要对应的输入你要测试的目标域名如www.taobao.com。执行完毕后,会在执行目录生成如下一些文件。”这是在哪操作的呢?就是如何找到rootCA.pem这个文件

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册