设为首页 收藏本站
查看: 1158|回复: 0

[经验分享] python 自动化测试平台 Robot Framework快速入门 [原创翻译]

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-15 08:40:19 | 显示全部楼层 |阅读模式


  RobotFramework快速入门



1.1 概述            RobotFramework是一个通用的关键字驱动自动化测试框架。测试用例以HTML,纯文本或TSV(制表符分隔的一系列值)文件存储。通过测试库中实现的关键字驱动被测软件。Robot Framework灵活且易于扩展。它非常适合测试有不同接口的复杂软件:用户接口、命令行,Web服务,专有的编程接口等。
            RobotFramework是开源软件安装包源代码等文档可通过http://robotframework.org获取本指南旨在介Robot Framework的基本概念。更详细的技术说明,请参阅Robot Framework用户指南。
  
1.2 安装            安装Robot Framework之前先要安装Python。如果使用Java编写的测试库,Jython中必须安装。使用这个快速入门指南,Python已经足够了。
            有三种不同的方式安装RobotFramework,详细的安装步骤参见installationinstructions。安装包可从download page下载。
1,        Windows平台的二进制安装。双击安装程序,下一步就可以了。
2,        每个平台上Robot Framework都可以从源代码安装。解压源文件并运行命令python setup.py install
3,        如果有Python包管理系统Easy InstallRobot Framework可以通过easy_install robotframework安装。在Windows中,您还需要手动运行robot_postinstall.py脚本。
安装框架后,有必要把含有启动脚本的目录加入PATH环境变量。在类UNIX系统上,这会自动完成。但Windows必须在控制面板>系统>高级>环境变量加入如:\ Python27\ Scripts中到PATH
检验安装:
# pybot --version
Robot Framework 2.6.3 (Python2.7.2 on linux2)Robot Framework 2.6.3 (Python 2.7.2 on win32)
1.3 运行演示本快速入门指南,也可以作为一个可执行的演示。如果你是在线阅读本指南,你需要先下载robotframework-quickstart-.zip,解压然后键入以下命令:
      pybotquickstart.html
文件中的测试就会执行,并产生了以下报告:
report.html
      测试结果摘要
log.html
      详细的测试结果
Output.xml
       portable  XML格式的测试结果,方便与其他工具集成
  Pybot有很多命令选项可以用来控制执行测试和产生输出,可以通过 –help来查看。例如,以下命令更改日志文件的名称和顶层测试套件的名称:
            pybot --log mylog.html --nameMy_Fine_Tests quickstart.html
1.1 实例程序介绍            本指南中的示例应用程序是一个经典的登录例子的变种:它是一个Python书写的基于命令行的认证服务器。目前,示例应用程序允许用户做三件事:
*创建一个有效密码的帐户。
*使用有效的用户名和密码登录。
*更改现有帐户的密码。
            应用程序在sut目录和可以通过命令python sut/login.py执行。试图使用一个不存在的用户帐户或不正确的密码会有如下相同的错误消息:
> python sut/login.py loginnobody P4ssw0rd
Access Denied
            创建有效的用户名和密码之后可能成功登录:
> python sut/login.py createfred P4ssw0rd
SUCCESS

> python sut/login.py loginfred P4ssw0rd
Logged In
           
            有效密码必须符合两个要求:它必须是7-12个字符,它必须包含小写和大写字母和数字,但它不能包含特殊字符。试图创建一个无效密码的用户将失败:
> python sut/login.py createfred short
Creating user failed: Passwordmust be 7-12 characters long

> python sut/login.pycreate fred invalid
Creating user failed: Passwordmust be a combination of lowercase and
uppercase letters and numbers
            更改密码也会有相应的提示:
> python sut/login.pychange-password fred wrong NewP4ss
Changing password failed: AccessDenied

> python sut/login.pychange-password fred P4ssw0rd short
Changing password failed: Passwordmust be 7-12 characters long

> python sut/login.pychange-password fred P4ssw0rd NewP4ss
SUCCESS
            应用程序使用一个简单的数据库文件来保持用户状态。文件位于操作系统的临时目录。比如C:\Documentsand Settings\andrewx\Local Settings\Temp,/tmp等。
  
2  测试用例2.1 第一个测试用例            Robot Framework测试用例使用简单的表格语法的使用。例如,下面的表中有两个测试:
                     *用户可以创建一个帐户并登录
                   *用户无法登录与密码错误
  
  Test Case
  Action
  Argument
  Argument
  User can create an account and log in
  Create Valid User
  fred
  P4ssw0rd
  Attempt to Login with Credentials
  fred
  P4ssw0rd
  Status Should Be
  Logged In
  
  
  
  
  User cannot log in with bad password
  Create Valid User
  betty
  P4ssw0rd
  Attempt to Login with Credentials
  betty
  wrong
  Status Should Be
  Access Denied
  
            请注意,这些测试几乎像用英文写的手工测试,而不是像自动化测试用例。Robot Framework使用关键字驱动的办法,支持自然语言的方式编写测试,捕获的动作的实质和预期结果。测试用例由关键字(通常在第二列)及其可能的参数组成。
