robot framework开发和调试关键字

使用了一段时间的robot framework,感觉工具的应用理念和扩展性,灵活度都很不错。使用过程中也发现了一些问题,在ride上开发测试用例的确很方便,但是编辑底层的关键字和运行时的调试非常不便。想请中文站上的高手提供这方面的经验。比如使用某个IDE去开发调试底层的关键字和作为整个测试用例运行时的调试。万分感谢

学习Robot Framework必须掌握的库—-BuiltIn库

近来经常有童鞋问我一些RF的基本问题,如:如何实现循环?如何退出循环?如何实现判断?如何做类型转换?其实,作为一门表格语言,为了保持简单的结构,RF没有像别的高级语言那样提供类似if else while等内置关键字来实现各种逻辑功能(注1),而是提供给了用户BuiltIn库。如果用户想在测试用例中实现比较复杂的逻辑,那就需要对BuiltIn中的重要关键字有一些了解。另外,BuiltIn库中还封装了很多常见方法和能够控制RF运行状态的关键字,如果想用好RF,一定要对BuiltIn库中的函数有一个比较全面的理解。下面就带着大家认识一下BuiltIn库中比较重要的关键字。

Evaluate 关键字:如果你需要进行一些数值运算并得到结果,你就需要用到Evaluate关键字。Evaluate会把你想要计算的表达式直接传递给Python,并把Python的计算结果返回给你。这是最经常要用到的。

Should 系列关键字:Should系列关键字是Should大头的一系列关键字。
Should Be Empty · Should Be Equal · Should Be Equal As Integers · Should Be Equal As Numbers · Should Be Equal As Strings · Should Be True · Should Contain · Should Contain X Times· Should End With · Should Match · Should Match Regexp · Should Not Be Empty · Should Not Be Equal · Should Not Be Equal As Integers · Should Not Be Equal As Numbers · Should Not Be Equal As Strings · Should Not Be True · Should Not Contain · Should Not End With · Should Not Match ·Should Not Match Regexp · Should Not Start With · Should Start With
这些关键字都是用作判断时用的,每个用例都会用到,比如我们的执行结果得到了一个字符串,我们要判断这个字符串要与一个预期字符串相等,否则用例就无法通过,这时候,肯定会用上 Should Be Equal As String
关键字,其它关键字我们通过关键字的名字就能顾名思义,知道它的作用。

Convert To系列关键字:
Convert To Binary · Convert To Boolean · Convert To Hex · Convert To Integer · Convert To Number · Convert To Octal · Convert To String
做类型转换比不可少。

Run keyword系列关键字:
Run Keyword If · Run Keyword If All Critical Tests Passed · Run Keyword If All Tests Passed · Run Keyword If Any Critical Tests Failed ·Run Keyword If Any Tests Failed · Run Keyword If Test Failed · Run Keyword If Test Passed · Run Keyword If Timeout Occurred ·

这些关键字能根据一个判断条件的真假来看是否执行关键字。一般使用这些关键字来实现高级语言中的if else功能。最常用的是Run Keyword If 和 Run Keyword unless 他们俩实现的效果正好相反。

Exit For Loop关键字:
用作退出循环,一般和Run keyword if 关键字联合使用,来实现条件退出。

Wait Until Keyword Succeeds
这是一个将异步调用变为同步调用的关键字。举一个例子:如果call某个WebService,并且需要得到返回结果才能做下一部操作。我们就会用到这个关键字。

BuiltIn库里还有很多宝贝,比如日期相关的关键字Get Time。让测试暂停的Sleep等。都相当有用。还等什么?
去这个链接遍历一遍它吧:)http://robotframework.googlecode.com/hg/doc/libraries/BuiltIn.html

注1:RF目前仅有2个内置关键字:FOF 和 IN,来实现循环结构。功能还是比较弱的。

rebot的使用

rebot简要使用方法介绍
在介绍rebot前,首先说一下RobotFramework(后称RF)的主要输出文件。

当我们执行完一个RF脚本后,RF会输出3种文件。分别是Output、Log和Report。

Output 是和xunit兼容的一种xml格式的输出文件。可以被各种持续集成工具读取。所有被记录下来的信息其实都在里边。
Log是RF从output文件中提取并格式化的html文件,里边有所有keyword执行的细节情况。
Report也是从output里提取出来的html文件,里边以报表的形式给出了执行情况的统计信息。

Rebot是一个RobotFramework(后称RF)自带的工具。它能够对多个Output 进行整合,并重新输出Log 和Report文件。
这就使得我们可以很方便的组合多个或者多次执行的结果到一个Report或者Log文件中。

下面结合一种使用场景,给出Rebot的用法。

使用场景描述:第一个testsuit用pybot执行,第二个testsuit用jybot执行,但是想把结果整合到一起。(这种场景其实也可以用remote技术统一到pybot里去执行)。

第一个testsuit(testsuit的名称叫 suitForJybot.txt)的脚本如下:

*** Test Cases ***
case1
log runned by jybot

第二个testsuit(testsuit的名称叫 suitForPybot.txt)的脚本如下:

