RFS的web自动化验收测试——RIDE升级说明(顺便解决0.47及之后版本执行显示中文乱码)
引言:什么是RFS——RobotFramework+Selenium2library,本系列主要介绍web自动化验收测试方面。
( @齐涛-道长 新浪微博)
话说最新RIDE升级比较频繁,前几天还看的是0.47,转眼就变成0.49了,所以我觉得有必要放两个列表,列出RIDE的各个版本影响比较重大的问题及解决办法以及各版本的优点,方便后来的童鞋寻找答案。
BUG列表:
RIDE版本问题表现解决办法0.46.1中文目录执行报错升级到0.470.47执行页面显示中文乱码修改encodingsniffer.py文件
版本优点:
RIDE版本优点备注0.47修复了0.46.1的中文目录执行报错问题0.48增加显示log内容的页面0.49还没仔细研究
之前有位朋友说RIDE0.46.1的版本无法执行中文目录,开始我以为是脚本问题,后来发现这确实是RIDE的bug,所幸发现RIDE正好升级了0.47,解决了这个问题。
不过由此引发了一个新的问题就是执行的时候显示的是乱码,经过苦苦研究,终于找到问题解决办法,详见下文。
(当前RIDE最新版本0.49)
中文乱码解决方案(适用于0.47-0.49)——目前该方案基于Robotframework2.7.3,对于RF2.6的我下周找个机器试验一下再更新。
==修改[Python目录]\Lib\site-packages\robotide\lib\robot\utils中的encodingsniffer.py
if UNIXY: DEFAULT_SYSTEM_ENCODING = 'UTF-8' DEFAULT_OUTPUT_ENCODING = 'UTF-8'else: DEFAULT_SYSTEM_ENCODING = 'cp1252' DEFAULT_OUTPUT_ENCODING = 'cp437'
将DEFAULT_OUTPUT_ENCODING = 'cp437'修改为 DEFAULT_OUTPUT_ENCODING = 'cp936'
如果第一次使用RIDE,请同时修改D:\Python27\Lib\site-packages\robot\utils中的encodingsniffer.py
修改的地方一样,也是将DEFAULT_OUTPUT_ENCODING = 'cp437'修改为 DEFAULT_OUTPUT_ENCODING = 'cp936'
(如果看过前面文章的童鞋应该已经是修改过了)
====解决过程====
因为正好看到RIDE升级到0.47,其中修复的一个bug有点像前面一个朋友留言的错误,进去看了一下发现果然是中文的问题,于是把RIDE升级了,发现确实解决了问题,不过带来了新的问题。(图用的是0.49的,解决方式都一样)
于是跑到RIDE的Google-code那里去提了个issue:http://code.google.com/p/robotframework-ride/issues/detail?id=1025
(英文很烂滴说,大家不要笑我哈)
后来一直忙于版本上线,没工夫细看,终于今天想彻底解决一下,就在site-packages里的robot和robotide两个目录里来回找,然后看0.47修改了哪里。
找是找到了,在robotide/contrib/testrunner/testrunnerplugin.py这个文件里,于是尝试直接在这边调用SYSTEM_ENCODING的地方直接修改,无意中试验出一次能正确显示中文了,结果我想试试其他版本是不是也一起解决了,就继续装了0.49。
然后悲催的发现又变成乱码了。
后来看到robotide\lib\robot\utils下面也有一个encodingsniffer.py文件,里面也有编码设置,就尝试在这里修改了一下。
神奇的事情出现了,真的正常了~~
因为每次重装RIDE,肯定是把robotide目录的内容更新了,所以这也是导致安装新版本后又变成乱码的原因,于是反复的安装这几个版本,都用上面的方法解决了,很是兴奋~!
但是想到这样要2个地方都修改,很麻烦啊,我猜是不是他现在只是用robotide目录的那个文件做encoding了呢?
于是跑去把robot目录里的文件修改回cp437,结果变成以前的显示问号了。
最终的结论就是,这2个地方的encoding都起作用,缺一不可。至少目前是必须2个地方都修改才能解决中文问题。
由此引发的猜想,也是我在issue里最后写的,这可能是一个bug,因为有可能RIDE用了错误的encoding,如果最终确定是个问题了,那么等修复以后估计还是只需要维护robot里的encoding就可以了。