2.2 高级测试用例            测试用例也可以只使用没有参数的高级关键字。这种风格可以使用自由的文本,适合与非技术性的客户等沟通。RobotFramework不强制以任何特定的风格编写测试用例。例如它可以使用given-when-then的行为驱动开发(BDD behavior-drivendevelopment):
  
  Test Case
  Steps
  User can change password
  Given a user has a valid account
  when she changes her password
  then she can log in with the new password
  and she cannot use the old password anymore
  
            这种格式适合用于验收测试驱动开发(ATDD)。在ATDD中,验收测试在实际的产品功能之前书写并和需求一致。
2.3 数据驱动测试用例            常常几个测试用例,非常类似,只是输入或输出数据不同。在这种情况数据驱动的测试情况下,如以下六个测试,允许不同的测试数据,不重复的工作流程。
  Test Case
  
  Password
  Expected error message
  Too short password
  Creating user with invalid password should fail
  abCD5
  ${PWD INVALID LENGTH}
  Too long password
  Creating user with invalid password should fail
  abCD567890123
  ${PWD INVALID LENGTH}
  Password without lowercase letters
  Creating user with invalid password should fail
  123DEFG
  ${PWD INVALID CONTENT}
  Password without capital letters
  Creating user with invalid password should fail
  abcd56789
  ${PWD INVALID CONTENT}
  Password without numbers
  Creating user with invalid password should fail
  AbCdEfGh
  ${PWD INVALID CONTENT}
  Password with special characters
  Creating user with invalid password should fail
  abCD56+
  ${PWD INVALID CONTENT}
  
            在这些测试中,每个测试用例只有一个关键字,它是试图根据给定的密码创建用户并检查预期的创建失败的错误消息。因为只对标题行的第一个单元进行处理,可以用有意义的列标题描述数据。还要注意,错误消息中使用了变量。
3  关键字            测试用例由关键字创建。关键字有三个来源:总是可用的内置关键字,来自导入测试库的库关键字和用户在创建测试用例时使用表格语法创建的用户关键字。
3.1 内置关键字            一些通用的关键字,如获取时间(Get Time)和应该等于(Should Be Equal)。这些关键字来自内建测试库BuiltIn。通过它的文档,你可以看到一个完整可用关键字列表。
3.2 库关键字            所有最低级的关键字在测试库中定义,这些测试库使用标准编程语言实现。Robot Framework带有一些库,包括OperatingSystem:支持常见的操作系统功能,Screenshot截图库。除了这些标准库,还有其他开源项目,如SeleniumLibrary。如果没有合适的可用的库也很容易实现自己的库,参见implementyour own libraries。
            使用测试库的关键字之前需要导入,它必须考虑到使用。本文件中的测试需要导入标准OperatingSystem的库中的关键字(如Remove File)以及从自定义库LoginLibrary(如Attempt to login with credentials)。
  
  Setting
  Value
  Library
  OperatingSystem
  Library
  testlibs/LoginLibrary.py
3.3 用户关键字            RobotFramework最强大的功能之一是能够方便地从其他关键字创建新的更高级别的关键字。创建用户定义的关键字(简称为用户关键字)的语法类似于创建测试用例。前面测试用例用到的高级别的关键字如下:
  .
  Keyword
  Action
  Argument
  Argument
  Clear login database
  Remove file
  ${DATABASE FILE}
  
  
  
  
  Create valid user
  [Arguments]
  ${username}
  ${password}
  Create user
  ${username}
  ${password}
  Status should be
  SUCCESS
  
  
  
  
  Creating user with invalid password should fail
  [Arguments]
  ${password}
  ${error}
  Create user
  example
  ${password}
  Status should be
  Creating user failed: ${error}
  
  
  
  
  Login
  [Arguments]
  ${username}
  ${password}
  Attempt to login with credentials
  ${username}
  ${password}
  Status should be
  Logged In
  
  
  
  
  # Used by BDD test cases (this is a comment)
  
  
  
  Given a user has a valid account
  Create valid user
  ${USERNAME}
  ${PASSWORD}
  When she changes her password
  Change password
  ${USERNAME}
  ${PASSWORD}
  ...
  ${NEW PASSWORD}
  
  Status should be
  SUCCESS
  
  Then she can log in with the new password
  Login
  ${USERNAME}
  ${NEW PASSWORD}
  And she cannot use the old password anymore
  Attempt to login with credentials
  ${USERNAME}
  ${PASSWORD}
  Status should be
            用户关键字可以包括其他用户定关键字,内置关键字,或库关键字。正如你从这个例子可以看到,用户关键字可以带参数。他们也可以返回值,甚至包含FOR循环。用户关键字可以生成可重用的通用动作序列。用户关键字提高测试的可读性,并在不同情况下使用适当的抽象层次。
