通用开源自动化测试框架 - Robot Framework

一、什么是 Robot Framework?

1. Robot Framework 的历史由来

Robot Framework是一种通用的自动化测试框架,最早由Pekka Klärck在2005年开发,并由Nokia Networks作为内部工具使用。后来,该项目以开源形式发布,并得到了广泛的社区支持和贡献。

2.官方介绍:

Robot Framework is a generic open source automation framework. It can be used for test automation and robotic process automation (RPA).
Robot Framework 是一个通用的开源自动化框架。它可用于测试自动化和机器人流程自动化 (RPA)。

Robot Framework is supported by Robot Framework Foundation. Many industry-leading companies use the tool in their software development.
Robot Framework 由 Robot Framework Foundation 提供支持。许多行业领先的公司在其软件开发中使用该工具。

Robot Framework is open and extensible. Robot Framework can be integrated with virtually any other tool to create powerful and flexible automation solutions. Robot Framework is free to use without licensing costs.
机器人框架是开放且可扩展的。Robot Framework几乎可以与任何其他工具集成,以创建强大而灵活的自动化解决方案。Robot Framework 可免费使用,无需许可费用。

Robot Framework has an easy syntax, utilizing human-readable keywords. Its capabilities can be extended by libraries implemented with Python, Java or many other programming languages. Robot Framework has a rich ecosystem around it, consisting of libraries and tools that are developed as separate projects.
Robot Framework 具有简单的语法,使用人类可读的关键字。它的功能可以通过使用 Python、Java 或许多其他编程语言实现的库来扩展。Robot Framework 拥有丰富的生态系统,由作为独立项目开发的库和工具组成。

3. 基本语法

  • 测试用例以*** Test Cases ***开头,后跟一个或多个测试用例。
  • 关键字定义以*** Keywords ***开头,后跟一个或多个关键字定义。
  • 测试用例和关键字定义使用缩进来表示层次结构。
  • 关键字和关键字参数之间使用制表符或多个空格分隔。

4. Code is worth a thousand words代码胜过千言万语

简单示例
此示例包含用户登录的单个测试用例。它使用模拟的后端 API 进行用户管理。该测试套件TestSuite.robot包含两个测试用例“使用密码登录用户”和“使用错误密码拒绝登录”。此测试用例从资源文件 keywords.resource 调用关键字。

TestSuite.robot:

*** Settings ***
Documentation     A test suite for valid login.
...
...               Keywords are imported from the resource file
Resource          keywords.resource
Default Tags      positive*** Test Cases ***
Login User with PasswordConnect to ServerLogin User            ironman    1234567890Verify Valid Login    Tony Stark[Teardown]    Close Server ConnectionDenied Login with Wrong Password[Tags]    negativeConnect to ServerRun Keyword And Expect Error    *Invalid Password    Login User    ironman    123Verify Unauthorised Access[Teardown]    Close Server Connection

Resource File 资源文件
keywords.resource 包含关键字定义。资源文件还使用库 CustomLibrary.py 中基于 python 的关键字来实现更专业的功能。存在无数社区制作的库,它们以各种方式扩展了机器人框架!

keywords.resource:

*** Settings ***
Documentation     This is a resource file, that can contain variables and keywords.
...               Keywords defined here can be used where this Keywords.resource in loaded.
Library           CustomLibrary.py*** Keywords ***
Connect to ServerConnect    fe80::aede:48ff:fe00:1122Close Server ConnectionDisconnectLogin User[Arguments]    ${login}    ${password}Set Login Name    ${login}Set Password    ${password}Execute LoginVerify Valid Login[Arguments]    ${exp_full_name}${version}=    Get Server VersionShould Not Be Empty    ${version}${name}=    Get User NameShould Be Equal    ${name}    ${exp_full_name}Verify Unauthorised AccessRun Keyword And Expect Error    PermissionError*    Get Server VersionLogin Admin[Documentation]    'Login Admin' is a Keyword....                It calls 'Login User' from 'CustomLibrary.py'Login User    admin    @RBTFRMWRK@Verify Valid Login    Administrator

