02:robotframework关键字、变量、循环

1 关键字的使用

RF的能力是由关键字提供的,所以,我们必须对RF的常用关键字有个了解,这样才能把RF用好。

最常用的关键字就在RF的标准库中

http://robotframework.org

其中Builtin是标准库中的内置库,

Shortcuts Keywords 就是关键字目录表,具体介绍每个关键字

关键字参数

第一列就是关键字的名称

第2列就是关键字参数!!!

必选参数和缺省值参数

再来看一个常用关键字: should be equal

比如下面的 builtin库里面的


href="#Should%20Be%20Equal%20As%20Integers" title="Link to this keyword" Should Be Equal


first, second, msg=None, values=True, base=None

其中,参数 first 、second 是必选参数,需要填写内容,

而参数 msg,values,base是带缺省值的参数,不填表示使用缺省值 是可以选的,可以不填。

2 常用关键字

Should Be Equal

Should Contain

set variable

log many

log

log to console

sleep

Convert To Integer    Convert To Number

set variable 只支持赋值一个字符串给变量,如果我们想赋值一个整数,或者浮点数,需要用 Convert To Integer    Convert To Number

如果我们想把一个数字作为 关键字的参数,可以使用数字变量

log to console   ${32}

log to console   ${32+4*6}

Should Be Equal/ Should Not Be Equal

Should Contain/ Should Not Contain

Should Start With/ Should Not Start With

Should End With/ Should Not End With

一个特殊关键字Should Be True

它的参数本身是python 表达式语句,RF会直接用python解释器 的eval函数,来解释这个参数表达式。

Should be true与python两个区别:1,变量前面加个$符号 2. 不能中间有多于两个空格

3  认识测试库

通常,关键字是由测试库提供的。 其实测试库就是python 模块文件。

关键字就是 Python库里面的函数和类的方法。

RF就是本身就是个Python程序, 所以它的寻找库文件的原理和python是一样的。最终是通过sys.path。

我们在哪个目录下面运行robot,那个目录就是当前工作目录当前工作目录就是在sys.path里面的。所以,我们放在当前目录下面的python模块文件,直接就能被找到。

RF 脚本使用函数名、方法名 大小写不敏感。

4 库的导入

要使用测试库提供的关键字,我们必须要 声明 导入库。

当然一个特例:除了RF 的  builtin库的关键字,不需要声明。

库的名称 在RF里面是大小写敏感的。

有的库,在导入的时候,可以提供参数,比如SeleniumLibrary

http://robotframework.org/SeleniumLibrary/SeleniumLibrary.html

Importing链接,点开,有参数 就是导入可以设置的参数

timeout=5.0,

implicit_wait=0.0,

run_on_failure=Capture Page Screenshot,

screenshot_root_directory=None

其实这些导入时带参数的库,对应的测试库都是用类实现的。

这些参数就是类的初始化方法__init__里面的参数。

5 变量的用法

RF中的变量,实质上就是一个Python变量,它指向一个Python对象。

所以RF变量对应的是什么Python对象,它就是什么类型的对象。