4  变量4.1    定义变量             测试中需要改变的数据最好的定义为变量。变量定义的语法很简单:
  
  Variable
  Value
  ${USERNAME}
  janedoe
  ${PASSWORD}
  J4n3D0e
  ${NEW PASSWORD}
  e0D3n4J
  
  ${DATABASE FILE}
  ${TEMPDIR}${/}robotframework-quickstart-db.txt
  
  ${PWD INVALID LENGTH}
  Password must be 7-12 characters long
  ${PWD INVALID CONTENT}
  CONTENT} Password must be a combination of lowercase and uppercaseletters and numbers
  
            变量也可以从命令行给出,以适应不同的环境。例如这个演示可以这样执行:
  pybot --variable USERNAME:johndoe --variable PASSWORD:J0hnD0equickstart.html
            除了用户定义的变量,也有一些内置的变量总是可用的。这些变量包括上述表中使用的:$ {TEMPDIR}和${/}在。
4.2    使用变量            变量可用于在测试数据中很多地方。他们多作为关键字的参数。关键字的返回值也可以赋给变量,以便以后使用。
  
  Test Case
  Action
  Argument
  Argument
  Argument
  User status is stored in database
  [Tags]
  variables
  database
  
  Create Valid User
  ${USERNAME}
  ${PASSWORD}
  
  Database Should Contain
  ${USERNAME}
  ${PASSWORD}
  Inactive
  Login
  ${USERNAME}
  ${PASSWORD}
  
  Database Should Contain
  ${USERNAME}
  ${PASSWORD}
  Active
  
  Keyword
  Action
  Argument
  Argument
  Argument
  Database Should Contain
  [Arguments]
  ${username}
  ${password}
  ${status}
  ${database} =
  Get File
  ${DATABASE FILE}
  
  Should Contain
  ${database}
  ${username}\t${password}\t${status}
  
5    组织测试用例5.1    Test suites            Robot Framework中测试用例的集合被称为test suites。每个包含测试用例的文件形成了一个test suites。运行这个演示时,您在控制台会看到test suite Quickstart。“Quickstart”是从文件名得到的,在报告和日志中也可见。
            通过把测试用例文件放在目录中,并把目录放到其他目录中,可以实现层次化组织测试用例。所有目录自动根据目录名创建更高层次的test suites。由于test suites仅仅是文件和目录,很容易放置在版本控制系统中。
            你可以把目录当做test suite来执行:
                     pybot .
5.2    Setup Teardown            如果你想在每个测试执行之前和之后执行某些操作,可以使用Test Setup和Test Teardown:
  Setting
  Value
  Test Setup
  Clear Login Database
  Test Teardown
  
            同样,你可以使用Suite Setup 和SuiteTeardown来指定整形整个test suite之前和之后要执行的操作。
5.3    使用标签  
            Robot Framework允许给测试用例的设置标签。通过Default Tags或Force Tags可以所有的测试用例打上标签。也可以给单个测试用例打上标签。
  Setting
  Value
  Value
  Force Tags
  quickstart
  
  Default Tags
  example
  smoke
            在测试报告中你可以看到测试及其标签以及基于标签的统计。标签有很多其他用途,最重要的是选择执行测试:
pybot--include smoke quickstart.html
pybot--exclude database quickstart.html
6    创建测试库            Robot Framework提供了简单的Python 和 Java创建测试库的API。用户指南包含实例和详细说明。
            以下是本指南中使用的LoginLibrary测试库的源代码。你可以看到,例如,关键字“create_user”是怎样映射为方法create_user。

import os
import sys
importsubprocess


classLoginLibrary:

    def __init__(self):
        self._sut_path =os.path.join(os.path.dirname(__file__),
                                      '..','sut', 'login.py')
        self._status = ''

    def create_user(self, username, password):
        self._run_command('create', username,password)

    def change_password(self, username,old_pwd, new_pwd):
        self._run_command('change-password',username, old_pwd, new_pwd)

    def attempt_to_login_with_credentials(self,username, password):
        self._run_command('login', username,password)

    def status_should_be(self,expected_status):
        if expected_status != self._status:
            raise AssertionError("Expectedstatus to be '%s' but was '%s'"
                                  %(expected_status, self._status))

    def _run_command(self, command, *args):
        if not sys.executable:
            raise RuntimeError("Could notfind Jython installation")
        command = [sys.executable,self._sut_path, command] + list(args)
        process = subprocess.Popen(command,stdout=subprocess.PIPE,
                                  stderr=subprocess.STDOUT)
        self._status =process.communicate()[0].strip()
  
   Robot FrameWork快速入门.doc   



更多信息,请参考附件


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-151294-1-1.html 上篇帖子: python 自动化测试框架 Robot Framework 相关资料 下篇帖子: python多进程并发编程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表