测试框架共同点:
- 手工编写用例+测试数据
- 手工运行用例 — > 自由运行用例
- 肉眼全程观察运行过程—>自动记录运行过程
- 肉眼校验结果 — > 自动校验测试结果
- 手工编写测试报告—> 自动生成测试报告 (查看测试报告,分析测试报告,反馈bug,优化脚本)
Robot Framework 框架学习
一、 RF特点:
- 开源、基于python语言
- 丰富的第三方库: UI , API, Android, iOS
- 测试用例支持: txt\tsv、html等格式编写
- 关键字驱动,用已有关键字形成业务关键字
- 测试用例支持变量使用、IF语句和FOR循环
- 支持继承svn、git、jekins等工具
- 灵活、可扩展
- 丰富的编辑工具
Robot Framework 学习地址: https://robotframework.org/ ---->Library
二、 Robot Framework四大常用使用模块介绍
1. *** Test Cases *** 用例模块
2. *** Keywords *** 关键字
3. *** Settings *** 库导入模块
4. *** Variables *** 变量
关键字存放在:
资源文件中(资源文件名.robot / 资源文件名.resource)
资源文件的导入: 在用例套件中, Settingsm模块导入,导入格式: Resource 资源文件名.后缀
三、 Robot framework 变量定义、调用
-
变量定义
${} – 纯量 。代表一个值
@{} – 列表 。 N个值(列表)
&{} – 字典, key-value -
变量赋值:
接收关键字调用后的返回值
通过关键字来赋值: ${} – set variable
@{} – create list
&{} – Create Dictionary -
变量调用:
${} 直接调用,无论变量是纯量,字典还是列表类型,调用时,需要转化为纯量
列表元素访问: ${list[0]}
字典key对应value值访问: ${dict.key} 或者 d i c t [ ′ k e y 值 ′ ] ( k e y 如 果 字 符 串 , {dict['key值']} (key如果字符串, dict[′key值′](key如果字符串,{dict[‘key值’]},否则,则 ${dict[key]} 即可访问) -
变量的作用域:
1. 用例中定义的变量则只作用于该用例
2. robot用例套件文件里边 Variables中的变量,只作用于该用例套件
3. 如果用例中对变量设置了: set suite variable 变量名,那么该变量也可以在该套件其他用例中使用
我们也可以将变量定义到py文件中,使用时,直接引用就好了
引用在套件文件中的Settings中引入py,然后再调用变量:
Variables.py 内容如下:
username = “Lujier”
pwd = “123123”
list1 = [‘中国建设银行’, ‘中国银行’, ‘浦发银行’, ‘陕西信合’]
dict1 = {“name”: “Lujier”, “pwd”: “123123”}"""字典变量,robot套件在引用py模块变量时,语法跟robot原来不一样 比如: 测试套件在使用,robot中的字典的key对应的value获取时,格式是: ${dict1.key} ---》 遵循robot语法 py文件中的字典时,却需要: ${dict1[key]} ----》遵循python语法 那么,怎样才可以让py变量也可以像robot中的变量一样,使用robot语法来访问呢? 在列表前面加上: LIST__ 在字典前边加上: DICT__ 被调用时 """ LIST__list002 = [1, 3, 6, 8] DICT__dict002 = {"name": "Lujier", "age": "18 forever"}
测试套件robot内容:
*** Settings ***
Variables variables.py # 引入变量文件,相对路径即可*** Test Cases *** test_001 LOG TO CONSOLE ${username} test002 LOG TO CONSOLE ${list1} test003 LOG TO CONSOLE ${dict1} test004 [Documentation] 读取列表局部值 LOG TO CONSOLE ${list1[0]} test005 [Documentation] 读取字典局部值(与python读取一样,不能用robot读取robot变量的方式) LOG TO CONSOLE ${dict1["name"]} test006 [Documentation] LIST__ 或则 DICT__变量可以按照robot语法来使用变量 LOG TO CONSOLE ${dict002.name} LOG TO CONSOLE ${list002[0]}
四、 常见关键字:
-
FOR循环遍历
举例:
列表for循环遍历
@{list1}= Create List a b c
:FOR ${i} IN @{list1} # For循环遍历
\ LOG TO CONSOLE i e x i t f o r l o o p i f " {i} \ exit for loop if " i exitforloopif"{i}" == “b” # 条件满足,跳出循环列表for循环遍历_下标 @{list1}= Create List a b c ${len} = get length ${list1} # 获取列表长度 :FOR ${index} IN RANGE ${len} # For循环遍历 \ LOG TO CONSOLE ${list1[${index}]}
-
if 判断 RUN KEYWORD IF
*** Test Cases ***
Test title
${datas} set variable 88
RUN KEYWORD IF d a t a s = = 0 L O G T O C O N S O L E 竟 然 是 0... E L S E I F 0 < {datas}==0 LOG TO CONSOLE 竟然是0 ... ELSE IF 0< datas==0LOGTOCONSOLE竟然是0...ELSEIF0<{datas}<60 LOG TO CONSOLE 竟然不及格
… ELSE log to console 及格了 -
异常
*** Test Cases ***
用例异常关键字使用
${passed}= run keyword and return status addnums 100 300
RUN KEYWORD IF ${passed} LOG TO CONSOLE 成功
… ELSE log to console 失败用例异常关键字使用2 ${passed}= run keyword and return status addnums 100 300 400 RUN KEYWORD IF ${passed} LOG TO CONSOLE 成功 ... ELSE log to console 失败 *** Keywords *** addnums [Documentation] 加法函数定义 [Arguments] ${a}=1 ${b}=2 # 函数参数,默认值 Log ${a}+${b} ${sum}= Evaluate ${a}+${b} # ${sum}= Evaluate $a+$b [Return] ${sum} # [Return] $sum
五、 robot 自动化
Web UI 自动化: SeleniumLibrary
pip install --upgrade robotframework-seleniumlibrary
App UI 自动化: AppiumLibrary
pip install robotframework-appiumlibrary
接口自动化: RequestsLibrary
pip install -U requests
pip install -U robotframework-requests
以 Web自动化为例:
- Selenium库引入:
用例文件Settings引入: Library SeleniumLibrary - 常见关键字
在RF中,seleniumlibrary的元素定位方式和selenium保持一致
表达式2种:
定位类型:定位表达式 ,如 id:hello
定位类型=定位表达式
如果是css定位,需要在定位前面加上: css= - 等待:
只需要在会话启动的时候设置
等待元素可见: Wait Until Element is Visible
等待元素出现: Wait Until Page Contains Element
1. Robot_Web自动化思想:
1) PO分层思想,
2) 用到知识: Library、Keyword、Resource、TestCase/TestSuite
Settings - 引入库、引入资源|变量文件、前置后置
3) 用例管理
. 自动加载用例--- 需要告知robot,在那个目录(工程目录)下去收集用例
. 默认报告 --- 默认存放在所在的目录
报告是否可指定路径? 可以
用例是否可筛选? 可以打标记:
用例标记:用例内部[Tags]
类标记: Settings中:Force Tags 强制标签
Default Tags 默认标签
4) 用例运行,可以在console控制台:
. 运行所有用例: robot 项目路径
一般建议,进入到该项目目录下,在使用: robot 用例目录 来运行用例,此时报告就会默认显示在该项目下
. 运行指定标签的用例: robot -i 标签名 项目路径/用例路径
如: robot -i smoke python_robot_20190919_20190921
. 用例执行结果(报告、日志等文件)指定位置
robot -i 标签名 -d 存放报告路径 项目路径/用例路径
如: robot -d python_robot_20190919_0921/OutPuts python_robot_20190919_20190921
. 运行指定测试套件:
robot -s 套件名称/路径 项目路径/用例路径
. 接收robot命令行所传的参数
robot -i -标签 -v 变量名:变量值
如: robot 文件内容
*** Test Cases ***
get_cmd_key_and_value
[Documentation] 获取运行命令中传的参数
[Tags] global_value
LOG ${browser_type}
那么robot命令就是:robot -i global_value -v
browser_type:chrome name:Lujier -d python_robot_20190919_0921/OutPuts python_robot_20190919_20190921