CustomLibrary.py:

from TestObject import TestObject
from robot.api.logger import info, debug, trace, consoleclass CustomLibrary:'''This is a user written keyword library.These libraries can be pretty handy for more complex tasks an typicallymore efficiant to implement compare to Resource files.However, they are less simple in syntax and less transparent in test protocols.The TestObject object (t) has the following public functions:class TestObject:def authenticate(self, login: str, password: str) -> str: ...def logout(self, token): ...def get_version(self, token) -> str: ...def get_user_id(self, token, login) -> str: ...def get_user_name(self, token, user_id) -> str: ...def get_user(self, token, user_id=None) -> Dict[str, str]: ...def get_user_all(self, token) -> List[Dict[str, str]]: ...def delete_user(self, token, userid): ...def get_logout(self, token): ...def put_user_password(self, token, new_password, user_id=None): ...def put_user_name(self, token, name, user_id=None): ...def put_user_right(self, token, right, user_id): ...def post_new_user(self, token, name, login) -> str: ...'''ROBOT_LIBRARY_SCOPE = 'SUITE'def __init__(self) -> None:self._session = Noneself.login = ''self.password = ''self._connection: TestObject = Nonedef connect(self, ip):self._connection = TestObject(ip)def disconnect(self):self._connection = None@propertydef connection(self):if not self._connection:raise SystemError('No Connection established! Connect to server first!')return self._connection@propertydef session(self):if self._session is None:raise PermissionError('No valid user session. Authenticate first!')return self._sessiondef set_login_name(self, login):'''Sets the users login name and stores it for authentication.'''self.login = logininfo(f'User login set to: {login}')def set_password(self, password):'''Sets the users login name and stores it for authentication.'''self.password = passwordinfo(f'Password set.')def execute_login(self):'''Triggers the authentication process at the backend and stores the session token.'''self._session = self.connection.authenticate(self.login, self.password)if self.session:info(f'User session successfully set.')debug(f'Session token is: {self.session}')self.login = self.password = ''def login_user(self, login, password) -> None:'''`Login User` authenticates a user to the backend.The session will be stored during this test suite.'''self._session = self.connection.authenticate(login, password)def logout_user(self):'''Logs out the current user.'''self.connection.logout(self.session)def create_new_user(self, name, login, password, right):'''Creates a new user with the give data.'''user_id = self.connection.post_new_user(self.session, name, login)self.connection.put_user_password(self.session, password, user_id=user_id)self.connection.put_user_right(self.session, right, user_id)def change_own_password(self, new_password, old_password):'''Changes the own password given the new and current one.'''self.connection.put_user_password(self.session, new_password, old_password)def change_users_password(self, login, new_password):'''Changes the password of a user by its name.Requires Admin priviliges!'''user_id = self.get_user_id(login)self.connection.put_user_password(self.session, new_password, user_id=user_id)def get_all_users(self):'''`Get All Users` does return a list of user-dictionaries.A user dictionary has the keys `name`, `login`, `right` and `active`.This keyword need Admin privileges.Example:`{'name': 'Peter Parker', 'login': 'spider', 'right': 'user', 'active': True}`'''return self.connection.get_user_all(self.session)def get_user_details(self, user_id=None):'''Returs the user details of the given user_id or if None the own user data.'''return self.connection.get_user(self.session, user_id)def get_user_id(self, login):'''Returns the user_id based on login.'''return self.connection.get_user_id(self.session, login)def get_username(self, user_id=None):'''Returns the users full name of the given user_id or if None the own user data.'''return self.connection.get_user_name(self.session, user_id)def get_server_version(self):return self.connection.get_version(self.session)

二、为什么选择 Robot Framework

Robot Framework支持插件化的架构,可以使用许多内置库和第三方库来扩展功能,例如SeleniumLibrary用于Web自动化测试,RequestsLibrary用于API测试等。

1. Robot Framework 的常见用法

Robot Framework可用于各种自动化测试任务,包括:

  • Web应用测试
  • API测试
  • 数据库测试
  • 移动应用测试
  • 自动化任务和流程
  • 持续集成和部署

