一、说明
Python3----网上很多文章都是用Python2,Robot Framework的部分文档没更新也直接写着不支持Python3(如RIDE does not yet support Python 3),但事实上Robot Framework下的所有项目的最新版本都是支持Python3.6+了的,反倒是Python2以后不久可能就不支持了(如RIDE 1.7.4 THIS IS THE LAST RELEASE SUPPORTING PYTHON 2.7)。
Robot Framework----Robot Framework是一个开源的自动化框架。更本质一点就是可以把你编写好的函数导出来,然后像写存储过程一样写代码,达到降低难度的目的。比如你在python文件中写好了一个函数login_system(username,password),然后Robot Framework就可以导出为Login System,别人写脚本时就可以写成Login System username password。
RIDE----RIDE是使用wxPython库编写的Robot Framework的图形界面。Robot Framework的使用者仍是程序员,而代码本就是程序员所写的现在又要多封装一层多学一套语法不仅没有降低难度反而增加了工作量。所以仅就Robot Framework而言个人觉得没什么值得称道的地方,加上RIDE有了图形界面则可以算一套工程化的管理工具,所以一般讲Robot Framework其实也是讲通过RIDE使用的方式。
二、安装
Robot Framework github地址:https://github.com/robotframework/robotframework
RIDE github地址:https://github.com/robotframework/RIDE
安装方法千千万,pip大法最简单。直接使用pip安装ride就可以了,Robot Framework、wxPython等依赖库都会自动安装好。
pip install robotframework-ride
进入自己当前python环境的Scripts目录(比如我这里是F:\PyChram\robot\Scripts)使用以下命令启动ride:
python ride.py
启动后界面如下,常规的一个窗口程序界面。
三、使用
我们说ride是一个简单的小工具,就不一个个菜单一个个功能地介绍了,直接说它一般怎么用。
我们前面说Robot Framework的功能就是把代码文件中的函数抽象成所谓的关键字,我们直接看这主要功能如何实现。
3.1 准备好代码文件
将以下代码使存到桌面,并命名为test_lib.py
import urllib.request def get_url_source_code(url): """这个函数的功能是获取传来的url页面的代码并打印 url----形如https://www.baidu.com""" request_obj=urllib.request.Request(url) response_obj=urllib.request.urlopen(request_obj) html_source_code=response_obj.read().decode('utf-8') print(html_source_code) # 这个main只是用于运行演示,作为Robot Framework的库是不需要的 if __name__ == "__main__": url = "https://www.baidu.com" get_url_source_code(url)
我们先看一下直接运行的结果,在main中传入的百度的url,然后打印出返回的页面的代码。
3.2 新建项目及测试用例
主菜单----File----New Project
主要是填写项目名称(比如我这里是test),其他默认即可。Type/Format这种东西无非是存放格式的区别不必太在意。
在新建的项目上鼠标右键---New Test Case---输入测试用例(我这里是testCase1)名称点击OK。
经以上步骤项目和测试用例都已创建好,当前界面如下:
3.3 导入自定义库函数
对我们这里页言,自定义库就是前面的test_lib.py,库含数就是其中的get_url_source_code。
左侧窗格选中项目,右侧窗格选中Edit选项卡,点击Library按钮
通过Browse选中我们的test_lib.py,其他不用填,点击OK。
回到主窗口上可以看到导入了一个库(如果呈红色说明导入报错,一般是脚本代码有问题,可借助cmd窗口的输出进行定位)
在上边界面中使用F5键,唤出关键字搜索对话框,Source中下拉选中test_lib。
如无意外,可以看到如下图我们脚本中的get_url_source_code被抽取成了Get Url Source Code关键字,注释这些也都有展现在上面(url那行没换行是\n和\r\n的问题)。
3.4 使用自定义库函数
经过前面几步我们已经将自己写的函数导入了进来,下来看如何调用,这步也是Robot Framework(或者RIDE)的主要用法。
回到主窗口,左侧窗口选中测试用例,右侧窗口选中Edit选项卡,界面如下。
测试用例就真的是测试用例,其中的1、2、3、4、5就是测试步骤,其中第一列是关键字(即本质上的函数),其后各列用于输入参数。
我们输入我们要使用的关键字“Get Url Source Code”(可使用Ctrl+Alt+Space获取补全提示),此时界面如下图。
一列为粉红底色,表示需要一个参数;其余后续列为灰色表示不使用(但如果想的话可以把自己的注释写在这些灰色格子上)。
我们把参数设置成“https://www.baidu.com”,此时再看界面如下,白色底表明填写上没有错误。
如果自己的测试用例后续还有各步,就继续在2、3、4、5那些行继续写下去即可。
3.5 运行测试用例及查看其报告
运行很简单,左侧窗格钩选要运行的测试用例,右侧窗格切换到Run选项卡,点击Start按钮。
底部窗格的输出其实就只是我们在get_url_source_code函数中的打印。
点击Report和Log按钮查看生成的报告,可以看到主要仍旧只是把打印记录到文件里。
四、一些相关性问题讨论
4.1 很多教程都介绍SeleniumLibrary到底在介绍什么?
可以看到网上很多教程不是像我们上边介绍如何导入和使用自己的代码,而是介绍安装SeleniumLibrary的库(旧版叫Selenium2Library现已迁移到SeleniumLibrary,Selenium2Library仍可安装但事实上仍是引用SeleniumLibrary),然后使用里边的Open Browser关键字(函数)使用浏览器打开某个网页(例如百度首页)。
安装直接使用pip安装即可:
pip install robotframework-seleniumlibrary
导入时教程都会说直接输入SeleniumLibrary即可,而不像我们前面3.3说的那样得点击“Browse”选择具体的文件。
这并不是什么玄学,只要输入名字RIDE就能自动把库导进去了,实际上如果RIDE看到输入的只是一个名字而不是路径,就会到当前启动ride所用python的Lib/site-packages目录下寻找同名文件夹导入。
也就是说很多教程中SeleniumLibrary的例子,其作用就只是演示如何导入第三方库;而实际上导入第三方库是没多大用,很多人都介绍个人感觉只是人云亦云的行为。
因为如果是程序员那肯定愿意直接写代码而不是RIDE来调用库;而如果是一般的维护人员,一般也只会导入自己企业的针对自己业务写好库其他第三方库他也不会用;再则除非SeleniumLibrary这种针对Robot Framework写好的库,不然很多第三方库(比如requests/scapy等)的方法是封装于类中的,并不能抽取成关键字。
4.2 如何导入类中的方法?
在前面3.3小节中我们导入的是直接定义的方法get_url_source_code,在上面一小节最后我们又说类中的方法不能直接被RIDE抽取成关键字。
那么类中的方法到底能不能被抽取成关键字呢,不能的话是因为什么,能的话该如何操作?
首先可以肯定类中的方法不能直接抽取成关键字但确实可以间接抽取成关键字的,比如我们前面提到的SeleniumLibrary的Open Browser本身就是一个类中的方法。
不能直接抽取的原因也在上图中展示了,那就是类的方法总要有一个参数self,如果直接抽取出来self这个参数不知道该传什么。
SeleniumLibrary中的做法是使用一个@keyword注解,然后在其他地方又做了一些处理。这里我并没有研究得很清楚,即怎么导入类中的方法暂时还不知道。
4.3 Resource是什么?
在Library按钮的下方有一个Resource按钮,这个Resource是什么,和Library有什么区别?
左侧窗格选中项目Test,然后点击New User Keyword。我这里填入“Get Baidu Index Source Code”
左侧窗格选中刚建的Resource,右侧窗格一样是写获取百度首页的代码。
此时我们再新建一个测试用例,可以看到可以直接使用“Get Baidu Index Source Code”关键字
所以到这就清楚了,资源就是已有关键字组合成的新的关键字。我们再来具体看一下在文件上到底长什么样,右侧窗格切换到Text Edit选项卡。
*** Keywords ***节区(包括该行)单独复制出来保存成文件就是Resource File了(如比testResource.txt),长这样的文件就可以通过Resource按钮导入到RIDE中了。
另外在左侧窗格还可以看到一个External Resources的东西,这部分的Resource是和项目无关的,添加到这里的Resource即便新建了一个项目还是会列在那里;而通过Resource导入的Resource只能在当前项目中使用。
不过External Resources并不会自动导入到新建项目的,而是每个项目都得再通过Resource按钮再导入一遍才能使用,感觉这是一个External Resources的实现Bug。
4.4 数据驱动是什么?
听说RIDE右下方的Metadate还能数据驱动的功能,“数据驱动”这么高大上的名字没听说过搞得自己都慌了,赶紧研究一番。
然后看了半天,所谓数据驱动就是把测试载荷全写到文件中使用时从文件遍历载荷;而具体到RIDE中,就是可以让你加几个变量,然后在编写testCase时可以使用这些变量。
一如动辄AI、大数据,我总觉现在搞计算机的越来越博(会)学(吹)多(牛)识(逼),一个司空见惯的东西都能给换个这么有文采的名字,完后还能靠个名字加东拉西扯把人给唬得一愣一愣的。