Scalar方式(Scalar Variable

普通用法,就是用 ${var} 的方式来表示。

特点:当我们把变量以Scalar方式传递给关键字作为参数的时候, 就是直接把它所对应的Python对象传递给关键字 对应的函数。

List Variable

如果RF变量实际指向一个Python List对象,

我们还可以把它以List方式传递给关键字作为参数。

List方式 是用 @{var} 的方式来表示,也把这种方式表示的变量叫做List 变量。

List方式,实际上会展开其List中的每个元素,作为多个参数传入。

Dictionary方式(Dictionary Variable

如果RF变量实际指向一个Python Dict 对象,

我们还可以把它以Dict方式传递给关键字作为参数。

Dictionary方式 是用 &{var} 的方式来表示,

也把这种方式表示的变量叫做Dictionary 变量。

Dictionary方式,实际上会展开其Dict中的每个元素,作为多个参数传入。

访问环境变量

RF中可以用%{env_var} 方式直接访问一个环境变量,比如

${date} set variable  hello
log to console ${date}
把信息写到日志里
log ${date}
#用来断言,校验两个对象是否相等
should be equal  ${date} 20200
校验两个数字
should be equal as integers  ${date} 12345
校验两个字符串
should be equal as strings
校验两个浮点类型
should be equal as numbers
校验是否是空的
should be empty
是否包含
should contain
should contain  hello  h

#当在python表达式中使用RF的变量,需要去掉大括号,这会直接指向对应的python对象
should be true
返回值是布尔类型

should be true  $date=‘hello‘    不是${date}=‘hello‘
should be true len($date)==5

6 循环

RF用 :FOR来实现循环,没有While 循环

对应的文档解释在这里

http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#for-loops

注意

l :FOR前面的冒号不能忘了,

l 如果后面的是变量是个list, 一定要写成 @的形式,而不是$的形式,

l for循环体内的语句, 要缩进一个单元格, 如果是纯文本文件, 连续的空格是无法表示多个单元格的,RF会只当成一个。 所以前面还要有一个反斜杠转义,表示这边有一个空的单元格

range用法

python中,我们非常常用的有 range方法,RF也有类似的支持,

http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#id578

range用法

[Documentation]    Loops over values from 0 to 9

    :FOR    ${index}    IN RANGE    10

    \    Log To Console    ${index}

RobotFramework 作业 2

创建一个测试套件文件,实现 2个测试用例:

用例1:

1. 用Python语言开发一个测试库 course_mgr.py。

该库有一个函数 listCourse 可以返回教管系统的所有课程(可以使用requests库开发)。

2. 用RF测试用例来使用 listCourse 关键字, 根据其返回的课程列表,

将所有的课程名输出到日志文件中(使用循环)

验证是否和预期课程相同

用例2:

登录网站https://www.vmall.com/index.html

获得所有热销单品的名称,打印在log报表中

【参考答案,往下翻】

测试库 course_mgr.py

import requests

def listCourse():

params = {‘action‘:‘list_course‘, ‘pagenum‘:‘1‘, ‘pagesize‘:20 }

response = requests.get("http://localhost/api/mgr/sq_mgr/",params=params)

bodyDict = response.json()

return [ one[‘name‘] for one in bodyDict["retlist"]]

if "__main__" == __name__:

cnamelist = listCourse()

for one in cnamelist:

print (one)

测试套件文件 s1.robot

*** Settings ***

Library SeleniumLibrary

Library course_mgr

Library Collections

*** Test Cases ***

测试1

${courseList}= ListCourse

:FOR ${ele} IN @{courseList}

\ log to console ${ele}

${expected}= Create List python语言 初中化学

Lists Should Be Equal ${courseList} ${expected}

测试2

Open Browser https://www.vmall.com/ chrome

Set Selenium Implicit Wait 4

${eles}= Get Webelements css=.home-hot-goods .grid-items:not(.grid-items-sm) div

:FOR ${ele} IN @{eles}

\ log to console ${ele.text}

\ ${eletxt}= evaluate $ele.get_attribute(‘innerText‘)

\ log to console ${eletxt}

Close Browser

原文地址:https://www.cnblogs.com/kelly11/p/12681695.html

时间: 2024-08-30 13:02:29

02:robotframework关键字、变量、循环的相关文章

Python 变量循环

.title { background-color: black; color: aliceblue; height: 28px; width: 100%; line-height: 28px; text-align: center; font-family: 仿宋; font-size: 15px; opacity: 0.5 } --> { } Python 变量-循环 一.变量 不管什么编程语言或脚本语言 在定义变量时都有一定的规则.Python变量定义规则如下: 变量名只能是字母.数字或下

查找jar包中.class文件关键字(变量名,字符串)

有时查看日志,常常会发现由框架底层打印的错误日志.要修改这个错误的时候,如果不是对框架特别熟悉,就需要按照可能产生这个错误日志的流程一步一步找,一时半会不一定能找到.比如本人最近对smartfoxserver搭建的服务器做压测的时候,发现最大等待线程数超过20就会打印错误日志,然后就一直在smartfoxserver接受请求的反编译代码里找该错误输出,花了很长时间一直没找到.然后我在想能否用inputstream来查询字符串,试验代码如下: import java.io.BufferedRead

python中非关键字可变长参数和关键字变量参数的区别

#非关键字可变长参数 def add(*arg):    return type(arg) print add() #打印结果 <type 'tuple'> #关键字变量参数 def abd(**args):    return type(args) print abd() #打印结果 <type 'dict'> 由此,非关键字可变长参数是元组类型,关键字变量参数是字典类型

sql 循环语句几种方式(变量循环,游标循环,事务)

--第一 declare @orderNum varchar(255) create table #ttableName(id int identity(1,1),Orders varchar(255)) declare @n int,@rows int insert #ttableName(orders) select orderNum from FOrders where orderId<50 --select @rows=count(1) from pe_Orders select @ro

前端学习-02 jQuery结束each循环、模板字符串、css的@charset

jQuery的each方法结束循环 let arr = [1, 5, 7, 2, 8, 9]; $(arr).each(function(index, item) { if(item == 5) { return true; // 相当于 continue, 进行下一次循环 } if(item == 8) { return false; // 相当于break, 结束循环 } console.log(item); // 1 7 2 }) 控制台打印结果:1  7  2 模板字符串 字符串拼接繁琐

ecshop 模板变量循环 foreach

ecshop是smarty的改版,删除了一些功能,比如模板中的四则运算被删除了,比如我们想通过运算得到循环的key+1这样是得不到他的值的,不过我们可以使用其他的方法来得到. .iteration iteration contains the current loop iteration and always starts at one, unlike index It is incremented by one on each iteration. 比如 $menu_list = array(

Swift - 02 - 常量和变量

//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground" // 常量的定义用let let maxLoginCount = 10 // 变量的定义用var var currentLoginCount = 0 currentLoginCount = 3 // 同时定义多个变量或者常量 var x = 10, y = 20, z = 30 // 定义常量的时

django之定义模板语法02(for语句循环list数据)

1.定义index页面 <html> <head> <title>DOcument</title> </head> <body> <h1>{{user}}</h1> </br> </br> <h1>注意:book变量的模块变量格式不要漏掉了</h1> {% for book in user %} <li>{{book}}</li> //是{

第02周-单变量线性回归

一个有监督的房价训练模型如下所示: 单变量线性回归问题: 模型预测值与训练实际值之间的差距,就是建模误差. 一般常用的代价函数是平方误差函数,之所以提出误差的平方和,是因为误差平方代价函数对于大多数问题特别是回归问题,都是一个合理的选择. 常使用梯度下降作为求函数最小值的算法,开始时我们随机选择一个参数的组合,计算代价函数,然后我们寻找下一个能让代价函数下降最多的参数组合,持续如此,就能找到一个局部最小值. 批量梯度下降的过程: 原文地址:https://www.cnblogs.com/jiqi