2. 常见关键字库

Robot Framework有广泛的关键字库可供使用,以下是一些常见的关键字库:

  • SeleniumLibrary:用于Web应用测试,包括页面操作、表单填写、页面验证等。
  • RequestsLibrary:用于发送HTTP请求,进行API测试。
  • DatabaseLibrary:用于数据库测试,支持各种数据库操作。
  • SSHLibrary:用于通过SSH执行命令和操作远程服务器。
  • ExcelLibrary:用于读写Excel文件。
  • DateTimeLibrary:用于日期和时间相关操作。

3. 技术架构和原理

Robot Framework的技术架构基于关键字驱动的测试方法。它使用Python语言编写,通过解析测试用例文件和执行测试步骤来实现自动化测试。

Robot Framework的核心原理如下:

  1. 测试用例文件(通常使用.robot扩展名)包含测试用例、关键字定义和设置。
  2. 测试执行器(test runner)读取并解析测试用例文件。
  3. 测试执行器调用相应的关键字库(如SeleniumLibrary、RequestsLibrary等)执行测试步骤。
  4. 关键字库提供了一组关键字(如打开浏览器、点击按钮等)来操作被测试的系统。
  5. 执行结果被记录下来,并生成报告和日志文件。

三、怎么使用 Robot Framework

1. Robot Framework的安装方法

1. 安装Python

