Robot Framework(RF)是一款用python编写的功能自动化测试框架,其具备良好的扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,也可以进行分布式测试,主要用于轮次很多的验收测试和验收测试驱动开发(ATDD)。当前有很多大公司内部逐渐开始采用RF框架进行测试工作,最近由于需要使用RF,但是系统上只装了py3.6,因此便重新配置了一下python3上的RF。以下为笔者的配置流程和遇见的问题,分享在此处以便于后续参考,后续若遇见相关问题也会在此处加以更新补充!
python3环境下,只要安装好了pip,就可以直接通过以下方式安装RF环境了。
pip install robotframework
pip install wxPython(有网友说wxPython-4.0.4 使用时候会问题,笔者测试了下,4.0.3和4.04都可以正常运行)
pip install robotframework-ride
pip install Pypubsub==3.3.0 (RF要求为3.3.0版本,版本过高会出现兼容问题)
以下为笔者的RF相关配置,及其版本信息:
python 3.6.6
window10 pro X64
robotframework 3.1.1
robotframework-ride 1.7.3.1
robotframeworklexer 1.1
wxPython 4.0.4
安装成功后,若无错误,则在***python3.6.6\Scripts下执行python ride.py,可正常出现RIDE主界面。
2.1、依赖说明
RIDE1.7.3.*版本当前可以支持python3.6和python3.7,其对wxpython和Pypubsub的版本有一定要求,具体版本兼容性以官方为主,笔者py3.6.6可以支持wxPython的4.0.3和4.0.4等较新版本,但robotframework-ride 1.7.3.1 正常运行时Pypubsub版本不能太新,当前要求兼容版本为:Pypubsub==3.3.0。
2.2、添加桌面快捷方式
使用pip安装RIDE后,默认没有桌面快捷方式,此时需要在桌面新建一个快捷方式或者直接拷贝一个快捷方式,然后更新快捷方式的信息,笔者直接拷贝一个快捷方式,然后更改其如下信息,如下图:
其中,Target、Start in、Icon path的值分别为如下内容(此处需要根据个人情况修改路径):
E:\Software\Python\python3.6.6\python.exe -m robotide.__init__
E:\Software\Python\python3.6.6\Scripts
E:\Software\Python\python3.6.6\Lib\site-packages\robotide\widgets\robot.ico
此外,也可以直接新建一个bat脚本来运行ride,bat脚本内容如下(此处需根据个人情况修改路径):
cd E:\Software\Python\python3.6.6\Scripts
start /b python ride.py
2.3、ride运行时出现wxSystemSettingsNative::GetFont错误
在安装后,在Scripts下执行python ride.py出现如下错误:
E:\Software\Python\python3.6.6\python.exe E:/Software/Python/python3.6.6/Scripts/ride.py
Traceback (most recent call last):
File "E:\Software\Python\python3.6.6\lib\site-packages\robotide\application\application.py", line 59, in OnInit
self._plugin_loader.enable_plugins()
......
File "E:\Software\Python\python3.6.6\lib\site-packages\robotide\contrib\testrunner\testrunnerplugin.py", line 769, in _create_output_textctrl
font = self._create_font()
File "E:\Software\Python\python3.6.6\lib\site-packages\robotide\contrib\testrunner\testrunnerplugin.py", line 789, in _create_font
font=wx.SystemSettings.GetFont(wx.SYS_ANSI_FIXED_FONT)
wx._core.wxAssertionError: C++ assertion "wxFontEnumerator::IsValidFacename(font.GetFaceName())" failed at ..\..\src\msw\settings.cpp(301) in wxSystemSettingsNative::GetFont():
OnInit returned false, exiting...
Error in atexit._run_exitfuncs:
wx._core.wxAssertionError: C++ assertion "GetEventHandler() == this" failed at ..\..\src\common\wincmn.cpp(478) in wxWindowBase::~wxWindowBase(): any pushed event handlers must have been removed
发现_create_font()相关函数出错,导致RIDE的UI启动失败,通过pycharm找到python3.6.6\Lib\site-packages\robotide\contrib\testrunner\testrunnerplugin.py文件,其中包含_create_font函数,传入了一个wx.SYS_ANSI_FIXED_FONT表示字体index的参数,源码如下:
def _create_font(self):
font=wx.SystemSettings.GetFont(wx.SYS_ANSI_FIXED_FONT)
if not font.IsFixedWidth():
# fixed width fonts are typically a little bigger than their
# variable width peers so subtract one from the point size.
font = wx.Font(font.GetPointSize()-1, wx.FONTFAMILY_MODERN,
wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)
return font
笔者使用单独测试了以下,发现wx.FONTWEIGHT_NORMAL也是一个int类型的索引,其对应一种类型的字体,其中wx包含SYS_ANSI_FIXED_FONT、SYS_ANSI_VAR_FONT等参数,其对应的值为11和12,由此推测正常情况下可修改此处的wx.SYS_ANSI_FIXED_FONT为0-10以及其它可用的数值,笔者依次修改0-13,发现笔者系统上0-8、10、12、13均可正常运行RIDE,9和11类型不可以。查阅wxSystemSettings 资料后发现wx.SYS_SYSTEM_FONT为西字体,因此笔者将其改为wx.SYS_SYSTEM_FONT;wxSystemSettings 中列举了一些字体的说明,可根据相应说明修改此处参数,如下图所示:
以下为笔者修改后的内容,以及修改后RIDE运行成功的主界面:
def _create_font(self):
#font=wx.SystemSettings.GetFont(wx.SYS_ANSI_FIXED_FONT) #default font has error
font = wx.SystemSettings.GetFont(wx.SYS_SYSTEM_FONT) #set a number in [0-8,10,13],then run ride successfully,SYS_SYSTEM_FONT=13,represents system font
if not font.IsFixedWidth():
# fixed width fonts are typically a little bigger than their
# variable width peers so subtract one from the point size.
font = wx.Font(font.GetPointSize()-1, wx.FONTFAMILY_MODERN,
wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)
return font
通过以上方法基本可以解决RIDE运行错误(有网友提到重装系统可解决该问题,重装一下系统似乎不太划算),但为何有些字体会导致其执行失败,笔者暂未搞清楚,有明白的欢迎留言!
以上默认测试环境为python3.6.6,测试系统为Windows10 x64
参考文献:
[1] robotframework 官方文档 : https://pypi.org/project/robotframework/#installation
[2] ride github 文档 : https://github.com/HelioGuilherme66/RIDE
[3] wxSystemSettings doc : https://docs.wxwidgets.org/trunk/settings_8h.html#a0f2b19d7a3717cdbef5a04cb05ab8f26