RobotFramework:python+robotframework+selenium2library测试环境部署说明文档

我的未来我决定 提交于 2019-11-28 19:23:16

【来自组内整理文档】

、部署环境准备

操作系统:Win7-64位或win7-32位或win10-64

内存:DDR3, 4GB以上

运行环境:JDK1.8环境

安装jdk1.8.0_101

Java环境变量-系统变量配置

JAVA_HOME,配置jdk安装地址

 

Classpath配置

.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;

 

Path变量值后面加

;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

 

运行cmd.exe,查看java版本,可以看到正确的版本信息,说明jdk环境已经配置好;

 

安装包准备

1Python安装包清

1python-2.7.6.msi,python环境安装

2pywin32-218.win32-py2.7.exe,python2.7相关pywin安装

3wxPython2.8-win32-unicode-2.8.12.1-py27.exe,py27相关Unicode

 

 

2、Robotframework安装包清单

(1)robotframework-2.8.4.win32.exe,robot安装

(2)robotframework-ride-1.2.3.win32.exe,ride界面,可以看成是ROBOT的可视化IDE;

3、setuptools和pip工具

(1)setuptools-19.2

(2)pip-7.1.2

4selenium安装包以及浏览器驱动

(1selenium3.3.1 或直接用pip工具的命令在线安装pip install –U selenium

2)拷贝相应版本的浏览器driverC\Python\目录下,使用什么版本,参考文末“3.各浏览器driver与浏览器版本与selenium三者的兼容关系

5python扩展包安装获取

1)使用pip工具的 pip install 命令在线安装;

2或者使用python setup.py install 命令运行setup.py文件来安装下载好的扩展

WIN32安装步骤

1. Python27安装

1)安装jdk1.8并配置环境后,安装Python27:

 

双击运行,默认步骤安装;

2)设置环境变量-系统变量

右键计算机图标-属性-环境变量-系统变量,新增系统变量,名称命名为PATH,值输入 “;C:\Python27C:\Python27\Lib; C:\Python27\Scripts” 保存;

3)安装setuptools

直接进入setuptools目录,在cmd控制台中输入python ez_setup.py 出现‘asii’编码错误的提示,所以需要先修改一个地方:进入C\Python27\Lib

IDLE打开mimetypes.py文件,在第256行:default_encoding = sys.getdefaultencoding() 前面,加入下面几行代码后保持,如下:

 

再次,在cmd控制台中,进入setuptools目录,输入python setup.py install即可顺利完成安装;

4)安装pip

下载pip,在CMD控制台,直接进入pip文件目录,找到setup.py,输入命令

python setup.py install   ;(各种已下载的扩展模块,安装方法都是如此,如)

CMD进入 C\Python27\Scripts 目录,输入命令:easy_install pip  完成安装;

5)安装wxPython2.8

双击运行,默认步骤安装

6)安装pywin32

双击运行,默认步骤安装;

2. 安装Selenium以及浏览器驱动

1)直接下载Selenium2.X的版本,使用python  setup.py install 命令进行安装;

或者进入C:\Python27\Scripts,在控制台输入pip install –U selenium==2.53.6命令进行在线下载安装;

2)安装配置chrome浏览器驱动

下载ChromeDriver_win32(根据操作系统版本下载相应版本驱动),解压得到chromedriver.exe文件,放到环境变量PATH所设置的目录下,前面看我们已经将C\Python27 添加到了环境变量PATH所设置的目录,所以将chromedriver.exe文件放到C\Python27\目录下,即可;

3)安装配置IE刘浏览器驱动

下载IEDriverServer_win32_x.xx(根据操作系统版本下载相应版本驱动),解压得到IEDriverServer.exe文件,同样放到C\Python\目录下,即可;

:浏览器的driver要注意与selenium版本的对应,如果用的是selenium3.3.1,额外为firefoxgeckodriver

 

3. 安装robotframework

 

1)双击程序,默认步骤运行;

或者在线安装:cmd控制台进入C:\Pyton27\Scripts, 输入命令

pip install robotframework 回车

2)装robotframework ride(图形界面)

 

双击运行,默认步骤安装;

或者在线安装:cmd控制台进入C:\Pyton27\Scripts, 输入命令

pip install robotframework-ride 回车

 

3)安装robotframework-selenium2library

下载地址:https://github.com/rtomac/robotframework-selenium2library/downloads

