雪峰磁针石 测试 linux pythontesting.blog.chinaunix.net

深圳自动化测试python:113938272 武冈深圳高级群:66250781

  • 博客访问: 18497323
  • 博文数量: 822
  • 博客积分: 10495
  • 博客等级: 上将
  • 技术积分: 9513
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-18 10:51
文章分类

全部博文(822)

文章存档

2012年(8)

2011年(90)

2010年(97)

2009年(166)

2008年(208)

2007年(179)

2006年(93)

微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题

分类: Python/Ruby

#2012-02-07 磁针石

#承接软件自动化实施与培训 验证码破解 软件破解 脚本开发 测试和python培训等

#gtalk ouyangchongwu#gmail.com qq 37391319 博客:testing.blog.chinaunix.net

#版权所有,转载刊登请来函联系

#自动化测试和python群组: http://groups.google.com/group/automation_testing_python

#python qq group: 深圳自动化测试python群:113938272

#武冈深圳qq群:66250781 都梁深圳湖南户外群:49494279

#参考资料:


Robot Framework快速入门


1.1 概述

          Robot Framework是一个通用的关键字驱动自动化测试框架。测试用例以HTML,纯文本或TSV(制表符分隔的一系列值)文件存储。通过测试库中实现的关键字驱动被测软件。Robot Framework灵活且易于扩展。它非常适合测试有不同接口的复杂软件:用户接口、命令行,Web服务,专有的编程接口等。

          Robot Framework是开源软件安装包源代码等文档可通过http://robotframework.org获取本指南旨在介Robot Framework的基本概念。更详细的技术说明,请参阅Robot Framework用户指南。

 

1.2 安装

          安装Robot Framework之前先要安装Python。如果使用Java编写的测试库,Jython中必须安装。使用这个快速入门指南,Python已经足够了。

          有三种不同的方式安装Robot Framework,详细的安装步骤参见installation instructions。安装包可从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 (Python 2.7.2 on linux2)Robot Framework 2.6.3 (Python 2.7.2 on win32)

1.3 运行演示

本快速入门指南,也可以作为一个可执行的演示。如果你是在线阅读本指南,你需要先下载robotframework-quickstart-<date>.zip,解压然后键入以下命令:

      pybot quickstart.html

文件中的测试就会执行,并产生了以下报告:

report.html

      测试结果摘要

log.html

      详细的测试结果

Output.xml

       portable  XML格式的测试结果,方便与其他工具集成

Pybot有很多命令选项可以用来控制执行测试和产生输出,可以通过 –help来查看。例如,以下命令更改日志文件的名称和顶层测试套件的名称:

          pybot --log mylog.html --name My_Fine_Tests quickstart.html

1.1 实例程序介绍

          本指南中的示例应用程序是一个经典的登录例子的变种:它是一个Python书写的基于命令行的认证服务器。目前,示例应用程序允许用户做三件事:

*创建一个有效密码的帐户。

*使用有效的用户名和密码登录。

*更改现有帐户的密码。

          应用程序在sut目录和可以通过命令python sut/login.py执行。试图使用一个不存在的用户帐户或不正确的密码会有如下相同的错误消息:

> python sut/login.py login nobody P4ssw0rd

Access Denied

          创建有效的用户名和密码之后可能成功登录:

> python sut/login.py create fred P4ssw0rd

SUCCESS

 

> python sut/login.py login fred P4ssw0rd

Logged In

         

          有效密码必须符合两个要求:它必须是7-12个字符,它必须包含小写和大写字母和数字,但它不能包含特殊字符。试图创建一个无效密码的用户将失败:

> python sut/login.py create fred short

Creating user failed: Password must be 7-12 characters long

 

> python sut/login.py create fred invalid

Creating user failed: Password must be a combination of lowercase and

uppercase letters and numbers

          更改密码也会有相应的提示:

> python sut/login.py change-password fred wrong NewP4ss

Changing password failed: Access Denied

 

> python sut/login.py change-password fred P4ssw0rd short

Changing password failed: Password must be 7-12 characters long

 

> python sut/login.py change-password fred P4ssw0rd NewP4ss

SUCCESS

          应用程序使用一个简单的数据库文件来保持用户状态。文件位于操作系统的临时目录。比如C:\Documents and 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 高级测试用例

          测试用例也可以只使用没有参数的高级关键字。这种风格可以使用自由的文本,适合与非技术性的客户等沟通。Robot Framework不强制以任何特定的风格编写测试用例。例如它可以使用given-when-then的行为驱动开发(BDD behavior-driven development):

 

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。如果没有合适的可用的库也很容易实现自己的库,参见implement your own libraries

          使用测试库的关键字之前需要导入,它必须考虑到使用。本文件中的测试需要导入标准OperatingSystem的库中的关键字(如Remove File)以及从自定义库LoginLibrary(如Attempt to login with credentials)。

 

Setting

Value

Library

OperatingSystem

Library

testlibs/LoginLibrary.py

3.3 用户关键字

          Robot Framework最强大的功能之一是能够方便地从其他关键字创建新的更高级别的关键字。创建用户定义的关键字(简称为用户关键字)的语法类似于创建测试用例。前面测试用例用到的高级别的关键字如下:

.

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:J0hnD0e quickstart.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 SetupTest Teardown

Setting

Value

Test Setup

Clear Login Database

Test Teardown

 

          同样,你可以使用Suite Setup Suite Teardown来指定整形整个test suite之前和之后要执行的操作。

5.3    使用标签

 

          Robot Framework允许给测试用例的设置标签。通过Default TagsForce 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

import subprocess

 

 

class LoginLibrary:

 

    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("Expected status to be '%s' but was '%s'"

                                  % (expected_status, self._status))

 

    def _run_command(self, command, *args):

        if not sys.executable:

            raise RuntimeError("Could not find 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   


更多信息,请参考附件

阅读(465463) | 评论(1) | 转发(5) |
给主人留下些什么吧!~~

Bean_lee2012-12-24 20:44:03

这篇文章是宝贝啊,呵呵,正愁没中文版文档呢

评论热议
请登录后评论。

登录 注册