RobotFrameWork接口项目分层及通用控制方式
1. 前言
上一篇文章介绍了在设计接口用例之前应遵守的设计规范,详见《RobotFramework接口设计规范》,当然读者公司的内部规范也不一定非得完全遵循笔者所提到的,适合自己公司内部的一套就可以了。
由于现在公司新项目的启动和自身负责的开发工作量的增剧,基本上更新文章都只能利用周末零碎时间来写,一个字一个字的码出来的,另外透露一下,下面分享的内容有部分核心思想笔者是将之前发表过的技术专利中的内容开放了一小部分哦,还是有些干货内容值得借鉴的,也希望各位读者多多支持一下。
接下来,我们来聊聊,RobotFramework接口设计的分层玩法和常用的控制方式。
2. RF分层推荐玩法
说到分层,大家最容易想到的就是著名的测试金字塔的分层结构,如:

那么RobotFramework设计的接口框架分层该怎么来分呢,当然分层的好处和作用笔者就不在这里过多的说了,也不是本文的重点,相信大家也都能体会到。
分层原则: 【分层目标:接口数据和接口业务分离】
可再细分为:
项目目录结构分层
接口数据、接口用例、接口业务分离
公共方法、数据分离
3. 分层实施
3.1、项目结构分离
具体要实施接口自动化的产品项目,一般可作为一个自动化工程的主目录。
其中,项目主目录中,按分层思想,又可根据接口功能分成不同模块,不同模块可作为二级目录。在这里模块可划分成两类,一类为按功能模块,在命名时,以具体功能作为命名,如评论模块,可命名为Comment,且功能模块主要用来验证某个单一模块下各接口功能上是否符合预期,另一类为模块业务,在命名时,以Business命名,所有业务功能验证均存放在此目录下,主要用来验证实现具体业务功能时,各接口的关联组合调用验证,如验证某个视频播放功能时,其中,对于视频播放这一具体的业务来说可能会涉及到很多接口之间的调用,包括接口前置条件,接口之间传递数据,接口数据清理等。
*项目的功能模块划分以具体的项目而定,在实际的接口自动化项目开展中,需要求开发人员,提供项目接口对接文档。接口测试人员,依据接口对接文档描述,划分具体的功能模块及某个功能模块下包含了哪些具体接口。
3.2、接口业务分离
不同接口模块下,又可根据子功能的不同,划分成不同接口。主要又包含两部分,一部分为接口业务关键字(对应在其它编程语言中,这里所说的关键字,其实就是封装的函数、方法),通常一个接口下,可以根据测试的业务不同,定义多个不同的关键字。另一部分就是接口功能用例,接口用例下仅需填测试数据即可。通常不同的用例存放不同的测试数据,即业务关键字的入参,业务关键字根据接收到不同测试数据而去自动执行对应的业务流程。
*通常将具体的一组动作序列封装一个业务关键字,测试用例中之所以只存放测试数据的设计核心就是在于将测试业务与测试数据分离。因为通常测试过程中,一个业务关键字的动作序列不会经常变更,需要变更的是测试数据,通常不同的测试数据,会导致业务关键字的产生的结果不同。
3.3、公共方法数据分离
包括三部分,公共方法(Public)、项目配置文件(Config)、数据构造文件(xx_var.py)。其中:
公共方法,主要提供各个不同项目接口之间都会调用到的一些公共方法,如数据加密、解密,接口数据校验、接口统计等。
主配置文件,主要存储接口在各个不同环境下(通常一个产品,开发完成后,都需要在测试环境验证通过后,才可发布到线上环境,这里所说的不同环境指的就是测试环境、线上环境)的访问地址,通常做法可在业务关键字编写脚本时,将接口访问地址通过变量来控制,然后此变量访问主配置文件对应的接口地址即可,通常接口环境分定义为测试环境下的接口访问地址、预发布环境接口地址、线上接口环境地址等(可参照下述截图部分)。
数据构造文件,由于在不同环境下,需要用到的测试数据可能会有所不同,所以可通过构建对应环境下的变量文件来为接口在不同环境下执行时提供测试数据,变量控制文件中主要存储一些可变的变量文件,或通过函数来构造测试数据然后再将构建数据方法返回到具体变量中提供给测试用例或业务关键字使用。
数据控制文件的设计核心在于,在变量文件中定义构造数据的函数方法,然后将方法的返回值赋给一个变量,在具体的接口引用该变量。
4. 实例化图解框架分层
4.1 功能模块分层实例图解
4.2 业务模块分层实例图解
4.3 公共库实例图解
1、在关键字头部,引入Library后面填入公共方法存放文件的路径
2、或通过RIDE导入的方式引入,RIDE导入的方式,只需选择右侧按钮,如导入关键字,只需点击右侧Library按钮,选择关键字路径即可。
5. 通用控制方式
这里主要介绍一下接口数据、接口用例、接口业务分离的通用控制方式:
接口数据与接口用例分离
提倡大家在测试用例中仅包括数据,也就是入参!!!(重要的事情,只说一遍!!!)
大家可以看到在测试用例中的入参数据有两处的数据是通过变量自动构造生成的,(一个是评论信息,另一个是登录用户名),这也是上面提到数据构造文件的作用。将数据构造的方法传入到变量,在用例层引入该变量即可,如:
接口用例与接口业务分离
6. 教程目录大纲(已更新)
RobotFrameWork环境搭建(基于HTTP协议的接口自动化)
本文原文可详见:阅读原文

