如何编写Robot Framework测试用例1
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何编写Robot Framework测试用例1相关的知识,希望对你有一定的参考价值。
最重要的一条原则就是保证测试用例对于不熟悉这个领域的人来讲越简单越好。关于这个主题的更多信息,你可以查看以下这些优秀的资源:
Writing Maintainable Automated Acceptance Tests 作者:Dale H. Emery
How to Structure a Scalable And Maintainable Acceptance Test Suite 作者:Andreas Ebbert-Karroum
命名
测试套件的命名
套件的名称应该尽可能地描述这个套件的用途。
名称可以相对长一些,但是如果超过40个字那也太长了一些。
记住 Robotframework 的套件名称是直接从文件/目录的名字转换来的。文件的后缀名被去掉了而且下划线会被转换成空格,如果你的用到的单词都是小写的,那么开头字母会被转换成大写的。比如 login_test.txt 会被转换成 Login Tests, DHCP_and_DNS 会被转换成 DHCP and DNS。
测试用例的命名
测试用例的名字应该与套件的名字描述相似。
如果一个套件里包含了好多个相似的测试用例,而且测试套件本身已经很好地命名了,那么用例的名称可以简短一些。
在测试用例文件中的名称应该恰好表达了你需要做什么。
关键词命名
同样的,关键词的名称也应该是清晰具体的。
应该可以表达这个关键词干了什么,而不是它如何去做。
关键词应该是非常不同的抽象层次(比如,「输入字符」或者「用户登录到系统」)。
生成和分解的命名
试着用名称来描述这个步骤完成了什么。
或许你可以用一个已经存在的关键词
如果生成或者分解包含了不相关的步骤,那么可以接受更抽象一点的名称。
在名称中列举步骤是一个重复化和维护的问题(比如:登入系统,添加用户,激活警报和检查平衡)。
或许需要用到一些通用一些的名称比如「初始化系统」
每个用到这几个测试用例的人都需要明白这几个生成或者分解动作是干什么的。
文档
测试套件的文档
通常把文档添加到包含测试用例的最底层套件中是一个不错的想法。
高层的套件不需要那么频繁地文档化。
文档应该包含必要的背景信息,比如为什么要创建这些测试用例,测试环境中需要注意的点等等。
文档内容不要只是简单地重复套件的名称。
如果不是真的有文档还不如不添加文档。
文档的内容不要包含关于测试用例的太详细的信息。
测试用例本身就应该足够清楚易懂了。
重复的信息是一种浪费,而且也不容易维护。
文档中可以添加一些详细内容的链接。
如果你需要在文档中添加一些比如(版本:1.0 或者 OS:Linux)这样的「名称-值」组的话,可以考虑使用测试套件 metadata 参考技术A 这样的表格存储到一个文件中,就是一组测试用例。RF支持多种格式,如HTML,TSV,纯文本等。它们长相大同小异,其实描述的都是一种内容。为了方便,推荐使用RIDE这个用例的编辑工具来编写测试用例,这些文本在RIDE环境下被打开长得是一个样子的。 测试用例与文件的关系 一个文件被称作一个测试套件(Test suit),期间可以包含多个测试用例。上图就是一个测试套件,里面包含2个测试用例,My Test 和AnotherTest。 Test suit也能嵌套,比如同一个目录下的多个Test suit组成一个更高层的Test Suit,这些更高层的Test suit可以组成,这种嵌套的层数可以无限多。这种嵌套的用例组织形式在实际应用中很常见。 测试用例文件的内部结构 一个Test Suit文件包含四段内容他们分别是:Setting,Variable,Testcase,Keyword Setting部分主要的作用是: 引用测试类库文件(test Library),引用资源文件(resource files),引用变量文件(variable files)。 为测试套件或者测试用例定义元数据(metadata) Variable部分的主要作用是: 定义测试用例中要使用的变量。 TestCase部分的主要作用是: 使用测试关键字来完成测试用例 Keword部分的主要作用是: 把现有关键字进行组合,生成更高一级的新关键字。 对测试用例文本解析的规则 如同各种编程语言一样,RF需要对它规定的这种表格语言进行解析,并用内部引擎把这些脚本语言解释成执行测试用例的具体操作。在解析过程中我们需要如下几点: 忽略字符:根据格式不同,忽略不符合格式的字符,规则很多,但是可以使用RIDE来规避,使用RIDE我们就可以不考虑这些。 转义符:RF使用 \ 作为转义符。举个例子:\$notvar 代表字符串 $notvar 而不是一个变量 空格:RF会自动截断头尾的空格 多行用例 如果参数太多,需要换行,则需要在下一行的关键字处使用英文的省略号(...)表示参数属于同一个关键字。 Test Case Action Argument Argument Argument Example [Documentation] Documentation for this test case. ... This can get quite long... [Tags] t-1 t-2 t-3 ... t-4 t-5 Do X one two three ... four five six $var = Get X 1 2 ... 3 4 5 ... 从上表中我们可以看到:[Tags]有5个参数,而Do X有6个参数。本回答被提问者采纳
如何在 Robot Framework 中编写循环
【中文标题】如何在 Robot Framework 中编写循环【英文标题】:How to write a loop while in Robot Framework 【发布时间】:2016-07-19 14:57:22 【问题描述】:我做了第一个简单的测试用例,但我遇到了一个问题。
是否可以在 Robot Framework 中编写循环?
我想从地址和修改后的变量“i”的地址中检索值。我想执行直到存在这样的地址,因为它是表中的一行。
$f1 A
$f_temp B
While $f1 != $f_temp
or
While element xpath=//$i is visible
\ $F_temp Get Text xpath=//$i
\ $i $i+1
\ Run Keyword And Continue On Failure Should be equal $f_temp $f1
有什么想法吗?
【问题讨论】:
【参考方案1】:Robot Framework 没有 while 循环。您必须使用 FOR 循环和“exit for loop if”关键字退出。它将在有限时间内运行,但如果您在范围内选择足够大的数字,它对于实际用途来说已经足够接近了。
*** Test Cases ***
For Test
FOR $i IN RANGE 999999
Exit For Loop If $i == 9
Log $i
END
Log Exited
【讨论】:
谢谢回答。我有第二个问题。是否可以编写像 $i 2 和 $link xpath=//div/div[$i]/table... 之类的代码?当它位于 xpath 的中间时,我无法将变量分配给另一个变量。 RF 向我返回一个错误,例如 No keyword with name xpath=//div/div[$i]/table... 我认为您需要使用“设置变量”关键字。试试这个:"$link= Set Variable xpath=//div/div[$i]/table" 如果这不起作用,请提出一个新问题。 不,我不是。我和 Pekka 甚至同时在同一个房间。 请注意,for 循环有一种新语法! robotframework.org/robotframework/latest/… 感谢您对 kuga 的评论,我已将代码更改为新语法。【参考方案2】:您可能正在寻找Wait Until Keyword Succeeds
关键字,它使您能够执行与while 循环类似的构造。它比带有条件退出的FOR
循环更具可读性。
然后您使用自定义关键字,当您需要结束“循环”时该关键字会失败。
【讨论】:
这会在等待关键字成功时在日志中生成大量不需要的错误,尤其是当循环多次迭代时,即使最终结果通过了。如果您检查错误的变量很长,则日志文件会很大。【参考方案3】:正如上面的答案所说,Robot 不支持原生 WHILE 循环。 但是,如果您坚持,这可能会有所帮助。 https://github.com/robotframework/robotframework/issues/3235
【讨论】:
【参考方案4】:这是 Robot Framework 中的其他类型的 FOR 循环,我在自己的笔记中有这个,它非常有帮助。
FOR Loop with Upper Bounds Range
[Documentation] This gives us a 0 based range
FOR $Index IN RANGE 5
Do Something $Index
$RANDOM_STRING = Generate Random String $Index
Log $RANDOM_STRING
END
FOR Loop with Start and Finish Range
[Documentation] No longer a 0 based range because I provided start
FOR $Index IN RANGE 1 4
Do Something $Index
$RANDOM_STRING = Generate Random String $Index
Log $RANDOM_STRING
END
FOR Loop with Start, Finish, and Step Range
[Documentation] The counter will jump by 2 each time ("step" value = 2)
FOR $Index IN RANGE 1 10 2
Do Something $Index
$RANDOM_STRING = Generate Random String $Index
Log $RANDOM_STRING
END
#index for elements in for
$index = Set Variable 0
FOR $col IN @cols
$colum Format String css:div[class='v-widget v-has-caption v-caption-on-top'] table[aria-rowcount='0'] tbody tr:nth-of-type(1) td:nth-of-type(10) $r_count $col
Click element $colum
press Keys none $net_config.broadcast
Press Keys none TAB
Press Keys none $net_config.$index
$index= Evaluate $index + 1
END
#-------
FOR Loop with List
@ITEMS = Create List Item 1 Item 2 Item 3
FOR $MyItem IN @ITEMS
Log $MyItem
END
Exit a FOR Loop
@ITEMS = Create List Item 1 Item 2 Item 3 Item 4
FOR $MyItem IN @ITEMS
Log $MyItem
Run Keyword If "$MyItem" == "Item 3" Exit For Loop
Log Didn't exit yet
END
Log Now we're out of the loop
【讨论】:
以上是关于如何编写Robot Framework测试用例1的主要内容,如果未能解决你的问题,请参考以下文章
我们可以在 Robot Framework 中用 CSV 或 Excel 文件编写测试用例并通过读取 CSV 文件来执行吗
在 Robot framework 数据驱动方法中生成测试用例