这篇文章之所以会给整理出来,是因为学了一个季度的RF后,再去看官网的这个文档,感触破多,最大的感触还是觉得自己走了不少弯路,还有些是学习方法上的弯路。在未查看这类官网文档之前,更多的是看其他各种人的博客,看齐涛的修炼宝典(无任何恶意,仅表明适合刚入门的测试人员)的方式来学习RF,学的很多知识点都零散且不同的博客对同一个问题还有不同的个人看法。于是后期便开始查看官网文档,学习了Quick Start Guide 文档后,对于一个已入门3个月的测试来说,还是有些收获(可能以前也是自己学的肤浅,呵呵)。下面就从Quick Start Guide中挑选出部分重要的知识点。

首先在官网下载Quick Start Guide的相关文档(官网:https://github.com/robotframework/QuickStartGuide/blob/master/QuickStart.rst),这个文档使用了一个经典的登录应用程序,实际上就一个用python语言写的基于命令的代码。分2个模块:一个模块是服务器端的代码login.py.里面主要有2个类构成UserDataBase和User,User类主要是针对User的属性username,password,status的校验管理。比如密码长度必须是6-12位且由大小写+数字组成。而UserDataBase主要是完成User与数据库(robotframework-quickstart-db.txt)的交互。比如把符合一定规则的用户注册信息保存在数据库中。部分代码如下所示,详细的代码参见:QuickStartGuide-master\sut\login.py

class User(object):
@property
def password(self):
return self._password @password.setter
def password(self, password):
self._validate_password(password)
self._password = password def _validate_password(self, password):
if not (7 <= len(password) <= 12):
raise ValueError('Password must be 7-12 characters long')
if not self._validate_password_chars(password):
raise ValueError('Password must be a combination of lowercase '
'and uppercase letters and numbers') def _validate_password_chars(self, password):
has_lower = has_upper = has_number = False
for char in password:
if char.islower():
has_lower = True
elif char.isupper():
has_upper = True
elif char.isdigit():
has_number = True
else:
return False
return has_lower and has_upper and has_number   
class UserDataBase(object):
def create_user(self, username, password):
try:
user = User(username, password)
except ValueError as err:
return 'Creating user failed: %s' % err
self.users[user.username] = user
return 'SUCCESS' def login(self, username, password):
if self._is_valid_user(username, password):
self.users[username].status = 'Active'
return 'Logged In'
return 'Access Denied' def _is_valid_user(self, username, password):
return (username in self.users and
self.users[username].password == password) def change_password(self, username, old_pwd, new_pwd):
try:
if not self._is_valid_user(username, old_pwd):
raise ValueError('Access Denied')
self.users[username].password = new_pwd
except ValueError as err:
return 'Changing password failed: %s' % err
else:
return 'SUCCESS'

还有一个模块,是封装关键字给RF直接调用的,然后在文件里面又调用了服务器模块login.py来与服务进行交互。部分代码如下,详细代码见:QuickStartGuide-master\lib\LoginLibrary.py

class LoginLibrary(object):

    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))

由此可见,这个demo提供以下四个功能:

  • 使用有效的密码创建一个用户。create_user(username, password)
  • 使用有效的用户名和密码登陆。attempt_to_login_with_credentials( username, password)
  • 修改已存在账户的密码。change_password(username, old_pwd, new_pwd)
  • 判断用户的当前状态. status_should_be(expected_status)

Demo在RF内,首先可以创建一个suit级别的文件,然后导入operatingSystem库(Remove File关键字使用到的库文件)和用户自定义LoginLibrary库(测试服务器模块login.py),拷贝sut到D:\python27下,再拷贝LoginLibrary.py到D:\python27\Lib文件夹下,搭建完后,架构如图所示:

阶段一:简单的测试用例:就用LoginLibrary内提供的关键字进行以下测试.

这个测试用例的第二步和第三步就直接使用了LoginLibrary内提供的关键字进行测试

阶段二:用户关键字定义

上图的第一步create valid user 就属于用户自定义的关键字,这个自定义的关键字主要实现了,创建用户,然后判断当前用户状态为success,则就能表现创建的确实为合法的用户。

阶段三:数据驱动测试用例

以前没看文档之前,看官网介绍,就是介绍RF支持关键字驱动也支持数据驱动,一直误以为意思是指把测试数据全部写在excel内,然后RF去读取再实现,之前也有尝试过,但是里面的逻辑较为复杂,也一直是一知半解。后面学习完文档后,终于意会到RF所指的数据驱动是个神马意思了。

Demo里面创建一个测试用例,创建用户时,使用不合法的密码。Demo先把这段逻辑抽成一个用户关键字。实现如下:

该用户自定义关键字的入参为password和error,然后创建一个测试用例:引用之前创建的用户自定义关键字

end~直接在表格写入参即可。这类测试用例,最常用于一些无状态的接口测试项目中。

阶段四:高级别测试用例