Robot Framework是基于Python的,所以首先需要安装Python。你可以从Python官方网站(https://www.python.org)下载适合你操作系统的Python安装程序,并按照官方指南进行安装。

2. 安装Robot Framework

一旦Python安装完成,你可以使用Python的包管理工具pip来安装Robot Framework。打开终端或命令提示符窗口,并执行以下命令:

pip install robotframework

这将下载并安装最新版本的Robot Framework及其依赖项。

3. 安装额外的关键字库

根据你的测试需求,你可能需要安装额外的关键字库。例如,如果你需要进行Web应用测试,可以安装SeleniumLibrary。以安装SeleniumLibrary为例,执行以下命令:

pip install robotframework-seleniumlibrary

类似地,你可以使用pip命令安装其他关键字库,具体取决于你的需求。

4. 验证安装

安装完成后,你可以验证Robot Framework是否成功安装。在终端或命令提示符窗口中执行以下命令:

robot --version

如果成功安装,它将显示安装的Robot Framework的版本号。

2. 自动化测试用例常见实例代码

示例1:Web应用测试

*** Settings ***
Library    SeleniumLibrary*** Test Cases ***
Open Browser and Verify TitleOpen Browser    https://www.example.com    chromeTitle Should Be    Example DomainClose Browser

示例2:API测试

*** Settings ***
Library    RequestsLibrary*** Test Cases ***
Get User DetailsCreate Session    Example API    https://api.example.com${response}    Get Request    Example API    /users/123Should Be Equal As Strings    ${response.status_code}    200${user_details}    Set Variable    ${response.json()}Log    ${user_details}Delete All Sessions

示例3:数据库测试

*** Settings ***
Library    DatabaseLibrary
Library    Collections*** Test Cases ***
Verify User in DatabaseConnect To Database    pymysql    mydatabase    myusername    mypassword@{query_result}    Query    SELECT * FROM users WHERE id = '123'Should Contain    ${query_result}    username=JohnDisconnect From Database

示例4:SSH操作

*** Settings ***
Library    SSHLibrary*** Test Cases ***
Execute Command on Remote ServerOpen Connection    192.168.1.100    username=myusername    password=mypassword${output}    Execute Command    ls /path/to/directoryShould Contain    ${output}    myfile.txtClose Connection

示例5:Excel操作

*** Settings ***
Library    ExcelLibrary*** Test Cases ***
Read Data From ExcelOpen Excel    path/to/excel/file.xlsx${cell_value}    Read Cell Data By Name    Sheet1    A1Log    ${cell_value}Close Excel

四、相关链接

  • Robot Framework官方网站
  • Robot Framework用户指南
  • Robot Framework论坛
  • Robot Framework Github

RobotFramework基金会成员
RobotFramework基金会成员

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/126051.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue+vant图片压缩后上传

vuevant图片压缩后上传 vue文件写入 <template><div class"home"><van-field input-align"left"><template #input><van-uploaderv-model"fileList.file":after-read"afterRead":max-count"5":…

中国各城市土地利用类型(城市功能)矢量数据集(shp)

中国各城市土地利用类型(城市功能)数据集 时间:2018年 全国范围的城市用地类型数据(居住/商业/交通用地等共计11类) 分类:居住用地、商业用地、工业用地、医疗设施用地、体育文化设施用地、交通场站用地、绿地等用地类型 含城市编码、一级分类5个、二级分类11个 数据按…

纷享销客BI,助力企业激活数据价值,科学企业决策

10月25日上午&#xff0c;国家数据局正式挂牌成立&#xff0c;这标志着我国数字经济发展将进入新的发展阶段&#xff0c;也将有力促进数据要素技术创新、开发利用和有效治理&#xff0c;以数据强国支撑数字中国的建设。伴随数据作为企业新的生产要素的意义不断凸显&#xff0c;…

SpringBoot----自定义Start(自定义依赖)

一&#xff0c;为什么要定义Start 向阿里云OSS如果我们要引入的话很麻烦&#xff0c;所以我们可以自定义一些组件&#xff0c; 然后我们只需要在pom文件中引入对应的坐标就可以 二&#xff0c;怎么定义&#xff08;以阿里云OSS为例&#xff09; 1&#xff0c; 定义两个组件模块…

pytorch打印模型结构和参数

两种方式 当我们使用pytorch进行模型训练或测试时&#xff0c;有时候希望能知道模型每一层分别是什么&#xff0c;具有怎样的参数。此时我们可以将模型打印出来&#xff0c;输出每一层的名字、类型、参数等。 常用的命令行打印模型结构的方法有两种&#xff1a; 一是直接prin…

2023 CSP-J题解

T1 小苹果 题目描述 理论分析 对于第一问&#xff0c;我们按照题意模拟每天取走的是多少个苹果即可。由于每天可以取走原来的,数据范围没次会降低到&#xff0c;也就是说这样的过程的时间复杂度可以用下式表示&#xff1a; 对于本题的数据范围n<1e9&#xff0c;这个时间复杂…

二叉树问题——平衡二叉树问题

摘要 本博文主要介绍平衡二叉树问题包括&#xff0c;二叉树的高度差&#xff0c;是否为平衡二叉树&#xff0c;有序链表转二叉搜索树&#xff0c;将二叉搜索树变平衡等。 一、平衡二叉树详解 1.1 判断二叉树是否平衡 /*** Definition for a binary tree node.* public class…

浅谈安科瑞无线测温产品在埃及某房建配电项目中的应用

1.电气接点测温的必要性 电力系统的一次系统一般由供电线路&#xff08;包括架空线路和电缆&#xff09;、变压器、母线、开关柜等电气设备组成。其相互之间存在大量的电气连接点&#xff0c;由于电流流过产生热量&#xff0c;所以几乎所有的电气故障都会导致故障点温度的变化…

cnpm windows系统安装后查看版本cnpm -v报错Error: Cannot find module ‘node:util‘

1、报错截图 2、原因 在网上查了一些资料&#xff0c;有的说配置环境变量就可以&#xff0c;但经过配置后发现还是会报错。又查到说是由于cnpm和npm的版本不一致导致的&#xff0c;最后尝试成功解决&#xff01;&#xff01;&#xff01; 2、解决办法 1、先卸载掉之前安装的c…

Stable Diffusion WebUI扩展openpose-editor如何使用

先上地址: GitHub - fkunn1326/openpose-editor: Openpose Editor for AUTOMATIC1111s stable-diffusion-webuiOpenpose Editor for AUTOMATIC1111s stable-diffusion-webui - GitHub - fkunn1326/openpose-editor: Openpose Editor for AUTOMATIC1111s stable-diffusion-webu…

apache seatunnel支持hive jdbc

上传hive jdbc包HiveJDBC42.jar到seatunel lib安装目录 原因是cloudera 实现了add batch方法 创建seatunnel任务文件mysql2hivejdbc.conf env {execution.parallelism = 2job.mode = "BATCH"checkpoint.interval = 10000 } source {Jdbc {url = "jdbc:mysql:/…

AWS认证考试的那些事

1 为啥会有这个认证 你既然点进来了这个也就不重要了&#xff0c;重要的是怎么拿到他&#xff0c;以SAA-C03为例&#xff0c;从开始到结束我们一起来进行准备 2 考试卷 目前AWS的考试是要交钱的&#xff0c;正常情况下拿到5折劵很容易&#xff0c;比如你之前考过AWS的认证会给…

Django实战项目-学习任务系统-兑换物品管理

接着上期代码框架&#xff0c;开发第5个功能&#xff0c;兑换物品管理&#xff0c;再增加一个学习兑换物品表&#xff0c;主要用来维护兑换物品&#xff0c;所需积分&#xff0c;物品状态等信息&#xff0c;还有一个积分流水表&#xff0c;完成任务奖励积分&#xff0c;兑换物品…

函数总结

一、main函数 //argc 统计命令行传参的个数 //argv 保存命令行传的具体参数,每个参数当做字符串来存储&#xff0c;const是为了不让main函数修改argv数组里的内容 1.1值传递 此为值传递;形参的值改变不影响实参的值 1.2 地址传递 形参拿到的是实参的地址&#xff0c;实际操…

okhttp post请求 header post参数加密遇到的两个问题

如果你对于网络请求用了https后是否还有必要对参数加密有疑问可以看我上篇的文章&#xff1a;网络安全https 记得耐心看完&#xff0c;下面说问题&#xff1a; Caused by: java.lang.IllegalArgumentException: Unexpected char 0x0a 一开始以为是okhttp框架对特殊字符做了现在…

高效改名,文件夹名称替换:一键批量替换文件夹名中间部分内容

在我们的日常生活和工作中&#xff0c;经常需要处理大量的文件夹&#xff0c;其中有些文件夹名称可能包含我们需要替换的内容。但如果我们一个一个地手动修改文件夹名称&#xff0c;不仅耗时而且容易出错。为了解决这个问题&#xff0c;我们可以使用云炫文件管理器高效的文件夹…

[AUTOSAR][诊断管理][ECU][$2F] 通过ID控制IO

文章目录 一、简介服务功能功能描述应用场景服务请求请求格式控制参数(IOCP)请求实例服务响应响应格式正响应实例负响应NRC支持二、 示例代码2f_io_ctl_by_id.c一、简介 2F诊断服务主要在车身域比较常见,比如车窗控制,传感器开关、执行器控制等。 UDS诊断服务协议都以ISO标准…

Centos虚拟机安装配置与MobaXterm工具及Linux常用命令

目录 一、Centos操作系统 1.1 Centos介绍 1.2 Centos虚拟机安装 1.3 配置centos的镜像 1.4 虚拟机开机初始设置 1.4.1 查看网络配置 1.4.2 编辑网络配置 二、MobaXterm工具 2.1 MobaXterm介绍 2.2 MobaXterm安装 2.3 切换国内源 三、Linux常用命令和模式 3.1 …

【漏洞复现】CNVD-2023-08743

【漏洞复现】 CNVD-2023-08743 【漏洞介绍】 Hongjing Human Resource Management System - SQL Injection 【指纹】 title”人力资源信息管理系统” 【系统UI】 【payload】 /servlet/codesettree?flagc&status1&codesetid1&parentid-1&categories~31…

Word插入图片显示不全?学会这4个方法,轻松解决!

“为了让我的文档看起来更专业&#xff0c;我在Word里插入了一些图片&#xff0c;但是这些图片有些只显示了部分&#xff0c;有些都无法正常显示。有什么方法可以让图片显示齐全吗&#xff1f;” 在使用Word时&#xff0c;添加一些图片不仅会让我们的文档看起来更美观&#xff…