*** Test Cases ***
case1
log runned by pybot

假设两个testsuit在一个目录中,假设为d:\rebot。

我们在命令行中做如下操作。
d:
cd d:\rebot
jybot -o out1.xml suitForJybot.txt

执行完毕后,我们看到目录中有了一个文件叫做out1.xml

继续在命令行中执行。

pybot -o out2.xml suitForPybot.txt
执行完毕后,我们看到目录中有了一个文件叫做out2.xml

下面就要使用rebot了。
执行:

rebot out1.xml out2xml

这样我们看到目录中有了一个文件叫做 output.xml ,log.html 和report.html
查看 log.html和report.html,我们发现两次执行的结果已经被合并在了一起。rebot很简单很强大吧?

进阶:

1.其实上述一系列命令可以写成一个windows下的批处理文件,或者linux下的shell文件,能够进一步简化你的工作。
2.pybot/jybot里面的很多参数很有用,例如 -t 可以指定执行哪一个testcase; -i可以根据tag指定要执行的testcase;-e -c这些都能够帮助你灵活的控制执行范围。pybot还支持随机顺序执行等高级操作。
3.pybot中的 -o -l -r参数分别可以规定 output ,log ,report的输出,可以灵活指定输出到那里,很有用。
4. rebot中有同样类似的参数,可以让你随心所欲的生成各种报告。详细可以在命令行模式下使用rebot –help 指令查看参数列表。

当时为什么开源robotframework?

@吴穹adam问我:“兄弟 问一个历史问题?当时rf为什么要开源呢?”

我说:“因为有很多外部用户,而且开源还能促进它快速发展”,“具体的原因估计的问Pekka或Ran才知道,我回头问问”

于是我转头就发邮件,问现在在芬兰GOSEI公司的Ran Nyman和给自己的Eliga公司打工的Pekka Klarck。Ran当年在诺西内部负责协调robotframework开发工作,相当于是robot的PO。我们当时是同一个团队的队友(诺西的敏捷转型团队,绰号Flexible Company)。Pekka是robotframework的创始人和核心开发者,他的硕士论文《Data-Driven and Keyword-Driven Test Automation Frameworks》就是robotframework的理论基础,其他主要开发者请查看http://robotframework.org官方主页的人物名单,或者他们博客主阵地上列出的贡献者名单。

Ran列出如下好几个理由:

  1. 获得贡献和辅助工具(Get contributions and supporting tools)
  2. 避免robot在诺西削减开销的大环境下被咔嚓掉(Prevent NSN from killing RF when it saves money)
  3. 为社区做贡献(Contribute to the community)
  4. 推广robot的使用范围,方便诺西未来需要时好招熟练工(Get wider usage to RF so in some point NSN could hire people that already know RF)
  5. 没觉得开源会造成任何的伤害(We did not see any harm in open sourcing it)

Pekka也很认同这些理由,他认为第一点是最最重要的原因。而后又继续补充了如下几条理由:

  • 避免开发人员以开源方式创建相似但却不兼容的项目。这种情况可能迟早都会发生(Avoid developers creating similar, but incompatible, project as open source. We probably would have done it sooner or later.)
  • 这样一来,不必登录诺西内网也可以很方便的开发这个框架(Make it easy to develop the framework also when not at NSN intra)
  • 使用优良的代码托管服务(Get good code hosting services)
  • 诺西的友好意愿(和第三点有关)以及开发人员可以得到公众认可(Goodwill for NSN (related to point 3 above) and some public recognition also to devs)

windows下RF的SSH库安装(python way)

安装顺序:

1.PyCrypto 。 在主页下载 或者去pypi下载。

setup.py install 安装。(我遇到了些问题,记录下来)

——————————————————-

安装问题

提示找不到vsvarsall.bat这个文件。python用的是vs编译器。

打开 %Python home%\Lib\distutils\msvc9compiler.py

搜索错误提示,发现有一个函数 find_vcvarsall(version):

直接把内容注释掉,只留下一行最后一行,让函数变为:

def find_vcvarsall(version):
return r’D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat’

上面给出你的vcvarsall所在的绝对目录,省得它去注册表里边找,然后拼接折腾。

修改后再安装,提示

error: command ‘mt.exe’ failed with exit status 31

google出了答案:

仍然是 %Python home%\Lib\distutils\msvc9compiler.py 文件

搜索: ld_args.append(‘/MANIFESTFILE:’ + temp_manifest)

在这一行下面加入:ld_args.append(‘/MANIFEST’)

然后安装成功。

——————————————————-

2.安装paramiko 。在这里下载后 setup.py install 安装。

3.从此页面找到对应的安装文件安装。至此已经安装完成。

如果使用Jython,可以参考下面这篇文章。

http://blog.sina.com.cn/s/blog_654c6ec70100tdho.html

如果木有vc咋办?争取做出一个二进制的包,做出来后放出。

在windows7 64位上安装selenium2library问题解决

今天发现了windows7 64位上安装selenium2Libaray的问题,下载exe文件安装不行。就切换成了半自动模式。