RobotFrameWork接口项目分层及通用控制方式的更多相关文章
- RobotFrameWork接口设计规范
1. 前言 继前面一章<RobotFramework环境搭建>介绍了在本地如何将接口自动化实施过程所需要的基础环境搭建好,在这里假设大家都已经知道环境如何搭建了,如果不清楚的可直接查看上一 ...
- Kubernetes API作为权威接口,Kubernetes将成为软件的通用控制平面
1创新之处在于API这是有关 Kubernetes的两部分系列中的第一篇.第一部分是一个答案:影响Kubernetes设计的关键思想是什么?Kubernetes会将它与其他平台区分开来吗?第二部分是关 ...
- JAVAEE——BOS物流项目10:权限概述、常见的权限控制方式、apache shiro框架简介、基于shiro框架进行认证操作
1 学习计划 1.演示权限demo 2.权限概述 n 认证 n 授权 3.常见的权限控制方式 n url拦截权限控制 n 方法注解权限控制 4.创建权限数据模型 n 权限表 n 角色表 n 用户表 n ...
- JAVAEE——BOS物流项目11:在realm中授权、shiro的方法注解权限控制、shiro的标签权限控制、总结shiro的权限控制方式、权限管理
1 学习计划 1.在realm中进行授权 2.使用shiro的方法注解方式权限控制 n 在spring文件中配置开启shiro注解支持 n 在Action方法上使用注解 3.★使用shiro的标签进行 ...
- 项目一:第十二天 1、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于treegrid实现菜单展示
1 课程计划 1. 常见权限控制方式 2. 基于shiro提供url拦截方式验证权限 3. 在realm中授权 4. 基于shiro提供注解方式验证权限 5. 总结验证权限方式(四种) 6. 用户注销 ...
- 接口项目servlet的一种处理方式,将异常返回给调用者【我】
接口项目servlet的一种处理方式,其他层有异常全部网上抛,抛到servlet层,将异常返回给调用者: Servlet层: private void processRequest(HttpServl ...
- ZeroMQ接口函数之 :zmq_proxy_steerable – 以STOP/RESUME/TERMINATE控制方式开启内置的ZMQ代理
ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html ——————————————————————————————————— ...
- Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- 接口测试(二) 优化项目分层及cookies值带入
整个项目分层如图 然后上代码 #data_test.py from openpyxl import load_workbook import json import os class Date_tes ...
随机推荐
- Hdu-2016解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2016 题目解析:输入n个数据,找出n个数据中最小的数据,将它与第一个数据进行交换.(这里可得看清题意, ...
- JAVA基础中的注意点(一)
1.标识符 标识符:标识某些事物用于区分的符号. (即区分某些事物的符号) 四条硬性规定: a.不能是 关键字.true.false.null. b.可以包含 字母.数字(0-9).下划线(_)或美 ...
- 使用C#的is、as操作符来转型
is检查对象是否兼容于指定类型,返回Boolean值true或false.使用is永远不会抛出异常. 例:Object o=new Object(); bool b1=(o is Object);// ...
- 潭州课堂25班:Ph201805201 django框架 第四课 模板常用标签,模板继承与引用,自定义过渡器 (课堂笔记)
if 语句 判断传入的 name 值 建好这些文件后,对 url 进行配置 在浏览器中访问 for 循环 页面跳转: 通过 name 跳转时要在 urls 文件中为该 path 设置 name 带参 ...
- lxml的使用
from urllib import request from lxml import etree # url = '''http://bangumi.tv/anime/browser?sort=ra ...
- CQD(陈丹琦)分治 & 整体二分——专题小结
整体二分和CDQ分治 有一些问题很多时间都坑在斜率和凸壳上了么--感觉斜率和凸壳各种搞不懂-- 整体二分 整体二分的资料好像不是很多,我在网上找到了一篇不错的资料: 整体二分是个很神的东西 ...
- 移动端页面:viewport与分辨率的坑
<meta name="viewport" content="width=device-width, user-scalable=no"> < ...
- 通过xml处理sql语句时对小于号与大于号的处理转换
以上方法,很容易使用,直接ss < #{ss} 法二 <![CDATA[>=]]>表示大于等于 变量<![CDATA[ < ]]>#{变量}表示 ...
- ssm数据库异常问题
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.Reflecti ...
- video设置视频的宽高
一般情况下<video loop="loop" style="width: 100%;height:300px;" controls="cont ...