Python_test_framework:Robot Framework
来源:互联网 发布:unity3d 行走动画 编辑:程序博客网 时间:2024/05/20 23:06
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 Install,Robot 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-<date>.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的行为驱动开发(BDDbehavior-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 uppercase letters 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()
- Python_test_framework:Robot Framework
- Robot Framework
- Robot Framework
- Robot Framework
- Robot Framework
- Robot framework
- robot framework
- Robot Framework
- Robot Framework
- Robot Framework
- Robot Framework 学习_4(python+Robot Framework)
- Robot Framework 快速入门
- Robot Framework-2
- Robot Framework-3
- Robot Framework-4
- Robot Framework安装指南
- Robot Framework安装指南
- Robot Framework简介
- HTML5安全:内容安全策略(CSP)简介
- Project Euler problem 8
- 浅谈 C++单例模式
- C++实现原型模式
- mini2440 LED设备驱动开发源代码(宋宝华框架)
- Python_test_framework:Robot Framework
- 传智播客---Filter 过滤器 的详细使用介绍
- Source Insight 设置
- Project Euler problem 9 勾股数
- 摘抄语录
- C#控制窗体在固定区域显示
- mini2440 pwm蜂鸣器设备驱动开发源代码(宋宝华框架)
- 安装Microsoft Windows SDK 7.1时出现的错误(附解决办法)
- [转]Eclipse快捷键