Robot Framework自动化测试框架(自动化测试框架工具)
off999 2024-11-03 14:15 20 浏览 0 评论
RF测试框架
RF(Robot Framework)是一个通用的开源自动化测试框架,通常使用python/java进行集成。简单的讲,RF可以把python中的函数名当成关键字,直接在RF框架中调用。
RF框架 --------> Python脚本 --------> 被测程序
网站链接
RF官网地址:https://robotframework.org/
RF使用指导:https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html
RF下载地址:https://pypi.org/project/robotframework/
下载安装
python -m pip install robotframework
使用方法
robot [options] <paths>
示例:
robot mytest.robot
robot -l NONE -r NONE -o NONE mytest.robot
robot --loglevel=DEBUG -s ovs myconf.robot
options是选项,其中-l NONE是禁用html的log输出,-r NONE是禁用html的报告输出,-o NONE是禁用XML的日志输出,--loglevel指定日志的级别,-s指定测试套(测试用例所在目录)。paths是一般是项目的配置文件,也可以是测试用例文件,均为.robot后缀。使用robot --help可以查看更多的帮助信息。
工程目录
一般的工程目录结构如下(只包含robot配置文件和robot测试用例,不包含python脚本):
my_project/
test_configs/
config1.robot
config2.robot
...
test_scripts/
script1.py
script2.py
...
test_suite1/
__init__.robot
my_test1.robot
my_test2.robot
...
test_suite2
__init__.robot
my_test3.robot
...
变量类型
${}表示标准变量
&{}表示字典变量
@{}表示链表变量
脚本调用
RF的一个非常有用的特性是,在.robot文件中可以直接调用.py文件的函数。比如在 `mylib.py` 中有如下函数:
def add_numbers(a, b):
return a + b
只需要在.robot文件中导入mylib.py:
*** Settings ***
Library mylib.py
就可以通过如下方式调用(忽略大小写、忽略空格、忽略下划线):
*** Test Cases ***
mytest
${sum}= add_numbers 3 4
${sum}= Add_Numbers 3 4
${sum}= addnumbers_ 3 4
${sum}= _addnumbers 3 4
${sum}= aDd_nUMbers 3 4
${sum}= add numbers 3 4
${sum}= ADD NUMBERS 3 4
注意:RF的log关键字和python中的print具有同样的效果,都将内容打印到output.xml中。
使用举例
以下代码使用Python的`signal`和`scapy`库来实现UDP数据包的捕获和发送,并利用多线程来实现并发执行:
`captured`用于记录已捕获的数据包数量,
`stop`用于通知捕获数据包的线程停止执行,
`stop_event()`函数用于判断停止事件是否触发。
`handle_packets()`函数用于处理捕获到的数据包,此处我们只关心UDP协议,并且只对目标端口为12580的数据包进行计数。
`send_packets()`函数用于发送UDP数据包,这里我们使用`sendp()`函数来发送500个UDP数据包。
`sniff_packets()`函数用于捕获数据包,内部调用`sniff()`函数,并通过`filter`参数指定过滤条件,`prn`参数指定回调函数,`stop_filter`参数指定是否停止抓包。
`test_udp`函数是测试主函数,它创建了两个线程,分别用于捕获数据包和发送数据包。然后通过调用`start()`方法启动线程,实现并发执行。最后,调用`join()`方法等待发送数据包的线程结束后再执行后续代码,并将`stop`变量设置为1,通知捕获数据包的线程停止执行。
from signal import *
from scapy.all import *
import threading
captured = 0
stop = 0
def stop_event(event):
global stop
return stop == 1
def handle_packets(packet):
global captured
if packet.haslayer(UDP):
if (packet[UDP].dport == 12580):
captured += 1
def send_packets():
sendp(Ether()/IP(dst='127.0.0.1')/UDP(dport=12580), inter=0.01, count=500, verbose=False)
def sniff_packets():
sniff(filter='udp', prn=handle_packets, stop_filter=stop_event)
def test_udp():
global stop
sniffer = threading.Thread(target=sniff_packets)
sniffer.start()
sender = threading.Thread(target=send_packets)
sender.start()
sender.join()
stop = 1
sniffer.join()
return captured
robot自动化
*** Settings ***
Library testlib.py
Library String
*** Test Cases ***
Example Test
${result}= test_udp
Should Be Equal As Strings ${result} 500
内置关键字
参考RF使用指导:https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html
Call Method
Catenate
Comment
Continue For Loop
Continue For Loop If
Convert To Binary
Convert To Boolean
Convert To Bytes
Convert To Hex
Convert To Integer
Convert To Number
Convert To Octal
Convert To String
Create Dictionary
Create List
Evaluate
Exit For Loop
Exit For Loop If
Fail
Fatal Error
Get Count
Get Length
Get Library Instance
Get Time
Get Variable Value
Get Variables
Import Library
Import Resource
Import Variables
Keyword Should Exist
Length Should Be
Log
Log Many
Log To Console
Log Variables
No Operation
Pass Execution
Pass Execution If
Regexp Escape
Reload Library
Remove Tags
Repeat Keyword
Replace Variables
Return From Keyword
Return From Keyword If
Run Keyword
Run Keyword And Continue On Failure
Run Keyword And Expect Error
Run Keyword And Ignore Error
Run Keyword And Return
Run Keyword And Return If
Run Keyword And Return Status
Run Keyword And Warn On Failure
Run Keyword If
Run Keyword If All Tests Passed
Run Keyword If Any Tests Failed
Run Keyword If Test Failed
Run Keyword If Test Passed
Run Keyword If Timeout Occurred
Run Keyword Unless
Run Keywords
Set Global Variable
Set Library Search Order
Set Local Variable
Set Log Level
Set Suite Documentation
Set Suite Metadata
Set Suite Variable
Set Tags
Set Task Variable
Set Test Documentation
Set Test Message
Set Test Variable
Set Variable
Set Variable If
Should Be Empty
Should Be Equal
Should Be Equal As Integers
Should Be Equal As Numbers
Should Be Equal As Strings
Should Be True
Should Contain
Should Contain Any
Should Contain X Times
Should End With
Should Match
Should Match Regexp
Should Not Be Empty
Should Not Be Equal
Should Not Be Equal As Integers
Should Not Be Equal As Numbers
Should Not Be Equal As Strings
Should Not Be True
Should Not Contain
Should Not Contain Any
Should Not End With
Should Not Match
Should Not Match Regexp
Should Not Start With
Should Start With
Skip
Skip If
Sleep
Variable Should Exist
Variable Should Not Exist
Wait Until Keyword Succeeds
相关推荐
- python import 出现 ModuleNotFoundError 解决方法
-
错误的原因是你的Python环境没有正确安装库文件。本文以Scapy为例,给出详细方案:1.确认是否成功安装Scapy运行以下命令检查Scapy是否已安装:pip3list|gre...
- Github 7.4k star,一个强大的 Python 库-sh!
-
大家好,今天为大家分享一个强大的Python库-sh。Github地址:https://github.com/amoffat/shsh库是Python生态系统中一个专门用于执行系统命令的第三方...
- 学习编程第148天 python编程循环的嵌套使用
-
今天学习的是刘金玉老师零基础Python教程第32期,主要内容是python编程循环的嵌套使用。(一)一维数组及输出#一维数组list1=["110001","四川二流子...
- 2025-07-09:使数组元素互不相同所需的最少操作次数。用go语言,
-
2025-07-09:使数组元素互不相同所需的最少操作次数。用go语言,给定一个整数数组nums和一个整数k,对于数组中的每个元素,你最多可以对其进行一次操作:将一个在区间[-k,k]内的...
- python数据分析numpy基础之max求数组最大值
-
1python数据分析numpy基础之max求数组最大值python的numpy库的max()函数,用于计算沿指定轴(一个轴或多个轴)的最大值。用法numpy.max(a,axis=None,...
- 加快Python算法的四个方法(四)Dask
-
CDA数据分析师出品相信大家在做一些算法经常会被庞大的数据量所造成的超多计算量需要的时间而折磨的痛苦不已,接下来我们围绕四个方法来帮助大家加快一下Python的计算时间,减少大家在算法上的等待时间。...
- 六十六、Leetcode数组系列(中篇)(leetcode679)
-
@Author:Runsen@Date:2020/6/8人生最重要的不是所站的位置,而是内心所朝的方向。只要我在每篇博文中写得自己体会,修炼身心;在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰难...
- Numpy中的ndarray是什么?('numpy.ndarray' object has no attribute 'append')
-
1.创建ndarray创建数组最简单的办法就是使用array函数。它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的Numpy数组。np.array会尝试为新建的这个数组推断出一个...
- Python中的数据导入与查询(python怎样导入数据库)
-
适用场景:快速导入文本/Excel数据→Pandas读取大型数值数据→Numpy处理复杂二进制文件→h5py/scipy.io数据库交互→SQLAlchemy+Pandas一、数据...
- 2025-07-02:统计数组中的美丽分割。用go语言,给定一个整数数组
-
2025-07-02:统计数组中的美丽分割。用go语言,给定一个整数数组nums,我们要把它划分成三个连续且非空的子数组nums1、nums2、nums3,且这三个子数组按顺序拼接后还原为原数组...
- 2025-07-10:字符相同的最短子字符串Ⅰ。用go语言,给定一个长度
-
2025-07-10:字符相同的最短子字符串Ⅰ。用go语言,给定一个长度为n的二进制字符串s和一个允许执行的最大操作次数numOps。每次操作可以选择字符串中的任意一个位置i(0≤i...
- 2025-06-19:识别数组中的最大异常值。用go语言,你有一个长度为
-
2025-06-19:识别数组中的最大异常值。用go语言,你有一个长度为n的整数数组nums,其中恰好有n-2个元素属于“特殊数字”类别。剩下的两个元素中,一个等于所有这些特殊数字的总和,另...
- 2025-06-28:长度可被 K 整除的子数组的最大元素和。用go语言,给
-
2025-06-28:长度可被K整除的子数组的最大元素和。用go语言,给定一个整数数组nums和一个整数k,求nums中长度为k的倍数的非空子数组中,子数组和的最大值。返回该最大和...
- 在 Python 中如何向一个已排序的数组(列表) 中插入一个数呢
-
在Python中如何向一个已排序的数组(列表)中插入一个数呢?方法有很多种,关键在于原来数组是什么样的排序,用到啥排序方法效率高,就用哪种。我们来练习其中的几种插入方法,另外也掌握下遍历数组的...
- 2025-07-04:统计符合条件长度为 3 的子数组数目。用go语言,给定
-
2025-07-04:统计符合条件长度为3的子数组数目。用go语言,给定一个整数数组nums,请你计算有多少个长度恰好为3的连续子数组满足这样的条件:子数组的第一个元素与第三个元素的和,正好...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- python import 出现 ModuleNotFoundError 解决方法
- Github 7.4k star,一个强大的 Python 库-sh!
- 学习编程第148天 python编程循环的嵌套使用
- 2025-07-09:使数组元素互不相同所需的最少操作次数。用go语言,
- python数据分析numpy基础之max求数组最大值
- 加快Python算法的四个方法(四)Dask
- 六十六、Leetcode数组系列(中篇)(leetcode679)
- Numpy中的ndarray是什么?('numpy.ndarray' object has no attribute 'append')
- Python中的数据导入与查询(python怎样导入数据库)
- 2025-07-02:统计数组中的美丽分割。用go语言,给定一个整数数组
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python字典遍历 (54)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)