RobotFramework+Jenkins自动化测试环境搭建及使用方法

目录

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),可在项目下创建子目录,然后创建测试套件,最后在测试套件中创建测试用例,流程及目录结构如下图所示

RobotFramework+Jenkins自动化测试环境搭建及使用方法

在测试套件中导入所需使用的库,第三方扩展库需要先安装再导入,库名区分大小写

RobotFramework+Jenkins自动化测试环境搭建及使用方法

使用默认库和Selenium2Library库中的关键字编写测试用例,如下图示例,使用关键字登录OpenStack页面,断言判断登录成功后等待5秒,最后关闭浏览器,Comment关键字和#号都是表示注释,关于元素定位,请查看此文章,id、name、xpath是常用的定位方法

RobotFramework+Jenkins自动化测试环境搭建及使用方法

勾选要执行的测试用例,点击Start按钮执行测试用例,完成后可查看测试报告和操作日志,测试用例图标绿色表示测试通过,蓝色表示用例执行中,红色表示测试未通过

RobotFramework+Jenkins自动化测试环境搭建及使用方法

至此一个基本的Web自动化测试用例完成,关于常用的高频关键字还是多敲多积累吧,此处就不罗列了,多使用快捷键F5搜索关键字,搜索关键字弹框中通常有关键字解释和示例,使用Ctrl+Shift+Space键可进行自动补全功能(关键字联想提示),在编辑用例页面(Edit)获取关键字解释,可按Ctrl键后,鼠标移至对应关键字,点击提示信息,关键字解释会以弹窗方式显示

RobotFramework+Jenkins自动化测试环境搭建及使用方法
用例前后置

打开浏览器并访问登录页面设为前置条件,关闭浏览器设为后置条件,点击Setting >>展开设置,在Setup中添加前置条件,在Teardown中添加后置条件

RobotFramework+Jenkins自动化测试环境搭建及使用方法
关键字封装及传参

自定义关键字

在测试套件或资源文件上右键单击【New User Keyword】创建关键字,定义关键字名称和变量名

RobotFramework+Jenkins自动化测试环境搭建及使用方法

关键字提取

选择关键字,右键点击Extract Keyword提取关键字,定义关键字名称及变量名,创建后左侧结构用例同级结构中显示自定义的关键字,将值改为变量名,进入用例tab可以看到变为自定义的关键字,填写的值会传给定义的变量名

RobotFramework+Jenkins自动化测试环境搭建及使用方法
创建资源文件

在目录上右键选择Resource创建资源,文件格式建议选择TXT,其它格式也能正常运行,然后自定义的关键字拖拽到自定义关键字文件下,此时,用例中的关键字失效,变为黑色字体,用例执行会报错,处理办法是选择测试套件,点击Resource导入自定义关键字文件,蓝色表示导入成功,再次查看用例中的关键字也变为蓝色,此时用例可正确执行通过

RobotFramework+Jenkins自动化测试环境搭建及使用方法
使用PO模型完成测试

基于PO模型编写用例,将用例进行分层设计,通常分为用例层、数据层和业务层,使用例可读性更高,更便于维护

如下案例,首先创建公共部分目录,在目录下创建公共数据资源文件,右键点击【New Scalar】,添加公共数据

RobotFramework+Jenkins自动化测试环境搭建及使用方法

然后在目录下创建公共元素资源文件,在文件中自定义公共关键字

RobotFramework+Jenkins自动化测试环境搭建及使用方法

因为PO模型是分层思想,并非规范,还可以进一步细分,比如:定义常用断言资源文件,常用业务流文件等

接下来创建登录目录,定义登录元素、登录业务及登录用例,登录元素定义和上文一样,就是定义各个操作步骤名称,与公共部分一样的可直接调用公共部分中的关键字,登录业务文件中定义的实际上是整个登录流程,导入所需的资源包后,调用关键字完成登录的流程

RobotFramework+Jenkins自动化测试环境搭建及使用方法

然后定义测试用例,首先创建登录套件,导入所需的资源包,在套件下创建测试用例,用例可使用定义的登录业务进行参数化测试,也可使用关键字重新编写测试流程,如下图所示:

RobotFramework+Jenkins自动化测试环境搭建及使用方法

对于登录后才能操作的模块,可导入之前测试的登录模块后进行调用,如下图示例,登录操作需在第一步

RobotFramework+Jenkins自动化测试环境搭建及使用方法
遇到的问题

