Robot framework-Builtln库关键字(更新中)

(一)HTML error messages

许多关键字在关键字执行失败时,允许使用一个可选的错误消息。在这些消息中使用HTML是可行的,只要在前缀使用

*HTML*

查看用例的失败关键字。并且要注意到不止能在Builtln library使用HTML,在其他任何有错误消息的库里都可以。

(二)Evaluating expressions 求值表达式

许多关键字,例如Evaluate, Run Keyword If and Should Be True, 支持可以在Python中求值的表达式。

Evaluation namespace计算命名空间

表达式使用Python的eval函数计算表达式,因此,所有python内嵌函数(如len(),int())都可以用。除此之外,所有未被识别的变量都被认为是自动导入的模块。我们是有可能使用到所有Python可用模块,包括标准模块和安装的第三方模块。

123
Should BeTruelen(’${result}’)>3
Run Keyword Ifos.sep==’/’Non-Windows Keyword
${robot version}Evaluaterobot.version

Evaluate也允许配置执行自定义姓名空间和被导入的自定义模块。后一个功能在使用嵌套模块
时非常有用,比如rootmod.submod的执行,因此根模块不会自动导入子模块。否则,之前已经说过的模块自动导入机制足够让需要的模块被导入。
注:Automatic module import is a new feature in Robot Framework 3.2. Earlier modules needed to be explicitly taken into use when using the Evaluate keyword and other keywords only had access to sys and os modules.

Using variables(使用变量)

当你在表达式中使用普通的${variable}语法,在表达式被评估之前替换它的值。这意味着,在表达式中使用的值是变量值的字符串表达形式,而不是变量值本身。 这对于数字和其他具有可以直接求值的字符串表达形式的其他对象不是问题,真正有问题的是对那些行为依赖字符串表达形式的对象。最重要的是,必须始终使用引号引起字符串,并且如果字符串中包含换行符,必须使用三引号。

1234
Should BeTrue${result}>3Return code greater than 10
Run Keyword Ifos.sep==’/’LogPassed
${robot version}EvaluateLogOutput contains FAIL

实际变量值在evaluation namespace 里也可用。采用特殊的变量语法(没有中括号,如$variable),就可使用。这些变量永不能被引用。

1234
Should BeTrue$rc>10Return code greater than 10
Run Keyword If$status==‘PASS’LogPassed
Run Keyword If‘FAIL’ in $outputLogOutput contains FAIL
Should BeTruelen($result)>1 and $result[1]==‘OK’
Should BeTrue$result is not None

使用$variable语法会稍稍减慢表达式评估的速度。这不是十分重要,但是如果经常评估复杂表达式并且有严格的时间限制,这一点就必须考虑。
要注意的是,与其创建复杂的表达式,不如将逻辑移进测试库。这可以简化维护并且可以保障执行速度。

使用心得:
Exit For Loop If后面,需要比较两个字符串是否相等,之前一直使用加括号的方式,一直报语法错误.查了一些资料,说需要加单括号或者双括号,然后还是报错。崩溃了两天之后,突然想起来之前翻译的这个文档,尝试了一下终于成功!!

failed: SyntaxError: invalid character in identifier (<string>, line 1)
failed: NameError: name '删除' is not defined nor importable as module
错误方法1:${banner_name}==${banner_name_create}
错误方法2:'${banner_name}'=='${banner_name_create}'
正确方法:$banner_name==$banner_name_create

在这里插入图片描述

(四)Boolean arguments 布尔参数

一些变量允许参数以布尔变量True或者false进行处理。如果有一个变量以字符串的形式给出,那么若它是一个空字符串/等于FALSE,NONE,NO,OFF/0(不区分大小写),我们就认为它是false。验证某些允许从可能的错误消息中删掉实际值和期望值的关键字,也认为字符串‘no value’是false。除了关键字文档明确的状态之外,其他字符串都是true。并且,其他参数类型使用Python中的规则进行测试。

(五)Pattern matching 模式匹配

许多关键字允许测试是全局或者正则表达式

Glob patterns
1234
*匹配任何字符串,甚至空字符串
匹配任何单字符
[chars]匹配括号里的一个字符
[!chars]匹配不在括号里的一个字符
[a-z]匹配括号范围内的一个字符
[!a-z]匹配不在括号范围内的一个字符

不像普通的glob patterns,路径分隔符/,\ ,和换行符\n,皆可由上述通配符匹配。
Support for brackets like [abc] and [!a-z] is new in Robot Framework 3.1.

Regular expressions 普通表达式

例如Should Match Regexp之类的关键字,支持regular expressionsregular expressionsglob patterns更有用也更复杂。regular expressions的支持的执行依赖Python的re-module,更多关于语法的信息可以查询文档。

(六)Multiline string comparison 多字符串比较

