RobotFramework介绍
robotframework是由Python编写的一个开源的基于关键字驱动的自动化测试框架,可进行UI和接口自动化测试,语法简单易用,扩展性强,可通过使用Python或Java实现的测试库进行扩展,还可以自定义测试库,执行完毕后还会自动生成一份HTML格式的测试报告
RobotFramework安装
因为robotframework本身存在一些小bug,兼容性也不太友好,需注意安装环境
-
在python3.6/3.7/3.8环境安装
pip install robotframework pip install robotframework-ride
-
在python3.9/3.10环境安装
pip install robotframework pip install wxpython pip install -U https://github.com/robotframework/RIDE/archive/master.zip
-
Beta版安装
pip install robotframework pip install psutil pip install -U --pre robotframework-ride
若因网络问题安装失败,可通过国内源安装,以下是常见的国内镜像源,添加参数-i
跟url即可
清华:https://pypi.tuna.tsinghua.edu.cn/simple
豆瓣:https://pypi.douban.com/simple
华为云:https://repo.huaweicloud.com/repository/pypi/simple
阿里云:https://mirrors.aliyun.com/pypi/simple
中科大:https://pypi.mirrors.ustc.edu.cn/simple
RobotFramework使用
常用库
以下为robotframework常用标准库无需安装,但需导入才能使用
- BuiltIn:包含常用关键字,是默认库,已自动导入,可以直接使用
- String:处理字符串的库,可生成、修改和验证字符串
- Collections:处理Python中的列表(list)和字典(dict)时会用到
- Screenshoot:测试过程中截图时会用到
- DateTime:时间库,可创建和验证时间
以下为常见的扩展库,需通过pip安装后再导入使用,导包名称区分大小写,请在…\Python\Lib\site-packages
目录下查看包名
- Selenium2Library:Web自动化测试库,安装命令:
pip install robotframework-selenium2library
- RequestsLibrary:API自动化测试库,安装命令:
pip install robotframework-requests
- AppiumLibrary:APP自动化测试库,安装命令:
pip install robotframework-appiumlibrary
RobotFramework主要是进行UI测试的,虽然能够进行接口测试和APP测试,但是很少用!测试API和APP有更好的方法和工具
Web项目测试案例
需先安装浏览器驱动,以Chrome浏览器为例,先查看Chrome版本,然后下载相应版本的ChromeDriver,可通过官网,或者国内源(淘宝源、华为源等)下载。最后将文件放到Chrome安装目录即可,或者放到指定目录后添加到环境变量中
创建项目目录(注意类型需选择Directory),可在项目下创建子目录,然后创建测试套件,最后在测试套件中创建测试用例,流程及目录结构如下图所示
在测试套件中导入所需使用的库,第三方扩展库需要先安装再导入,库名区分大小写
使用默认库和Selenium2Library库中的关键字编写测试用例,如下图示例,使用关键字登录OpenStack页面,断言判断登录成功后等待5秒,最后关闭浏览器,Comment
关键字和#
号都是表示注释,关于元素定位,请查看此文章,id、name、xpath是常用的定位方法
勾选要执行的测试用例,点击Start按钮执行测试用例,完成后可查看测试报告和操作日志,测试用例图标绿色表示测试通过,蓝色表示用例执行中,红色表示测试未通过
至此一个基本的Web自动化测试用例完成,关于常用的高频关键字还是多敲多积累吧,此处就不罗列了,多使用快捷键F5搜索关键字,搜索关键字弹框中通常有关键字解释和示例,使用Ctrl+Shift+Space
键可进行自动补全功能(关键字联想提示),在编辑用例页面(Edit)获取关键字解释,可按Ctrl键后,鼠标移至对应关键字,点击提示信息,关键字解释会以弹窗方式显示
用例前后置
打开浏览器并访问登录页面设为前置条件,关闭浏览器设为后置条件,点击Setting >>
展开设置,在Setup中添加前置条件,在Teardown中添加后置条件
关键字封装及传参
自定义关键字
在测试套件或资源文件上右键单击【New User Keyword】创建关键字,定义关键字名称和变量名
关键字提取
选择关键字,右键点击Extract Keyword
提取关键字,定义关键字名称及变量名,创建后左侧结构用例同级结构中显示自定义的关键字,将值改为变量名,进入用例tab可以看到变为自定义的关键字,填写的值会传给定义的变量名
创建资源文件
在目录上右键选择Resource创建资源,文件格式建议选择TXT,其它格式也能正常运行,然后自定义的关键字拖拽到自定义关键字文件下,此时,用例中的关键字失效,变为黑色字体,用例执行会报错,处理办法是选择测试套件,点击Resource导入自定义关键字文件,蓝色表示导入成功,再次查看用例中的关键字也变为蓝色,此时用例可正确执行通过
使用PO模型完成测试
基于PO模型编写用例,将用例进行分层设计,通常分为用例层、数据层和业务层,使用例可读性更高,更便于维护
如下案例,首先创建公共部分目录,在目录下创建公共数据资源文件,右键点击【New Scalar】,添加公共数据
然后在目录下创建公共元素资源文件,在文件中自定义公共关键字
因为PO模型是分层思想,并非规范,还可以进一步细分,比如:定义常用断言资源文件,常用业务流文件等
接下来创建登录目录,定义登录元素、登录业务及登录用例,登录元素定义和上文一样,就是定义各个操作步骤名称,与公共部分一样的可直接调用公共部分中的关键字,登录业务文件中定义的实际上是整个登录流程,导入所需的资源包后,调用关键字完成登录的流程
然后定义测试用例,首先创建登录套件,导入所需的资源包,在套件下创建测试用例,用例可使用定义的登录业务进行参数化测试,也可使用关键字重新编写测试流程,如下图所示:
对于登录后才能操作的模块,可导入之前测试的登录模块后进行调用,如下图示例,登录操作需在第一步
遇到的问题
本次安装配置及使用RobotFramework过程中遇到了以下几个问题:
-
报
Building wheel for robotframework-ride (setup.py) ... error
或Running setup.py install for robotframework-ride ... error
错误处理方法:python环境问题,先执行命令
pip freeze > requirements.txt
备份已安装的pip库,然后卸载并重新安装python,再次执行安装robotframework相关命令,验证robotframework安装成功后,执行命令pip install -r requirements.txt
将备份的pip库重新安装 -
未出现创建ride桌面快捷方式提示,桌面未生成快捷图标
处理方法:首先在python安装路径中找到
ride.py
,通常路径是……\Python\Scripts\ride.py
,请根据自己实际安装路径查找,然后复制路径,在cmd命令窗口运行python ……\Python\Scripts\ride.py
会打开ride窗口,通过菜单功能创建快捷方式,点击【Tools】→【Create RIDE Desktop Shortcut】,以后就可以使用桌面图标运行啦 -
缺少
Open Browser
关键字处理方法:robotframework或robotframework-ride版本问题,通常升级或降级版本可解决,本次是升级robotframework-ride到Beta版本2.0后,问题解决
-
按
Ctrl+Shift+Space
键未出现关键字联想提示处理方法:可能是快捷键被占用,切换输入法后恢复正常,按
Ctrl+Shift+Space
出现了关键字提示 -
导包后关键字仍不可使用
处理方法:安装第三方库,导入Library后仍红色报错,建议保存脚本后关闭RIDE后重新打开,然后重新导入,通常可解决问题
Jenkins配置
Jenkins安装就不介绍了!建议在官网下载LTS版进行安装,安装插件时选择“安装推荐插件”,安装完成后开始配置
RobotFramework项目配置
进入插件管理页面,在“可选插件”中搜索“Robot Framework”,勾选后点击【Install without restart】,建议安装完成后重启Jenkins
查看并复制Jenkins的默认工作空间,然后新建一个*风格的项目
“增加构建步骤”选择【Execute Windows batch command】,填写执行命令,路径请根据实际环境进行修改,若执行用例只选择到目录,则执行当前目录下所有的测试用例,要执行的用例可选择到具体的测试套件,比如:"D:\Code\RF\Auto\本地JPress\我的文章\文章套件.robot",构建后操作必须填写Jenkins的工作目录,否则会执行失败
应用保存后就可以开始执行构建任务,配置正确就会执行成功啦!
至此Jenkins+RobotFramework配置就完成啦,当然还可以添加定时构建、邮件通知等之类的操作
Jenkin定时构建
进入项目配置页面,【构建触发器】中勾选“Build periodically”,可以点击蓝色背景的小问号查看帮助,里面有示例
具体划分了5个字段,从前到后表示分时天月周,比如以下规则
H/5 * * * * 表示每5分钟构建一次
H 20 * * * 表示每天20点构建一次
H H/2 * * * 表示每两小时构建一次
H(0-29)/10 * * * * 表示每小时的前29分钟内每10分钟执行一次
……
Jenkins邮件通知
进入系统配置页面,找到【Jenkins Locaction】项填入“Jenkins URL”和“系统管理员邮件地址”,邮件有系统管理员负责发送
找到【Extended E-mail Notification】项,填写SMTP服务及端口(以QQ邮箱为例),添加并凭据
继续在【Extended E-mail Notification】下配置默认邮件接收人、默认邮件主题、默认邮件内容,并选择触发邮件条件
然后选择找到【邮件通知】项,配置邮箱服务器、后缀、端口及邮箱账号和授权码,授权码请在登录邮箱配置,登录邮箱是配置的系统管理员邮箱,然后配置邮件接收人地址,可勾选“通过发送测试邮件测试配置”验证邮件配置时候正确,然后点击应用保存,完成系统配置
接下来进行项目配置,进入项目配置页面,找到【增加构建后操作步骤】,选择【Editable Email Notification】,配置项不进行任何修改直接应用保存,接收到的就是默认的邮件格式,修改消息类型为HTML,将模板内容粘贴到Default Content中接收到的邮件就是模板样式
下图是使用默认邮件格式与使用了邮件模板所收到的邮件截图
邮件模板网上有很多,请自行问度娘,有能力也可以自己写个邮件模板,以下是本次使用的邮件模板代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
offset="0">
<table width="95%" cellpadding="0" cellspacing="0"
style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>以下为${PROJECT_NAME }项目第${BUILD_NUMBER}次构建日志,请查阅!
</tr>
<tr>
<td><h2><font color="#0000FF">构建结果 - ${BUILD_STATUS}</font></h2></td>
</tr>
<tr>
<td><br />
<b><font color="#0B610B">构建信息:</font></b><hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>项目名称:${PROJECT_NAME}</li>
<li>构建编号:第${BUILD_NUMBER}次构建</li>
<li>触发原因:${CAUSE}</li>
<li>构建日志:<a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
<li>构建地址:<a href="${BUILD_URL}">${BUILD_URL}</a></li>
<li>工作目录:<a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
<li>项目地址:<a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
<li>变更集:${JELLY_SCRIPT,template="html"}</li>
</ul>
</td>
</tr>
<tr>
<td><b><font color="#0B610B">Changes Since Last Successful Build:</font></b><hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li>
</ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat="%p"}
</td>
</tr>
<tr>
<td><b><font color="#0B610B">Failed Test Results:</font></b><hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td><pre style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">${FAILED_TESTS}</pre>
<br /></td>
</tr>
</table>
<tr>本邮件由Jenkins程序自动发送,请勿回复!</tr>
</body>
</html>