robotframework-selenium2library-1.1.0 一路下一步就ok

或者直接在线安装:CMD控制台进入C:\Python27\Scripts,输入以下命令进行自动下载安装:

pip install robotframework-selenium2library

 

4)安装AutoitLibrary

CMD控制台进入AutoitLibrary目录,运行python setup.py install 命令进行安装;(AutoitLibrary有可能已经在安装robotframework的时候就已经安装完成了,他是robot自带的库,包含大量鼠标、键盘操作的关键字方法)

5)配置HTMLTestRunner.pyjson.py、clossprocess.py

HTMLTestRunner.pyjson.py、clossprocess.py放入 C\Python27\Lib\目录下,使用时,

输入Import   HTMLTestRunner 即可导入模块使用 ,自己编写的py程序,也是这样的方法进行导入使用;

4.安装其他扩展包

下载以下扩展包,在cmd控制台进入相应文件目录,运行python setup.py install 命令进行安装;

下面这些包,一个是用于redis服务的依赖库,另外3个是excel表的一些依赖库,根据实际情况是自行选择安装;如果要用到其他扩展包,可以在python的官网、robotframework的官网中,进行了解和查找更多扩展程序;

Python官网:https://www.python.org/getit/

Robotframework官网:http://robotframework.org/

 

Pip install xlrd

Pip install requests

Pip install httplib2

5. 安装下载Selenium IDE

是嵌入至Firefox浏览器的一个插件,实现浏览器操作的简单录制和回放,可以导出操作的脚本代码,可以协助测试人员快速开发脚本,也可以用于快速创建bug重现脚本;

firfox浏览器的菜单栏中选择tools(工具)-add -ons Manager(添加组件),搜索selenium IDE,然后进行安装,重启浏览器即可

6. 安装firebug firepath插件(Firefox

为元素定位工具,可以帮助我们通过xpathCSS来快速定位页面元素;

安装方法:firfox浏览器的菜单栏中选择tools(工具)-add -ons Manager(添加组件),搜索firebug,然后进行安装,重启浏览器即可;

Firepathfirebug安装方式相同;

ChromeIE浏览器自带类似firebug的开发人员工具,在菜单中选择“工具”-“开发者工具”即可打开,或者按下F12

7.安装一款好用的开发工具Ulipad4.0编辑器

需要先安装wxPython,前面已安装)

双击运行,默认安装;

设置python 的解释器:双击打开ulipad在菜单 编辑---参数---python 中找到了设置python编辑”按钮,点击找到自己python 的安装目录,把python2.7.exe pythonw2.7.exe 的路径加进来,别忘了加“描述”;

如下:

 

win64安装步骤

 

准备jdk1.8环境,配置环境变量后,开始安装:

1.安装python-2.7.11-amd64

(内含setuptoolspip工具)

Python环境变量-系统变量配置path

;C:\Python27;C:\Python27\Scripts; C:\Python27\Lib; C:\Python27\Lib\site-packages;

 

2.安装pywin32

检查安装结果,显示内容包含successful之类的信息,如果没有,则表示安装失败,管理员身份进入cmd,进入安装文件所在目录,输入安装程序名称,回车运行,这样安装一般成功;

3.安装robotframework-2.8.4

检查安装结果,显示内容包含successful之类的信息

4.安装robotframework-ride-1.2.3

检查安装结果,显示内容包含successful之类的信息

5.安装wxpython2.8-win64

检查安装结果,显示内容包含successful之类的信息

6.安装扩展包:

用管理员身份运行cmd进入python27/scripts目录

安装selenium2 执行命令   pip install –U selenium==2.53.6

安装selenium2library:执行命令:pip install robotframwork-selenium2library

安装AutoItLibrary

(1) 下载AutoItLibrary-1.1_x64,进入setup所在目录,执行python setup.py install

(2) 下载autoit-v3-setup.exe64位版的,安装时选择64位安装;

安装psycopg2用于操作postgres数据库pip根据提示升级到9.1之后,

管理员运行cmd,输入 pip install psycopg2 即可;

           其他需要的模块,类似的方法安装,1.在线 :pip install 模块名称;2 cmd进入解压后的目录,python setup.py install

7.将浏览器driver拷贝C:\Python27目录

文件夹中的exe文件

           

安装浏览器,安装chrome54时,注意将google自动更新禁用:

