编辑推荐: |
本文来自于csdn,介绍了Robot
框架快览,安装robot,关键字 keywords,Selenium 简介等。 |
|
Robot 框架快览
在这里来一个对于robot framework的快览。了解一下安装步骤等等事项。好了,来吧干了这杯。。。
Robot 是基于python实现的。
也有java实现版本
测试功能是基于关键字(keywords)实现的,这是robot测试功能的中心思想。
对于不同方面测试的关键字,例如数据库测试,是和不同的测试包结合在一起的。Robot framework本身自带了标准测试包。(新手套装
:))
新的关键字和新的测试功能可以用python或者java来写。
也可以用已有的关键字创建新的关键字。就像自己搞一个自己的编程语言一样,略碉。
robot框架有着很好的日志功能,可以和一些持续集成环境。
安装robot
我用Python, 我就只翻译python的方法了,java的亲请自行google 或者参照原文
pip install robotframework |
robot --version
Robot Framework 3.0 (Python 2.7.11 on darwin) |
这样就好了, 就是这么简单。
关键字 keywords
robot 官网已经有了一个非常完整的用户手册。有可能你会觉得这篇博客会有些多余,但是我个人觉得这篇文章还是在某些方面的叙述比官方手册要具体些。比如:
关键字。
第一个例子:
现在我们来写一个很简单的robot 框架测试。
*** Settings
***
*** Test Cases ***
Test Robot Framework Logging
Log "Test Logging" |
这个测试除了 记录了 一句 test logging 其他啥事没干。Setting 里面啥也没有是因为没有任何外部测试包需要导入,所以我就空着它,反正无伤大雅。
在 test cases里面我们定义了一个测试。这个测试执行了一个关键字 Log, 而且我们给这个关键字传递了一个参数,一个字符串:
“Test Logging”。在关键字和参数之间必须有两个空格区分,而且每个test cases 必须有两个字符的缩进。这两个都能从例子中体现,但是有时候总会被忽略。测试可以用pybot
或者 java执行。这里我用的是python。
pybot --outputdir
./ report example.robot |
--outputdir 是用来定义日志和报告文件存储地址的。这里我们存在report 子目录下。
Robot 框架支持不同的测试的格式,这里我用的是robot后缀,这个和原文略有不同,是因为这个是pycharm
robot framework插件默认的新测试的格式后缀。这个插件可以自动生成一些测试模板。但是基本和原文里用txt的方法一样,只要将txt里的内容拷贝到新robot文件里就好了。其他你还可以用
HTML 或者 行为测试描述。这两种方法略难,就不赘述了。这里的平文的方法是最简单和直接的, 使用者只需要习惯那些时常出现的多出来的空格。
关键字--一个编程语言
使用关键字,就和学习一门新的编程语言一样,所以你需要记忆一些语法,幸运的是robot的语法不是很复杂。当然你还必须知道这门新的语言给你提供了些什么,对于robot来说你需要知道例如怎么实现一些结构,像循环和条件语句等一些关键字,这就又意味着需要知道新手装中哪些测试包和关键字是可用的。
那么很有必要看看这个新手装的测试包和关键字列表,请注意新手装(standard lib)每个角色建立之后都有
装了robot之后就有。一些额外的包需要自行安装屠龙需要自己打。
在来一个例子:
*** Settings
***
Library String
*** Test Cases ***
Test Robot Framework Logging
Log Test Logging
Log Many First Entry Second Entry
Log To Console Display to console while Robot
is running
Test For Loop
: FOR ${INDEX} IN RANGE 1 3
\ Log ${INDEX}
\ ${RANDOM_STRING} = Generate Random String ${INDEX}
\ Log ${RANDOM STRING} |
我个人比较喜欢这个例子,虽然短但是基本给了一些怎么使用关键字的方法。首先我们添加了两个新的不同关键字的测试,在原来的关键字底下添加新的关键字,
这基本就是实现多个测试的方法,尽管这里我们只是实现了日志测试。例子中还描述了怎么定义一个新的测试集。第二个测试集给出了怎么实现循环和怎么用关键字赋值。这里的
关键字 “Generate Random String” 是来自 String 包里面的, 我们在Setting里面导入了这个包,这个包是属于新手装里面的。
定义自己的关键字
知道现在我们都是用的已有的关键字,现在我们来写一个新的关键字。
*** Settings
***
*** Test Cases ***
Test Robot Framework Logging
Log Test Logging
Test My Robot Framework Logging
My Logging My Message WARN
*** Keywords ***
My Logging
[Arguments] ${msg} ${level}
Log ${msg} ${level} |
新的关键字写在Keywords区域下面, 语法和写一个测试集相似。主要的区别是你可以给你自己设定的关键字传递任意的参数。例如Login关键字通常会得到一对username
和 password的参数,然后将所有的实现方法隐藏起来。如果你的keywords特别多,或者你想让你的自定义keywords更加容易的重复使用,你可以将keywords定义块放在一个resource文件中,然后在setting中导入这个文件,如下。
*** Settings
***
Resource resource-2.txt
*** Test Cases ***
Test Robot Framework Logging
Log "Test Logging"
Test My Logging
My Logging "Test My Logging 1" "Test
My Logging 2" |
除了 基本的新建keywords的用法,你还可以在keywords块定义Setup和Teardown。
*** Settings
***
Suite Setup Setup Actions
Suite Teardown Teardown Actions
*** Test Cases ***
Test Robot Framework Logging
Log Test Logging
*** Keywords ***
Setup Actions
Log Setup Actions done here
Teardown Actions
Log Teardown Actions done here |
Tagging 标签
这个和keywords关系不大,就是在读测试报告的时候比较方便看出你在测什么。
*** Settings
***
*** Test Cases ***
Test Robot Framework Logging
[Tags] sample logging
Log "Test Logging" |
测试报告 和 日志 文件
Robot 框架的报告和日志功能都很碉。请看。
Java 部分的keywords实现翻译,就交给大家了, 我只用python。
Seleniun2Library: 一个替代SeleniumLibrary的库
Selenium 简介
Selenium 知道现在还是首选的网络应用的测试工具。起源于2004年,经历了不少改进。最大的改动是从Selenium
1 (RC)到 Selenium 2 (Web-Driver)的转变。 现在 Selenium 2
的出现已经不是什么新闻了。但是还有很多使用robot 框架的项目还在使用1代的产品。这篇博客希望能够在转到Selenium
2上面提供帮助, 并且告诉大家这个转变并不需要花费很大经历,况且你在测试稳定性上能得到极大的提高。
一代和二代的对比
原文提供了一张很长对比表, 我就直接拷贝了。表中罗列的只是两代中同样的keywords的对比。请注意这里面对比的是Robot关键字,非Selenium
原生方法。我在看原文的时候也差点被带沟里。我就说我怎么没在Selenium Web Driver 里面听说过
keywords这个术语呢。
这些对比是从Selenium RC的最后的版本2.9.2 的keyword库和 Selenium 2
的版本1.7.4对比而来。以下的keywords是selenium 2里没有的:
Call Selenium Api
Capture Screenshot
Click Flex Element
Current Frame Should Contain
Double Click Flex Element
Flex Element Property Should Be
Flex Element Should Exist
Flex Element Should Not Exist
Flex Element Text Should Be
Frame Should Contain Text
Get Inner Html
Highlight Element
Input Text Into Flex Element
Press Key Native
Select Flex Application
Select From Flex Element
Start Selenium Server
Stop Selenium Server
Wait Until Page Loaded
不同点的分析
回到主题, 貌似这个selenium 2 没有的keywords略多,达不到和一代“无缝替代”的名号,OK,
让我静静。。。
没有出现的 flex-keywords 关系不大,忽略。start 和 stop selenium
server,很明显二代已经不需要了,因为根本没有server给你来启动和停止。Highlight
Element 是用做调试用的。Get Inner HTML 和 Capture Screenshot
被 Capture Page Screenshot取代了。Current Frame Should
Contain 和 Frame Should Contain Text 分别被 Select Frame
和 Current Frame Contains 取代了。Wait Until Page Load
已经被关键字内置的wait机制所取代, 你可以给关键字一个非必须的参数 “dont_wait”来控制这个wait机制的开关。这样算算,其实就只剩下
Call Selenium API 和 Press Key Native了。Call Selenium
API 是用来执行一些没有被弄成keywords的Selenium原生API。因为Selenium
2库加了新的keywords,那些没有的可能已经被包含在新的keywords里面了。The Press
Key Native 也不常用 忽略。
基本大概就是这样,用Selenium 2 有几个好处:
Webdriver API 是支持真的浏览器的,所以就不要运行一个selenium 服务器了。
你可能可以用无头模式测试: 我估计是用phantomjs之类的无头浏览器。
更好的支持使用AJAX 测试应用。
从一代到二代的转换最好用非侵入式的转变, 这就意味最好等到受到影响的测试能够很好的运行,在完成转变。这就意味着以下几点:
如果项目较小,就直接把所有的测试拷贝一下,而后新旧两个测试同时运行一段时间,直到新的测试可以达到交付标准。
大的话,同样的方法也可以,但是最后是对于软件内部构件一个一个的来做。
在产品开发中, 有一些库说不定已经包含了Selenium,那么最好也做个备份,然后平行的运行两个新旧的测试,知道变更的库是可以运行的。
和TeamCity CI 一起用
Well 我发现TeamCity 还算比较好用。就试着用了一下。整体上 和Jenkin的方法类似,Jenkin的我就不翻译了,大家触类旁通就好了。懂得。。。
自动化测试如果没有和CI 服务器联合的话,是完全没有意义的。所以这章和下一章都是关于怎么把Robot框架和不同的CI平台结合。并且我们经常用Jenkins来作CI服务器,是时候讲讲什么不一样的了。Well,所以我们现在讲讲Robot框架和Teamcity
CI 服务器的结合。
安装
Teamcity 可以直接去人家的官网下载。
tar xvf TeamCity-9.1.6.tar
cd TeamCity/bin
./runAll.sh start
打开一个浏览器, 输入 http://localhost:8111/mnt。
然后各种proceed,各种安装。
如果一切顺利,应该是这个画面
点击project 然后创建一个新的项目。各种填。
填好了之后,你应该能看到这个画面。
点击 create build configuration 来添加新的设置。然后又是各种填。
填完之后,应该是这个画面。
点击 Add build step
Well 这个画面是魔法的开始。在custom script里面我们定义了 一些我们想要执行的命令。基本这三个命令的含义是
变换到robot 测试文件的文件夹, 然后运行测试文件,然后退出文件夹。 |