Tricentis是奥地利的一家企业,专门帮助企业开发团队进行自动化软件测试,我司领导高瞻远瞩,直接拿下性能和自动化两款软件,意图是通过这种全面强大的软件,并且界面话好上手的工具,迅速建立这样的自动化流程。
性能测试工具叫做neoload
它可以支持SAPGUI的录制,web页面的录制,以及自定义的api编写,webservice协议等。分为脚本,场景,执行监控,和报告几个目录,它的强大之处就是页面
和接口可以做混合场景,生成同一个测试报告。页面风格类似于jmeter。这款软件具有非常强大的报告展示和监控分析体系,是SAP公司指定的性能测试工具,我个人非常喜欢这款工具的易用性。目前使用已经非常纯属。它相当于loadrunner和jmeter的结合体。
自动化测试工具叫做Tosca Commander
这款自动化工具支持web页面,app,以及web api,webservice,socket等协议的脚本录制。
页面录制跟传统的录制工具基本一致,就是采用元素拾取,以及动作赋予这样的方式。我个人觉得UI录制这一块几乎就是纯手工的工作模式,总体不是很好用,但是好在你不需要代码基础,基本上适合小白使用。web页面的接口捕获也是跟ui录制一个套路,只不过捕获到的是url。也可以读取RFC文件,这个跟soapUI的功能差不多。这款工具包含一个服务端工程,类似于git的协作模式,所以适合多人协作开发。
整个学习过程几乎就是自学成才了
讲师是来自印度的咖喱牛肉味的英文,听起来还是比较吃力的,另外他们可能也不是技术人员,如果你问他们一些跟其他应用对接的事情,比如能不能调用python脚本,批处理文件,或者调用数据库,缓存服务器这些东西他们也回答不出来。软件的页面没有汉化包,官网的教材也是纯英文的,所以语言障碍是我们比较难的一关,但是好在有英语好的人可以给翻译,另外官方文档的话也可以自己慢慢翻译着看。
第一坑:移动设备不兼容
设备不兼容主要是我们国家的安卓手机那是世界第一丰富的,一个人的脚本给另外一个人用,或者续写,他就执行失败了,这个跟页面元素的标记不规范也有关系,另外屏幕分辨率也不一致,尤其是列表显示的长度也不一样,滚屏次数也会有一定的限制。那么最后还是统一制定一类屏幕尺寸的手机,或者统一使用模拟器执行。
第二坑,图形验证码,手机验证码
主要是涉及到登录页面,这种一般我们做自动化都是做api自动化了,但是非要做UI自动化,那工具是无法识别验证码的,那么最后是通过python开发了查询redis或者mysql的接口,然后用工具去调用,直接获取答案,然后填进验证码的输入框实现的。
第三坑,移动端API的抓取的实现给我造成了心理创伤
老师讲课的时候只讲了web页面的api录制,其他的也就一概不知了。但是从原理上来说,只要手机端的代理挂在这个Tosca的代理服务器上,那么手机端的操作肯定就可以被Tosca捕获的了,我们也通过一些简单的测试实现了这一点,但是实战的时候还是遇到了麻烦。
1、我们打开Tosca的抓包工具
2、打开电脑的intnet设置,查看代理,从而找到Tosca的代理服务器端口
3、在手机端类似于fiddler和Charles一样的方法,在wifi里面设置好代理
4、从浏览器里找到Tosca的ssl证书,把它传给手机并且安装
5、手机浏览器打开百度,看一下https是不是抓到并且解析出来了
6、设置成功之后,打开我们的内部app,发现手机可以上网,Tosca也能抓到一部分内容,但是只是视图层这些html文件什么的,接口其实并没有抓到。
7、后来用fiddler尝试了一下,也是一样的情况。
8、网上有说是http协议版本的问题,所以后来下载了fiddler的另外一个版本,叫fiddler everywhere,结果还是抓不到
9、后来有人推荐了reqable这个工具,是直接安装到手机里面的,这个确实就可以抓到,但是手机抓到了,Tosca没有接收到啊,这还不如看api文档呢,另外就是手机屏幕太小了,这个小窗口根本就看不清楚哪些接口是有用的,尤其是作为一个纯测试开发,对业务流程还不了解的情况下,根本无法分辨出来上下步骤。
10、于是放弃reqable这个工具,又上网查询一下,首先抓包抓不到的问题是因为使用安卓7.0以上系统,安卓会做安全防护过滤,只信任系统证书不信任用户证书的代理,而安卓7.0以下系统的手机其实现在都是老机器了,已经不太好找了,所以决定使用android studio模拟器来模拟这样的手机出来进行抓包。
11、下载studio的过程很快,但是下载SDK的过程很漫长,不过还好我的其它电脑里有完整的包,传过来之后,找到sudio读取SDK的路径,把它塞进去就好了,然后更换一下下载源为阿里,以后再下载新的包就没那么费劲了。
12、我分别下载了4.0系统,5.0系统,6.0系统,以备使用。然后先生成一个6.0的模拟器,然后启动之后黑屏,试了几个方法没有解决。
13、又生成了一个5.0系统的模拟器,这个可以启动成功了。
14、安装apk包的时候又报错了,原因是内核不一样,所以又用android studio自带的一个分析工具分析了一下apk这个包的内核版本,更换了一下模拟器的内核,这才安装成功。
15、启动apk成功,但是又一个问题出现了,由于这个app启动的时候有一个自动播放的动画,然后这个虚拟机就无限弹视频无法播放,又是查了很多资料,没有解决,因为这个涉及到的可能还有电脑的图形驱动,或者模拟器的类型,就是神乎其神的一看就很假的答案,为了验证这个问题,我又创建了一个安卓12的模拟器,启动之后动画正常播放,所以幸好没有听网上说的,把电脑的驱动乱换一通,而且还有一个问题就是,andoid SDK的老毛病,就是特别特别卡,卡到点什么都没有反应。
16、于是找了一款安卓游戏的模拟器,分别下载了雷电模拟器和MUMU模拟器,但是我印象里它们是可以选安卓系统版本的,但是可惜都不行,默认选了几个机型,都是9.0以上的系统,但是人家这个就是很丝滑,跟真手机一样好用。
17、由于模拟器是在电脑上运行的,我就尝试用网络桥接的模式,去监听安卓模拟器的请求,结果跟真的手机一样保密。
18、最后还是给模拟器里安装了reqable,因为这个reqable属于内部监听的,可以跟电脑端有一个同步传送的功能。这样的话手机里reqable抓到的东西在电脑上就可以看到了。
19、电脑端看到这些消息之后呢,我就尝试启动Tosca的抓包,然后让reqable重新发送一下请求,试图抓到Tosca里面,但是还是失败了,这个我觉得很奇怪的,因为同样的方式,假设我用fiddler读取一个抓包文件,replay一下,我的Tosca就可以抓到fiddler发送的请求,但是reqable的就是不可以,相反的,reqable能抓到fiddler和Tosca发出的请求。
20、于是就尝试把reable抓到的请求文本,复制到fiddler里面去执行,但是数据结构可能不一样,还是执行失败了。
21、然后发现reqable可以把请求结果生成一个写好的python脚本,于是我就把python脚本复制出来扔到pycharm里面执行,结果是执行成功。
22、然后打开Tosca,然后执行python脚本,就报ssl握手失败,超时。
23、起初以为pycharm版本的问题,因为印象里我执行pycharm里的代码时,fiddler是可以抓到包的
24、换成fiddler代理,结果pycharm执行还是握手失败
25、后来给pycharm设置代理,以及给python脚本加上代理,以及证书验证忽略,警告提醒忽略都不管用
26、然后我觉得应该是pycharm的问题,就直接用CMD执行python文件,结果还是一样的
27、这就说明是python本身的问题,与pycharm没有关系,我差点就把它噶了
28、确认是python本身的问题之后,我就突然想起来一件事,就是这个问题好些年前我遇到过,当时是帮别人解决的这个问题。我这个时候才想起来这个,于是把requests库降级到大概四年前的一个版本,降级之后一执行,发现可以握手成功了,pycharm的请求可以被fiddler抓到了,然后再开启Tosca代理,让fiddler replay一下,成功。
29、那其实Tosca直接抓pycharm也是可以的,但是Tosca只是显示出来原始的抓包结果,无法调试,我用fiddler去抓的主要原因是我熟悉这个界面,可以清楚的看到步骤,结构,能更快的判断出哪些参数需要做提取和传递。
30、其实这个问题最简单的解决方法就是采购点安卓7.0以下系统的老机器,直接抓。但是多年的测试开发经验告诉我,虚拟机的逼格要比真机高,你做自动化的,还天天手里拿个手机,这很没风度。还浪费公司的财产。
31、最后有同事又提出了一个课题,就是拼图型的验证码,怎么做自动化,我一听到这个消息脑袋都大了,但是同时也很兴奋,我希望我还能解决这个问题。