如果两者的字符串超过两行,Should Be EqualShould Be Equal As Strings使用unified diff format报告错误。

1234567
${first}=CatenateSEPARATOR=\nNot in secondSameDiffersSame
${second}=CatenateSEPARATOR=\nSameDiffers2SameNot in first
Should Be Equal${first}${second}

结果如下图错误消息:

Multiline strings are different:
--- first
+++ second
@@ -1,4 +1,4 @@
-Not in second
 Same
-Differs
+Differs2
 Same
+Not in first

(七)String representations 字符串替代

有些关键字显式的打印值(如Log),一些则是隐式(如:当出错时的Should Be Equal)。默认情况下,关键字使用具有可读性的替代字符串打印日志,也就是说,像“hello”和“42”这样的字符串会按照原样打印。大多数时候,这是理想的操作,但是也会有以下几个问题:
1)从不同的对象中区分出相同的替代字符串是不可能的,例如字符串42和整型42
因此,在这种情况下,Should Be Equal和其他关键字在错误消息中加入类型信息。
2)不可打印的字符(例如Null byte)不可见。
3)结尾的空格不可见
4)不同的换行符无法彼此区分。(Windows系统的\r\n , 其他系统的\n )
5)一些Unicode字符看起来一样。(例如,拉丁语的a(\u0061) 和西里尔的 а (\u0430))
a != а这样的错误信息就是无用的。
6)一些Unicode字符可被译成不同形式的字符。例如,ä 可以被译成单个码点 \u00e4 或译成两个码点 \u0061 , \u0308 的组合。这样的标准形式,我们认为是相等的,但是在Python中进行比较时,包含这些字符的字符串会被认为不相等。像ä != ä这样的错误信息也被认为不相等。
7)例如列表和字典这样的容器被格式化为一行,这样很难看到它们包含的单个字符。
为了克服以上问题,像LogShould Be Equal这样的关键字,有可选的格式化程序参数,这样的参数可用于配置替代字符串。支持的值有str (默认),repr, 和ascii,它们的工作原理和Python内嵌功能的原理相似。下面会解释更深一步的含义。
The formatter argument is new in Robot Framework 3.1.2.

str

使用具有可读性的代替字符串,和在Python3中使用str()和在Python2中使用unicode()相同。默认情况下如此。

repr

使用机器可读的替代字符串。与在python中使用repr()相似,这就意味着像字符串Hello会被打印为’Hello’,换行符和不可打印符会转义为**\n** 和**\x00**,等等。非ASCII码会像Python3中的ä和Python2中的转义形式。使用ASCII码始终获得转义形式。
下面是一些针对标准repr()的改进:
1)更大的列表,字典会采用美化打印,使得每行展示一项。
2)在Python2中,Unicode字符串省略里前缀u,而将前缀b加到byte字符串中。

ASCII

在Python3中使用ASCII和在没有ASCII的Python2中使用repr()是一样的。使用方法和上面说的repr的方法大概一致,但也有一下几点不同:
1)在Python3中,非ASCII的字符会转义为\xe4,而不是ä。这使得区分那些长得像实际又不一样的Unicode更简单。这也是repr在Python2的工作原理。
2)在Python2中只使用标准的repr(),这意味着,Unicode字符串有前缀u,而byte字符串没有前缀b。
3)容器打印没有美化。

🌟🌟(八)Keywords 关键字

关键字参数文档说明
Call Method使用提供的参数,调用给定对象的命名方法 。返回方法中可能的返回值并赋给变量。对象中不包含给定名称的方法或者方法执行引发异常,这两种情况都会导致关键字执行失败。参数中可能出现的等号,必须使用反斜杠转义,如=。
Catenate*items将给定参数连接并返回连接后的字符串
Comment*messages将日志文件中的将给定信息显示为关键字变量
Continue For Loop跳过目前这次循环迭代并继续下一次循环
Continue For Loop Ifcondition如果给定的condition为真,跳过目前这次的循环迭代
Convert To Binaryitem, base=None, prefix=None, length=None将给定参数转换为二进制串
Create Dictionary*items根据给定参数创建字典并且返回该字典
Create List*items返回包含参数的列表
Evaluateexpression, modules=None, namespace=None用Python评估给定表达式并且返回结果 expression按照“评估表达式”部分中的说明在Python中进行评估。 modules参数可以用于指定要导入并添加到评估姓名空间的Python模块的逗号分隔列表。namespace参数可用于将自定义评估姓名空间作为字典传递。可将modules添加到此姓名空间
Exit For Loopcondition停止执行封闭FOR循环。退出封闭FOR循环并继续执行之后的命令。可以直接在FOR循环中使用或者是循环中使用的关键字中使用。例如:在这里插入图片描述如果希望不使用Run Keyword If或其他封装的关键字时实现有条件地退出循环,可以去查看Exit For Loop If的用法,
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值