本次安装配置及使用RobotFramework过程中遇到了以下几个问题:

  1. Building wheel for robotframework-ride (setup.py) ... errorRunning setup.py install for robotframework-ride ... error错误

    处理方法:python环境问题,先执行命令pip freeze > requirements.txt备份已安装的pip库,然后卸载并重新安装python,再次执行安装robotframework相关命令,验证robotframework安装成功后,执行命令pip install -r requirements.txt将备份的pip库重新安装

  2. 未出现创建ride桌面快捷方式提示,桌面未生成快捷图标

    处理方法:首先在python安装路径中找到ride.py,通常路径是……\Python\Scripts\ride.py,请根据自己实际安装路径查找,然后复制路径,在cmd命令窗口运行python ……\Python\Scripts\ride.py会打开ride窗口,通过菜单功能创建快捷方式,点击【Tools】→【Create RIDE Desktop Shortcut】,以后就可以使用桌面图标运行啦

  3. 缺少Open Browser关键字

    处理方法:robotframework或robotframework-ride版本问题,通常升级或降级版本可解决,本次是升级robotframework-ride到Beta版本2.0后,问题解决

  4. Ctrl+Shift+Space键未出现关键字联想提示

    处理方法:可能是快捷键被占用,切换输入法后恢复正常,按Ctrl+Shift+Space出现了关键字提示

  5. 导包后关键字仍不可使用

    处理方法:安装第三方库,导入Library后仍红色报错,建议保存脚本后关闭RIDE后重新打开,然后重新导入,通常可解决问题

Jenkins配置

Jenkins安装就不介绍了!建议在官网下载LTS版进行安装,安装插件时选择“安装推荐插件”,安装完成后开始配置

RobotFramework项目配置

进入插件管理页面,在“可选插件”中搜索“Robot Framework”,勾选后点击【Install without restart】,建议安装完成后重启Jenkins

RobotFramework+Jenkins自动化测试环境搭建及使用方法

查看并复制Jenkins的默认工作空间,然后新建一个*风格的项目

RobotFramework+Jenkins自动化测试环境搭建及使用方法

“增加构建步骤”选择【Execute Windows batch command】,填写执行命令,路径请根据实际环境进行修改,若执行用例只选择到目录,则执行当前目录下所有的测试用例,要执行的用例可选择到具体的测试套件,比如:"D:\Code\RF\Auto\本地JPress\我的文章\文章套件.robot",构建后操作必须填写Jenkins的工作目录,否则会执行失败

RobotFramework+Jenkins自动化测试环境搭建及使用方法

应用保存后就可以开始执行构建任务,配置正确就会执行成功啦!

RobotFramework+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”和“系统管理员邮件地址”,邮件有系统管理员负责发送

RobotFramework+Jenkins自动化测试环境搭建及使用方法

找到【Extended E-mail Notification】项,填写SMTP服务及端口(以QQ邮箱为例),添加并凭据

RobotFramework+Jenkins自动化测试环境搭建及使用方法

继续在【Extended E-mail Notification】下配置默认邮件接收人、默认邮件主题、默认邮件内容,并选择触发邮件条件

RobotFramework+Jenkins自动化测试环境搭建及使用方法

然后选择找到【邮件通知】项,配置邮箱服务器、后缀、端口及邮箱账号和授权码,授权码请在登录邮箱配置,登录邮箱是配置的系统管理员邮箱,然后配置邮件接收人地址,可勾选“通过发送测试邮件测试配置”验证邮件配置时候正确,然后点击应用保存,完成系统配置

RobotFramework+Jenkins自动化测试环境搭建及使用方法

接下来进行项目配置,进入项目配置页面,找到【增加构建后操作步骤】,选择【Editable Email Notification】,配置项不进行任何修改直接应用保存,接收到的就是默认的邮件格式,修改消息类型为HTML,将模板内容粘贴到Default Content中接收到的邮件就是模板样式

RobotFramework+Jenkins自动化测试环境搭建及使用方法

下图是使用默认邮件格式与使用了邮件模板所收到的邮件截图

RobotFramework+Jenkins自动化测试环境搭建及使用方法

邮件模板网上有很多,请自行问度娘,有能力也可以自己写个邮件模板,以下是本次使用的邮件模板代码

<!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>
上一篇:个人使用Onenote和Evernote对比


下一篇:onenote2016怎么自动备份笔记本到本地?