1. Robot FrameWork介绍
1.1 介绍
Robot Framework是用于验收测试和回归测试的通用测试自动化框架。 它使用易于理解的表格数据语法,非常友好的实现了关键字驱动和数据驱动模式。 它的测试功能可以通过使用Python或Java实现的测试库进行扩展,用户可以使用与创建测试用例相同的语法,从现有的关键字创建新的更高级别的关键字。
1.2 安装
在python环境下安装robotframework非常的简单,使用如下的命令即可,
pip install robotframework
在python路径的Scripts文件夹下如(C:\Python35\Scripts),可以查看到如下三个程序,这三个程序都是robotframework的执行程序,同时也说明安装成功
1.3 优势
1. 与python语言可以很好的兼容,降低框架设计和用例编写的难度。
2. 支持关键字驱动和数据驱动模式,对两种设计模式体现的非常明显。
3. 内置库丰富,提供很多控制和操作的方法。
4. 扩展库AppiumLibrary、HTTPlibrary (Requests)、Selenium2Library,让robotframework可以在很多测试方法完成工作
5. 很多工具有rf插件,提供API接口,提供持续集成能力
1.4 运行测试和测试报告
1、写一个小的的demo来演示,robotframework是如何工作的。robotframework编写的是.txt文件,新建一个文件testsuite1.txt,在文件中写入如下语句
2、打开cmd命令行,在命令行中输入如下语句,回车
3、输出3个结果文件
report.html 测试报告
log.html 日志文件
output.xml 详细的输出信息
2. Robot FrameWork基本语法
2.1. 文件结构
项目—套件—用例—关键字
内部基本模块
与配置相关
*** Settings *** 与配置相关
Documentation 测试的文档说明
Library 测试导入的库
Suite Setup 执行测试套件前的关键字
Suite Teardown 执行测试套件后的关键字
Test Setup 执行测试用例前的关键字
Test Teardown 执行测试用例后的关键字
Test Tmplate 测试模板--数据驱动模式
针对相同的工作流,执行不同的输入数据
使用一个高级的用户关键字,定义工作流,然后使用不同的输入和输出数据
测试相同的场景每个测试中重复使用同一个关键字
Resourse 导入的外部资源文件---主要是关键字
测试套件中的公共变量
*** Variables ***
${变量名} 变量值
用例主体
*** Test Case ***
用例名
[Documentation]
[Tags]标签
[Setup]
[Teardown]
关键字 参数
2.2. 变量
参考文档:https://blog.csdn.net/huapingqi/article/details/81140996
比起Python控制变量,RF会很方便,所以我们必须熟悉它,使用它
如果对比Python来学的话,会事半功倍
变量的种类
变量名包含变量种类标识符($, @, &, %),大括号({,})和变量名。大括号是强制使用的。
Robot Framework 中的变量和关键字相似,是大小写敏感,但对空格和下划线是忽略的。
1. 标量Scalar
标量是指${},这个有点像shell中的变量引用
赋值: ${a} Set variable 5
引用就简单的${a}就可以引用
如: Log ${a}
DemoSuite.txt
*** Test Cases ***
case1
[Documentation] 标量Scalar赋值和引用
[Tags] Scalar
#赋值
${a} Set variable 5
#引用
log ${a}
case2
[Documentation] 标量Scalar,作为返回1个值
[Tags] Scalar
#赋值
${a} Set variable HelloWorld
${ret} = Return One Value ${a}
log ${ret}
case3
[Documentation] 标量Scalar,作为返回多个值
[Tags] Scalar
${a} ${b} ${c} = Return Three Values
@{list} = Return Three Values
${scalar} @{rest} = Return Three Values
log many ${a} ${b} ${c}
log many @{list}
log ${scalar}
log many @{rest}
*** Keywords ***
Return One Value
[Arguments] ${arg}
${value} Set variable ${arg}+${arg}
[Return] ${value}
Return Three Values
[Return] foo bar zap
2. 列表List
用@{}表示,在python中列表赋值方式[a, b]
赋值:
@{List1} Create List user name password
@{L2} 1 2 3 4
@{L3} Set variable a b
取值及应用:
TestSuite2.txt
*** Test Cases ***
case1
[Documentation] 标量list赋值和引用
[Tags] list
#赋值
@{L1} Create List user name password
@{L2} Set variable a b c
#单个元素的取用
log @{L1}[0]
log @{L1}[1]
log @{L1}[2]
#在循环中使用
:FOR ${x} IN @{L2}
\ log ${x}
3、字典Dict
和Python里的定义一致, key=value格式
TestSuite3.txt
*** Test Cases ***
case1
[Documentation] 标量dict赋值和引用
[Tags] list
#赋值
&{D1} Create Dictionary student=Tom age=22
#单个元素的取用
log &{D1}[student]
log &{D1}[age]
4. 创建变量表
Variables.txt文件
*** Variables ***
${a} hello world
@{List1} one two three four
&{D1} user=username password=password
可以用
Resource ../../../../config_file/Data.txt
导入到工程中
5. 全局变量
DemoSuite4.txt
*** Test Cases ***
case1
[Documentation] 设置全局变量
[Tags] Set Suite Variable
#赋值
${code} Set variable 100
Set Suite Variable ${code}
case2
[Documentation] 使用全局变量
[Tags] Set Suite Variable
#赋值
log ${code}
在case1中创建的变量在case2中使用
2.3. 基础语法
1. 流程控制语句
*** Test Cases ***
case1
[Documentation] 流程控制语句
[Tags]
${smlie} Set variable 999
run keyword if ${smlie}== 999 log HelloWorld
2. 循环语句
*** Test Cases ***
case1
[Documentation] 循环语句
[Tags]
:FOR ${index} IN RANGE 5
\ log ${index}
2.4. 扩展库
Http Requests
selenium2Library
appium
2.5. 开发用户自定义关键字
利用Robot Framework编写测试用例,往往需要开发自己的关键字,有的关键字需要通过自己编写python代码来实现。这在rf中,就需要自己定义python库。这个过程其实不复杂,本文来介绍下。
1. 在python安装目录下的 Lib\site-packages 目录下 新建一个目录,目录名就是库名,如 NewLibrary
2. 在新建的NewLibrary目录下创建一个python文件,任何合法的文件名即可,扩展名为py。
如:myclass.py其内容如下
class MyClass(object):
def __init__(self):
pass
def printMsg(self,msg):
print "hello "+msg
上面代码定义了一个python类,其中除构造方法 init 外,还定义了一个printMsg方法,该方法其实就是rf中的关键字,可以直接在rf中使用。下面我们介绍。
3. 在新建的NewLibrary目录下创建 init.py 文件,文件名必须固定这样。该文件的功能,就是把关键字类暴露出来,让rf能知道。 init.py 其内容如下:
from myclass import MyClass
class NewLibrary(MyClass):
ROBOT_LIBRARY_SCOPE = 'GLOBAL'
4. 通过前面三个步骤,一个最简单的自定义的NewLibrary库就创建好了,在rf工具中就可以使用了
1)先要导入 NewLibrary 库
2)使用关键字printMsg。需要说明的是,在rf中引用时,既可以写成 printMsg,也可写成 print msg。一般习惯用空格把单词分开。因为rf关键字不区分大小写。
*** Settings ***
Library NewLibrary
*** Test Cases ***
successsd
print msg god
printMsg ss
printmsg yy
5、增加新的关键字 增加新的关键字很简单,只需在MyClass类中增加新的方法即可。如:
class MyClass(object):
def __init__(self):
pass
def printMsg(self,msg):
print "hello "+msg
def join_info(self,a,b):
print a+b
这里定义了 join_info方法。在rf中使用时,可以写成 join info 用空格分开。
上面介绍了最简单的自定义模块,虽然简单,但实际可以满足大部分自己开发的需求了。
3. 接口测试和用例设计
参考资料https://blog.csdn.net/weixin_42273775/article/details/81868184
对于如何进行接口测试,可以参考上面的资料,本文的下面部分开始讨论如何使用robotframework,来完成接口的功能测试,也就是图中标红色的部分
某一个接口的用例编写如下
将用例分成3个等级,Level1、Level2、Level3,Level3优先级最高
Level1:最能反应该接口功能的测试用例
Level2:参数的正常校验和异常校验
Level3:字段是否必传
4. Pycharm安装Robot FrameWork插件
我们已经知道编写roborframework脚本,其实就是编写.txt文件,那么有了功能强大的编辑器的辅助,会让工作事半功倍,下面讲述如何在Pycharm安装Robot FrameWork插件。
1. 下载IntelliBot
2. 打开PyCharm,单击 左上角file→settings →Plugins → 【install plugin from dink】
3. 配置文件类型
点击File>点击setting>点击editor>点击file types,点击右侧的+号配置一下文件类型即可
4. 至此已经可以在pycharm中编辑脚本了,但是还不能进行脚本的执行,接下来配置如何执行测试用例 点击File>点击setting>点击Tools>点击External tools,配置执行测试套件,可以执行一个测试套件内的所有case。
Robot Run TestSuite
-d ../../../../report $FileName$
$FileDir$
5. 添加执行单个用例的配置
Robot Run SingleTestCase
-d ../../../../report -t *$SelectedText$* ./ $FileName$
$FileDir$
6. 执行实例
5. rob框架介绍
下面开始介绍具体的功能
github 地址https://github.com/shengtangcike/robframe
5.1. 辅助工具生成测试用例
在用例设计阶段,建议在excel文件中设计测试用例,尤其是复杂的情况。excel文档结构如下
使用bin目录下面generatecase.py文件中的Generatecase类将excel中设计的case生成到.txt
文件中。txt文件才是我们真正需要的文件,生成的文件如下
5.2. 环境切换
目前编写的rob_frame框架需要兼容测试环境和自动化环境,自动化环境的脚本执行每日定时构建,而测试环境的脚本在代码构建完成之后执行,达到一个冒烟测试的效果。
1. 使用config_file目录下的env.ini和Data.txt文件来控制环境切换
2. 在使用python rob.py –e test/auto XXXXX执行时,会根据传入的test/auto值,重置env.ini和Data.txt文件,来达到控制环境切换的目的。
5.3. 用户关键字lib
将lib文件放到PYTHONPATH中,目的是用户自定义关键字放在工程目录文件lib中,同时要pybot.bat能够在任何位置找到这些.py文件,也就是说把这些.py文件添加到python的默认路径下
方法:在site-packages添加一个路径文件,如mypkpath.pth,必须以.pth为后缀,写上你要加入的模块文件所在的目录名称就是了。
lib文件中包含了目前所有的关键字
5.4. 扩展断言
对于一些接口返回信息的检查比较复杂,光靠是否有返回信息已经不足以判断,例如交易流水,需要检查倒叙排序,还有是否为同一类型,这种情况下可以通过编写python脚本实现断言控制。
ex.在HttpApiLib.py这个文件中,编写关键字对self.r.text进行处理...待完善
5.5. 执行报错的脚本
随着不断的持续集成,编写的测试用例不断的增加,这种情况下执行一轮测试用例会需要大量的时间,而后考虑到能否将报错的脚本单独执行呢?
具体实现是,将报告中的xml中的信息读取出来,获取是那些txt文件报错然后可以按照下面的方法执行。。。下面会说到
在用例执行完成之后,可以读取xml文件从中筛选出报错的txt文件,然后按照途中的方法,执行所有的报错的txt文件,来做到将错误的txt文件重新执行一遍而不需要全部执行
下面的ex说明了方法的可行性
6. 配置Jenkins
6.1. linux下安装部署Jenkins
1、 安装JDK
2、 安装Tomcat
解压tar -zxvf apache-tomcat-8.0.53.tar.gz
放在usr/local/tomcat下所以要创建tomcat文件夹并将解压文件移动到tomcat下
mkdir /usr/local/tomcat
mv apache-tomcat-8.0.53 /usr/local/tomcat/
进入tomcat安装bin目录并启动
cd /usr/local/tomcat/apache-tomcat-8.0.53/bin/
启动 ./startup.sh
关闭 ./shutdown.sh
成功启动后浏览器输入http://192.168.1.31:8090/
修改端口
查看tomcat是否启动
ps -ef |grep tomcat
假设tomcat所在目录为/usr/local/apache-tomcat/
1、打开tomcat配置文件 #vi /usr/local/apache-tomcat/conf/server.xml
2、打开Tomcat配置文件之后按 /8080 快速检索
3、修改端口,按 i 进行,将8080 修改为 80
4、按:wq 保存并退出
5、 重启tomcat
3、安装Jenkins
首次安装启动Jenkins,
jenkins初次登陆卡在SetupWizard界面
赋777权限给jenkins,并用谷歌浏览器打开,(本人亲测ok)
admin
123456
6.2. 安装Jenkins的robot framework插件
1、进入jenkins主页面,系统管理-管理插件-可选插件;在过滤栏输入“robot”,选择安装如下图的插件【Robot Framework plugin】
2、构建后的操作,选择“Publish Robot Framework test results”;
*Directory of Robot output 填一个本地路径,要根据你的output文件放在哪里,可以不填
*Thresholds for build result 测试用例执行成功率和通过率的设置,如80%和100%
6.3. 执行构建
1、qtw_interfacetest_autoenv_NoSendEmail
(1)测试环境自动化环境
(2)执行全部用例Level1/Level2/Level3
(3)不发送邮件
python /root/dengshaoke/lineDownlineUP/hyxd/rob_frame/bin/rob.py -e auto -p pybot -d /root/dengshaoke/lineDownlineUP/hyxd/rob_frame/report -f /root/dengshaoke/lineDownlineUP/hyxd/rob_frame/qutouwang/App
2、qtw_interfacetest_testenv_NoSendEmail
(1)测试环境qtw测试环境
(2)在去投网2.0测试//qtw_invest_api_test执行构建机构后进行该构建
(3)sleep 600s延时构建,等待系统启动
(4)执行Level1/Level2/Level3全部用例
(5)不发送邮件
sleep 300
python /root/dengshaoke/lineDownlineUP/hyxd/rob_frame/bin/rob.py -e test -p pybot -d /root/dengshaoke/lineDownlineUP/hyxd/rob_frame/report -f /root/dengshaoke/lineDownlineUP/hyxd/rob_frame/qutouwang/App
3、qtw_interfacetest_autoenv_SendEmail
(1)测试环境自动化环境
(2)定时构建,每日执行
(3)执行用例等级为Level1的用例
python /root/dengshaoke/lineDownlineUP/hyxd/rob_frame/bin/rob.py -e auto -m YES -p pybot -d /root/dengshaoke/lineDownlineUP/hyxd/rob_frame/report -f /root/dengshaoke/lineDownlineUP/hyxd/rob_frame/qutouwang/App
4、qtw_interfacetest_error_case
(1)执行上次构建报错的case
6.4. 即时构建
在构建完成【去投网2.0测试】下面的qtw-invest-api-test任务后,会即时构建qtw_interfacetest_testenv_NoSendEmail,达到冒烟测试的目的,有问题及时反馈出来。
java -jar jenkins-cli.jar -s http://192.168.1.31:8090/jenkins/ build qtw_interfacetest_testenv_NoSendEmail --username admin --password 123456
参考资料:https://www.cnblogs.com/honeybee/p/6525902.html
1、下载jenkins-cli
jenkins-->系统管理-->Jenkins CLI:如下图
2、命令行执行
http://192.168.1.31:8090/jenkins/
查看jenkins-cli的帮助
java -jar jenkins-cli.jar -s http://192.168.1.31:8090/jenkins/ help
查看job列表
java -jar jenkins-cli.jar -s http://192.168.1.31:8090/jenkins/ list-jobs
6.5. 其他遇到的问题
1、Jenkins打不开robotframework测试报告,报Opening Robot Framework report failed错误
参考资料:https://blog.csdn.net/huashao0602/article/details/53925492
2、Jenkins开放用户注册和匿名查看功能,可以不登陆而查看登录Jenkins
https://blog.csdn.net/boonya/article/details/77362603
3、jenkins的工作目录
cd /root/.jenkins
cd workspace
cd job