方案如下:

1.首先下载pip安装。(因为要用pip来安装 selenium 和 selenium2library)

下载地址: http://pypi.python.org/pypi/pip

在命令行进入安装文件解压目录,执行setup.py install 安装pip。

2.安装decorator(实践证明,不安装无法正常工作,没有读源码,猜测是64位和32位某些函数用法不同,框架为了只写一套代码使用了decorator模式。32位下好像木有发现这个情况。)

保持网络畅通的情况下,在命令行执行:pip install decorator

等待安装完成。

3.安装selenium库(S2L其实是调用selenium库,所以先要安装它)。

在命令行执行:pip install selenium

等待安装完成。

4.安装selenium2Libarary

在命令行执行:pip install robotframework-selenium2library

等待安装完成。

到这里,其实安装木有结束。这么安装的selenium不带driver。只有firefox能用(因为它的driver直接用python写了)。如果想测试IE还得下载IEdirver,测试Chrome还得下载ChromeDriver。这是2个exe文件,需要单独下载并加入到环境变量path中。

下载地址列表在这里:

http://code.google.com/p/selenium/downloads/list

选择适合你操作系统的driver。

然后保存到某个目录,把这个目录加到path环境变量中。

此时问题全部解决。

思考:有没有简单点儿的方法?如果跑到selenium的下载页面下载完全安装包,安装下来也省事儿不了多少。

有人愿意发扬雷锋精神帮助大伙儿打一个么?

齐涛同学写过一篇由0.5.2升级到1.0.1版本的文章。大家也可以参考。另外今天下午发现S2L升级到1.1.0了。感觉作者有点儿懒,好多issue都木有回复:(。

http://blog.csdn.net/tulituqi/article/details/7604967

RobotFramework2.7.5版本发行

RobotFramework今天发行了2.7.5版本。做出的最大的更新就是对2.7.4版本新加入的XML库做了大幅升级。

上个版本的XML库仅支持读操作,这个版本支持写操作了,并且对原有的关键字进行了扩充。

现在操作XML再也不用自己二次开发相关库函数了:)

新版的XML的关键字文档见下面链接:

http://robotframework.googlecode.com/hg/doc/libraries/XML.html?r=2.7.5

没有升级2.7.5的同学也可以直接这个库下载了加到你的robot/libraries下面直接使用。

下载地址:http://robotframework.googlecode.com/hg/src/robot/libraries/XML.py

WIN7零起点运行Selenium2Library

步骤如下:

  1. 安装Python:下载win32的python安装包,或者到python下载页面寻找适合你操作系统的。(测试:新开命令行窗口,敲击“python”回车)
  2. 安装robotframework:到robotframework主页安装win32的2.7.4版本,或者其他版本。(测试:新开命令行窗口,敲击“pybot –version”回车)
  3. 安装easy_install(或者pip):安装适用于python2.7、win32的0.6c11版本,或者其他版本
  4. 安装Selenium2Library(参考安装文档):
    • 使用1.0.1版本的win32安装包其他版本)进行安装。或者直接用easy_install命令安装,在命令行窗口敲击如下命令:
      easy_install robotframework-selenium2library
    • 根据具体情况敲击如下命令(例如无需再安装robotframework)
      easy_install robotframework
      easy_install selenium
      easy_install decorator
      easy_install docutils
    • 测试:新开命令行窗口,敲击“python”回车,然后在python提示符下输入“import Selenium2Library” ,出现命令行即表明运行已经安装成功,否则将出现大量错误信息。
  5. 用robotframework写一个最简单的case,可以包含如下内容(可使用html文件模板写,也可以下载安装RIDE工具写):
  6. 至此,应该已经可以顺利运行该测试并通过了。
  7. 已知问题的解决方法:
    1. 显示“[ WARN ] Keyword ‘Capture Page Screenshot’ could not be run on failure: No browser is open”,遇到此问题,请打开文件浏览器至Selenium2Library的utils目录,修改其中的browsercache.py文件,将close(self)方法中的语句“browser.quit()”修改为“browser.close()”。即可解决此问题。

如下为一些截图以供参考:

【测试文件】

image

【命令行运行结果】

image

【报告文件】

image

【日志文件】

image

RobotFramework安装后运行pybot提示PYTHON_EXECUTABLE错误解决方案一粒

同事把RF的环境搞坏了,进行了重装。重装后执行pybot提示:
‘”[PYTHON_EXECUTABLE]”‘ is not recognized as an internal or external command, operable program or batch file.
查看环境变量设置正确,重新安装无效。
搜索robotframework的issue库。有下面解决方法:
在python的script文件夹下找到robot_postinstall.py这个文件执行以下就解决问题了。
执行一遍,果然好了。查看了一下源码,大概是解决了一下依赖关系(木有深入去看)。
出现这种情况的条件是:
win7,原有2.6.3版本没有卸载干净,然后装了2.7.4版本。

记录一下备忘。
这是issue列表中的帖子链接:
http://code.google.com/p/robotframework/issues/detail?id=810