python笔记5--python3.6 安装robotframework及wxSystemSettingsNative错误

python笔记5--python3.6 安装robotframework及wxSystemSettingsNative错误

 

Robot Framework(RF)是一款用python编写的功能自动化测试框架,其具备良好的扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,也可以进行分布式测试,主要用于轮次很多的验收测试和验收测试驱动开发(ATDD)。当前有很多大公司内部逐渐开始采用RF框架进行测试工作,最近由于需要使用RF,但是系统上只装了py3.6,因此便重新配置了一下python3上的RF。以下为笔者的配置流程和遇见的问题,分享在此处以便于后续参考,后续若遇见相关问题也会在此处加以更新补充!

 

1、安装步骤

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、常见问题

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运行错误(有网友提到重装系统可解决该问题,重装一下系统似乎不太划算),但为何有些字体会导致其执行失败,笔者暂未搞清楚,有明白的欢迎留言!

 

3、说明

以上默认测试环境为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

  • 9
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昕光xg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值