之所以称为高级别的测试用例,其实我一直还不明白是为什么,就因为可用于编写测试驱动开发的用例么?没想通??这种测试用例主要由不携带实际参数的用户自定义关键字组成。用户自定义关键字有四个,如下所示:

自定义关键字的变量都直接写好在RF内

然后使用given-when-then格式创建测试用例:

这类测试用例主要用于测试驱动开发的场景下.

在demo里面使用了db文件,这个文件作用就是充当数据库,存储用户的一些信息。Demo里面有提到在每次运行测试用例之前删除这个文件,然后还有就是查询文件里的一些信息。

运行完后,这个文件是这样的:

这个文档基本的内容应该就是上面所描述的,从这次文档的学习,总结下自己学到的知识点:

  1. RF内的数据驱动的含义
  2. 高级关键字的使用场景
  3. 系统保留常量和特殊字符常量
  4. Python语言
  5. 阅读英文文档能力

最后,奉上英文和中文翻译的原文链接(当然最好还是养成阅读英文文档的习惯比较好)。

英文:https://github.com/robotframework/QuickStartGuide/blob/master/QuickStart.rst

中文翻译版:

http://www.cnblogs.com/txw1958/archive/2012/05/10/2494805.html

RF《Quick Start Guide》操作总结的更多相关文章

  1. QUICK START GUIDE

    QUICK START GUIDE This page is a guide aimed at helping anyone set up a cheap radio scanner based on ...

  2. Akka Stream文档翻译:Quick Start Guide: Reactive Tweets

    Quick Start Guide: Reactive Tweets 快速入门指南: Reactive Tweets (reactive tweets 大概可以理解为“响应式推文”,在此可以测试下GF ...

  3. RobotFramework 官方demo Quick Start Guide rst配置文件分析

    RobotFramework官方demo Quick Start Guide rst配置文件分析   by:授客 QQ:1033553122     博客:http://blog.sina.com.c ...

  4. RobotFramework RobotFramework官方demo Quick Start Guide浅析

    RobotFramework官方demo Quick Start Guide浅析   by:授客 QQ:1033553122     博客:http://blog.sina.com.cn/ishouk ...

  5. SlickUpload Quick Start Guide

    Quick Start Guide The SlickUpload quick start demonstrates how to install SlickUpload in a new or ex ...

  6. pax3 quick start guide

    pax3 quick start guide 外观图: 配置:1 * pax3 主机:2 * 吸嘴(一个平的,一个凸的):2 * 底盖(一个烟草的,一个烟膏的):3 * 过滤片:1 * USB充:1 ...

  7. quick start guide for XMEGA ADC

    This is the quick start guide for the Analog to Digital Converter (ADC), with step-by-step instructi ...

  8. The Pragmatic Programmer Quick Reference Guide

    1.关心你的技艺 Care About Your Craft 如果不在乎能否漂亮地开发出软件,你又为何要耗费生命去开发软件呢? 2.思考!你的工作 Think! About Your Work 关掉自 ...

  9. Robot Framework:RF中对时间操作的datetime库常用关键字

    [转自:http://blog.csdn.net/r455678/article/details/52993765] 1.对固定日期进行操作,增加或减去单位时间或者时间段 2.对两个时间段进行操作 3 ...

随机推荐

  1. Centos 下安装Docker 遇到的一些错误

    1.公司的服务器的内核版本:2.6.32-431.23.3.el6_x86_64 如何升级内核请参考前一篇文章 2.在这个地址上面下载 的 https://test.docker.com/builds ...

  2. Java 中的 Characters

    1.一般情况下,如果使用单一的 character 值,应该使用原始的 char 类型.比如: public class TestCharacter { public static void main ...

  3. C++对析构函数的误解(转)

    C++析构前言 析构函数在什么时候会自动被调用,在什么时候需要手动来调用,真不好意思说偶学过C++…今日特此拨乱反正. C++析构误解正文 对象在构造的时候系统会分配内存资源,对一些数据成员进行初始化 ...

  4. SQL语句判断是否为今天或昨天

    方法一 select * from AAA where to_char(a,'yyyymmdd') = to_char(sysdate,'yyyymmdd'); select * from AAA w ...

  5. mysql导数据库用到的语句

    将字段格式为2013-08-09 13:22:55转换为时间戳 UPDATE `AttendClass` SET `regdate` = unix_timestamp(regDate2) WHERE ...

  6. Redis菜鸟汇总

    1.是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为 ...

  7. 利用session完成用户登陆

    package cn.itcast.cookie; import java.io.IOException; import java.io.PrintWriter; import java.util.L ...

  8. cookie案例-显示用户上次访问网站的时间

    package cn.itcast.cookie; import java.io.IOException; import java.io.PrintWriter; import java.util.D ...

  9. JSP Standard Tag Library JSP标准标签库

    了解了基本的标签的底层实现,可以看系统定义的强大的标准标签 1.首先引入两个jar包 2.基本语法 <%@ taglib prefix="c" uri="http: ...

  10. Customizing the Editor

    Use the General, Text Editor, Options Dialog Box to customize the appearance and functionality of th ...