右键-计算机-管理-服务,找到google的两个服务,右键-属性-禁用,并且将Cgoogle目录下的update目录删掉

8.将用得到的py文件拷贝C:\Python27目录

 

9.失败用例重跑机制设置

        使用自动化脚本进行测试,经常受环境影响等各方面导致本能成功的脚本失败,下面介绍了RFS框架下,失败重跑的方法:

通过改写RobotFramework源代码增加--retry选项,实现test级别的失败用例自动再执行:失败用例会重跑N次,直至成功or 耗尽重试次数,生成的日志和报告文件中只会体现最后一次执行的结果。打个比方,用例A第一次执行失败了,立刻再重跑,再失败,立刻再重跑,成功了,那么,最后在生成的日志里面看到的就是最后那一次的运行数据,之前两次被完全过滤掉,只有在控制台中才可以看到它们的痕迹。

egpybot.bat --retry 3 e:\robot\test

retry设置为3,用例执行失败后会再次执行,每条用例最大执行次数为3成功后不会再执行。

修改代码如下:

1robot/run.py

修改USAGE字符串,增加 -X --retry retry         Set the retry times if test failed.这一段

 

Options
=======
 -X --retry retry      Set the retry times if test failed.
 -N --name name           Set the name of the top level test suite. Underscores
                          in the name are converted to spaces. Default name is
                          created from the name of the executed data source.
 -D --doc documentation   Set the documentation of the top level test suite.
                          Underscores in the documentation are converted to
                          spaces and it may also contain simple HTML formatting
                          (e.g. *bold* and http://url/).

 

增加导入模块

reload(sys)
sys.setdefaultencoding('UTF-8')
from xml.dom import minidom

 

RobotFramework类增加make方法

 

def make(self,outxml):
        xmldoc = minidom.parse(outxml)
        suiteElementList = xmldoc.getElementsByTagName('suite')
        mySuite = []
        for suiteElement in suiteElementList:
            if suiteElement.childNodes is not None:
                for element in suiteElement.childNodes:
                    if element.nodeName == 'test':
                        mySuite.append(suiteElement)
                        break
        for suite in mySuite:
            testElements = {}
            for element in suite.childNodes:
                if element.nodeName == 'test':
                    name = element.getAttribute('name')
                    if testElements.get(name) == None:
                        testElements.update({name:[element]})
                    else:
                        testElements.get(name).append(element)
            for n,el in testElements.iteritems():
                for i in el[0:-1]:
                    textElement = i.nextSibling
                    suite.removeChild(i)
                    suite.removeChild(textElement)
        savefile = open(outxml,'w')
        root = xmldoc.documentElement
        root.writexml(savefile)
        savefile.close()

 

 

修改RobotFramework类的main方法,插入self.make(settings.output)这段

def main(self, datasources, **options):

    settings = RobotSettings(options)

    LOGGER.register_console_logger(**settings.console_output_config)

    LOGGER.info('Settings:\n%s' % unic(settings))

    suite = TestSuiteBuilder(settings['SuiteNames'],

                             settings['WarnOnSkipped']).build(*datasources)

    suite.configure(**settings.suite_config)

    if settings.pre_run_modifiers:

        suite.visit(ModelModifier(settings.pre_run_modifiers,

                                  settings.run_empty_suite, LOGGER))

    with pyloggingconf.robot_handler_enabled(settings.log_level):

        result = suite.run(settings)

        LOGGER.info("Tests execution ended. Statistics:\n%s"

                    % result.suite.stat_message)

        self.make(settings.output)            

        if settings.log or settings.report or settings.xunit:

            writer = ResultWriter(settings.output if settings.log

                                  else result)

            writer.write_results(settings.get_rebot_settings())

    return result.return_code

  

2robot/conf/settings.py
修改_cli_opts字典,增加 'Retry':('retry',1)

'MonitorColors'    : ('monitorcolors', 'AUTO'),

                 'StdOut'           : ('stdout', None),

                 'StdErr'           : ('stderr', None),

                 'XUnitSkipNonCritical' : ('xunitskipnoncritical', False),

                  'Retry':('retry',1)}

  

3robot/model/itemlist.py
修改visit方法如下

def visit(self, visitor):

        for item in self:

            if self.__module__ == 'robot.model.testcase' and hasattr(visitor,"_context"):

                testStatus = ''

                for i in range(0,int(visitor._settings._opts['Retry'])):

                    if testStatus != 'PASS':

                        if item.name in visitor._executed_tests:

                            visitor._executed_tests.pop(item.name)

                        item.visit(visitor)

                        testStatus = visitor._context.variables['${PREV_TEST_STATUS}']

                    else:

                        break

            else:

                item.visit(visitor)

  

4robotide\contrib\testrunner\usages.py
修改USAGE字符串,增加 -X --retry retry         Set the retry times if test failed.这一段

Options
=======
-X --retry retry      Set the retry times if test failed.
 -N --name name           Set the name of the top level test suite. Underscores                          in the name are converted to spaces. Default name is                          created from the name of the executed data source. -D --doc documentation   Set the documentation of the top level test suite.                          Underscores in the documentation are converted to                          spaces and it may also contain simple HTML formatting                          (e.g. *bold* and http://url/).

  

如果重跑次数达到设置上限,仍然失败,则报告显示为最后一次失败数据(结果):

10.Jenkins上项目配置

 

 

 

安装常见问题

可关注微信公众号:robotframework

安装结果,如果不是successful,则管理员身份进入cmd,进入安装文件所在目录,直接输入安装程序的全名,回车,可以安装成功;

1、 如果ride双击不能运行

(1)右键ride图标,查看属性-目标

显示的路径是否正确:C:\Python27\pythonw.exe -c "from robotide import main; main()"

 

如果不正确,则修改目标值;

2)请确认是否安装pywin2.8wxpython,如果么有,则重新安装后,再安装ride,或者使用在线安装,进入c:\Python27\Scripts

,输入命令pip  install  robotframework-ride

2、 AutoItLibrary,在ride中无法导入成功,显示为红色字,进入c:\Python27\Scripts

,输入命令pip  install  -U AutoItLibrary;重新安装AutoItLibrary,再尝试导入;

3、 AutoItLibrary安装出现以下错误:

 

是没有安装pywin32的原因,安装pywin32后,重新进入autoitlibrary的目录下执行python setup.py install即可使用

4、 使用ride运行测试用例,弹出错误提示框,不能启动pybot.bat

(1) 检查环境变量PATH是否配置了

;C:\Python27;C:\Python27\Scripts;C:\Python27\Lib\site-packages

如果没有,则编辑PATH,加上;关闭ride,重新打开ride,再次点击start运行;

5、 关于robotframeword的测试用例编写,参考文档

Robot+Framework+WD+培训-吴穹++ChinaTest2012》

关于元素定位,可以参考文档

selenium2 python自动化测试.pdf》

关于selenium2library的各种关键字方法的使用,参考

《robotframework-userguide-2.5.3-CN.pdf》

selenium的API》

6、如果安装后不能使用,参考《Robot+Framework+WD+培训-吴穹++ChinaTest2012》的安装顺序进行重新安装;

 

参考资料

1robotframework知识库

http://code.google.com/p/robotframework/

http://code.google.com/p/robotframework/wiki/UserGuide

http://code.google.com/p/robotframework-seleniumlibrary/

http://robotframework-seleniumlibrary.googlecode.com/hg/doc/SeleniumLibrary.html?r=2.8

http://code.google.com/p/robotframework/wiki/BuiltInLibrary

2python官网

https://www.python.org/

3.各浏览器driver与浏览器版本与selenium三者的兼容关系

对于chrome

Selenium3.3-支持chrome47,但是要在python27(环境变量path的目录下)添加geckodriver.py;

Geckodriver.py可以到官网下载:

Selenium2.53支持chrome47,更新版本chrome估计就不支持了;

所以chrome用47版本比较稳定;对应chromedriver见上图对应关系,应选择V2.20的driver,win64下win32版本的也是OK的;

Chromedriver与chome对应版本,http://chromedriver.storage.googleapis.com/index.html

 

对于firefox

Selenium3.0以上支持firefox47以上版本,但是3.3用47版是会有问题,selenium3.3所以firefox用52版本,经验证是OK的geckodriver.py是必须的,只要selenium是3.0以上版本,否则selenium自带的firefoxdriver使用不了;

Selenium2.53支持firefox47版本,不用geckodriver.py;

对于IE

Selenium3.3支持IE8,但是IE8对应IEdriver要是3.3的

IEdriver版本和Slenium版本的对应下载列表,http://selenium-release.storage.googleapis.com/index.html

 

4、selenium版本和浏览器版本兼容的对应关系

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!