从零开始:RobotFramework自动化测试环境搭建与实战入门
1. 环境准备:别急着敲代码,先把“地基”打牢
大家好,我是老张,在自动化测试这个行当里摸爬滚打了十来年,用过不少框架,RobotFramework(后面咱们就亲切地叫它RF)绝对是让新手又爱又恨的一个。爱的是它关键字驱动,写起用例来像搭积木;恨的是环境搭建这一步,经常能把人卡得没脾气。今天,我就带你从零开始,手把手把RF的环境搭起来,顺便把那些常见的“坑”提前给你填上,保证你一次成功,绝不从入门到放弃。
咱们先明确一个核心思想:RF是基于Python的。所以,整个环境的基石就是Python。很多新手一上来就去找RF的安装包,结果装了半天报一堆错,根源往往就在Python这里没弄对。我建议,无论你电脑上有没有其他Python环境,为了RF,咱们最好单独管理一个。现在最省心的方式就是直接用Python 3.9或3.10的版本,太新的版本(比如3.11+)有时候第三方库兼容性会有点小问题,咱们求稳不求新。
第一步,安装Python。 这个确实如很多教程所说,“百度一下就行”,但我得多啰嗦两句细节。去Python官网下载安装包时,记得一定要把那个“Add Python to PATH”的复选框勾上!这个选项能自动把Python和它的包管理工具pip添加到系统环境变量里,省去你后面手动配置的麻烦。安装完成后,别急着关窗口,咱们需要验证一下。打开你的命令行(Windows按Win+R,输入cmd;Mac或Linux打开终端),输入 python --version 和 pip --version。如果都能正确显示版本号,比如“Python 3.9.6”和“pip 21.2.4”,那恭喜你,第一步稳了。如果提示“不是内部或外部命令”,那就说明环境变量没加成功,需要你手动去系统属性里添加一下,具体步骤网上很多,这里不展开。
第二步,安装Robot Framework核心库。 这是RF的引擎。有了pip,这一步就简单得不像话。在刚才的命令行里,输入:
pip install robotframework
回车,等它刷刷刷下载安装完成就行。这里有个小技巧,因为网络原因,有时候直接用pip会慢或者超时。你可以试试国内的镜像源,速度会飞起。比如用清华的源:
pip install robotframework -i https://pypi.tuna.tsinghua.edu.cn/simple
安装完,你可以用 pip list 命令看看,列表里有没有 robotframework 这一行,有就说明成功了。
第三步,安装图形化编辑器RIDE(可选但强烈推荐)。 RF的测试用例可以用纯文本写,但对于新手来说,有一个可视化界面来组织项目、套件、用例和关键字,会直观太多。RIDE就是这个官方编辑器。但安装它,往往是整个过程中最大的“坑点”。网上很多老教程会让你去下载一个.exe的安装包,但现在官方早就不维护那种方式了。现在最靠谱的安装方法,就是通过pip来安装。在命令行里输入:
pip install robotframework-ride
对,就这么简单。但是,在安装RIDE之前,它依赖一个叫wxPython的图形库,这个库在某些系统上(尤其是Windows)安装可能不太顺利。不过别担心,新版robotframework-ride的安装命令通常会尝试自动解决这个依赖。如果安装过程中报错提到wxPython,你可以先手动安装它:
pip install wxPython
这个包稍微大一点,耐心等待即可。全部装好后,怎么启动RIDE呢?它不会在桌面生成快捷方式。你需要在命令行里直接输入 ride.py 并回车。如果一切正常,RIDE的图形界面就会弹出来。为了方便,你可以在桌面创建一个快捷方式,目标指向你Python安装目录下的 pythonw.exe(注意是pythonw,不是python),然后参数加上 -c “from robotide import main; main()”。这样双击就能打开了。
2. 第一个项目:从“Hello World”开始理解RF架构
环境搭好了,RIDE也打开了,面对一个空白的界面,是不是有点不知所措?别慌,咱们不搞复杂的,就从创建一个最简单的项目开始,输出一句“Hello, RobotFramework!”。通过这个最小化的例子,你能把RF的核心概念一次性捋清楚。
创建项目和组织结构。 打开RIDE,点击菜单栏的 File -> New Project。会弹出一个对话框,这里就有第一个关键选择:Type。你会看到 Directory 和 File 两个选项。这俩有什么区别?我打个比方:Directory 就像一个文件夹,里面可以继续放子文件夹(测试套件)和文件(测试用例);而 File 就是一个独立的文件,通常用来存放一组相关的测试用例。对于新手,我建议第一个项目就选 Directory,这样更符合我们管理多个测试用例的习惯。给项目起个名字,比如 MyFirstRFProject,然后选择保存路径,点击 OK。
项目创建好后,左边导航树里就出现了你的项目名。右键点击它,选择 New Suite。这相当于在项目文件夹里创建一个测试套件文件。注意,在弹出的窗口里,Type 这次要选 File。为什么?因为测试套件(Suite)是测试用例的直接容器,它本身就是一个 .robot 文件。我们给它起名叫 FirstSuite。现在,你的结构就是:项目(目录) -> 测试套件(.robot文件)。
接下来,在 FirstSuite 上右键,选择 New Test Case。这就是我们写具体测试步骤的地方了,起名叫 My First Test。双击这个测试用例,右边的主编辑区就激活了。
编写并运行第一个测试用例。 RF的测试用例由“关键字”(Keyword)组成。关键字可以是RF内置的,也可以是库提供的,或者你自己写的。咱们先用一个最简单的内置关键字:Log。这个关键字就是用来在控制台和生成的报告里打印信息的。在测试用例的编辑表格里,第一列输入 Log,第二列输入 Hello, RobotFramework!。对,就这么简单,一行就是一个测试步骤。
现在,点击工具栏上那个绿色的播放按钮(Run Tests),或者按 F8。RIDE会弹出一个运行配置的对话框,直接点 OK 就行。然后你会在下方看到一个输出窗口在滚动日志,最后显示绿色的 PASS。恭喜!你的第一个自动化测试脚本运行成功了。你可以点击 Report 和 Log 按钮,看看生成的HTML格式的详细报告和日志,里面会清晰记录我们刚才打印的那句话。
通过这个最简单的流程,你应该能感受到RF的基本架构了:项目 -> 测试套件 -> 测试用例 -> 关键字。关键字是执行动作的最小单元,而测试用例就是由一系列有序的关键字组成的。这种“搭积木”的方式,正是RF易于上手的关键。
3. 核心武器库:掌握这些关键字,你就能解决80%的问题
光会打印日志可不够。RF的强大,在于它拥有一个丰富的“关键字”生态。这些关键字主要来自两个地方:标准库(BuiltIn)和扩展库。标准库是RF自带的,开箱即用,包含了日常测试中最常用的操作。咱们先花时间把标准库里的几个“王牌”关键字玩熟,你就能应付很多基础场景了。
变量和数据类型操作。 自动化测试离不开处理数据。RF里定义变量使用 ${变量名} 的格式。设置一个变量最常用的关键字是 Set Variable。比如,在测试用例里写:
${my_name} Set Variable 老张
Log ${my_name}
运行后,日志里就会输出“老张”。除了标量,RF还支持列表和字典。创建列表用 Create List:
@{hobbies} Create List 读书 跑步 写代码
Log Many @{hobbies}
注意,列表变量用 @{变量名} 表示。Log Many 关键字可以一次性打印出列表里的所有元素。创建字典用 Create Dictionary:
&{person} Create Dictionary name=老张 age=18 job=测试开发
Log ${person.name}
字典变量用 &{变量名} 表示,访问其中的值可以用 ${变量名.key} 的方式。
流程控制:让测试用例“活”起来。 真正的测试不可能都是顺序执行,我们需要根据条件判断或者循环执行某些步骤。RF通过关键字实现了流程控制。最常用的是 Run Keyword If,它实现了条件判断。看个例子:
${score} Set Variable 85
Run Keyword If ${score} >= 90 Log 优秀!
... ELSE IF ${score} >= 60 Log 及格。
... ELSE Log 再接再厉。
这个关键字后面跟着条件表达式,如果为真,就执行后面指定的关键字(这里是Log)。ELSE IF和ELSE是可选的分支。注意...是RF中的续行符,表示这一行和上一行是同一条语句。
循环最常用的是 FOR 循环。RF支持几种循环方式:
# 遍历一个列表
FOR ${item} IN @{hobbies}
Log My hobby: ${item}
END
# 遍历一个数字范围
FOR ${index} IN RANGE 1 5
Log Current index is: ${index}
END
IN RANGE 的范围是左闭右开的,上面这个例子会打印1,2,3,4。
其他实用内置关键字。
Sleep:强制等待。Sleep 3就是暂停3秒。虽然不推荐在自动化测试中滥用强制等待,但在某些调试或特定场景下还是需要的。Get Time:获取当前系统时间。${now} Get Time。Evaluate:这个关键字非常强大,它允许你直接执行一段Python表达式。这意味着你可以调用任何Python的内置函数或你熟悉的库。比如:
${random_num} Evaluate random.randint(1, 100) random
Log 随机数是:${random_num}
这里我们通过 modules=random 参数,导入了Python的random模块,然后调用它的randint函数。这大大扩展了RF的能力边界。
把这些关键字组合起来,你已经可以写出逻辑相当复杂的测试用例了。比如,模拟一个登录场景:先读取一个用户列表,然后循环尝试登录,根据返回结果判断是否成功,并记录日志。多动手把这些关键字在RIDE里敲一遍,感受一下它们的效果,比光看文档强十倍。
4. 打造你的专属工具:自定义关键字和资源文件
当你用内置关键字写了一些用例后,可能会发现有些操作序列经常重复,比如“登录系统”、“查询某个订单”、“退出登录”。每次都复制粘贴一堆关键字,不仅麻烦,而且一旦流程有变,修改起来就是灾难。这时候,你就需要 自定义关键字(User Keyword) 来把这些重复操作封装成一个新的、更高级的关键字。
创建和使用自定义关键字。 自定义关键字需要放在“资源文件(Resource)”里。在RIDE中,右键点击你的项目或测试套件,选择 New Resource。Type 选择 File,起个名字比如 MyKeywords。创建好后,双击这个资源文件,你会发现它的编辑区和测试套件很像。在这里,我们点击 Add User Keyword 按钮。
假设我们经常需要组合“输入用户名”、“输入密码”、“点击登录”这三个步骤。我们可以创建一个叫 Login To System 的关键字。在关键字编辑区,给它添加三个步骤(这里用伪关键字示意):
[Arguments] ${username} ${password}
Input Text id=username ${username}
Input Text id=password ${password}
Click Button id=login-btn
注意第一行的 [Arguments],它定义了这个关键字可以接收两个参数:用户名和密码。这样,这个关键字就变得通用了。
那么,如何在测试用例中使用它呢?首先,你需要在用到它的测试套件里,“引用”这个资源文件。在测试套件的编辑区,点击 Add Resource,然后浏览找到你刚才保存的 MyKeywords.resource 文件。引用成功后,你在测试用例里就可以像使用内置关键字一样使用 Login To System 了:
Login To System zhangsan 123456
看,一行代码就完成了登录操作,清晰又简洁。如果登录流程以后要增加一个“验证码”步骤,你只需要去修改 Login To System 这一个自定义关键字,所有用到它的测试用例就自动更新了,这就是封装的好处。
资源文件的组织艺术。 当你的自定义关键字越来越多,一个好的实践是按照功能模块来组织资源文件。比如,你可以有 LoginKeywords.resource、OrderKeywords.resource、UserCenterKeywords.resource。然后在主测试套件中按需引用。这样结构清晰,维护起来也方便。自定义关键字是RF框架可扩展性的核心体现,也是你从“用例编写者”迈向“框架设计者”的第一步。花时间思考如何将你的测试逻辑抽象成一个个高内聚、低耦合的关键字,这会让你的自动化代码质量提升一个档次。
5. 连接真实世界:引入SeleniumLibrary做Web自动化
前面的例子都是在“自娱自乐”,真正的自动化测试最终是要操作浏览器、操作APP、调用接口的。这就需要引入RF的扩展库。其中,做Web自动化最经典、最常用的库就是 SeleniumLibrary(注意,老版本的Selenium2Library已合并至此)。它提供了一系列用于操作浏览器和网页元素的关键字。
安装与初步使用。 安装扩展库一如既往地简单,打开命令行:
pip install robotframework-seleniumlibrary
安装完成后,你不需要重启RIDE,但需要在你的测试套件中“导入”这个库。在测试套件的编辑区,点击 Add Library,在弹出的对话框中输入 SeleniumLibrary,然后点击 OK。如果导入成功,库名会显示为黑色;如果失败(比如名字拼错或没安装),会显示为红色。
现在,你就可以使用SeleniumLibrary提供的上百个关键字了。一个最基础的打开浏览器并访问网页的脚本如下:
*** Settings ***
Library SeleniumLibrary
*** Test Cases ***
打开百度首页
Open Browser https://www.baidu.com chrome
Input Text id=kw RobotFramework
Click Button id=su
Sleep 2
Close Browser
我们来拆解一下:
*** Settings ***是RF的“设置区”,在这里我们通过Library关键字导入了SeleniumLibrary。- 在测试用例中,
Open Browser关键字需要两个参数:网址和浏览器类型(需要你电脑上已安装对应的浏览器驱动,如ChromeDriver,并放在系统PATH路径下)。 Input Text和Click Button是模拟用户在输入框输入文本和点击按钮。这里的id=kw和id=su是百度首页搜索框和按钮的HTML元素定位方式。元素定位是Web自动化的核心技能,你需要配合浏览器的开发者工具(F12)来查看和获取元素的id、name、xpath等。- 最后用
Close Browser关闭浏览器。
处理常见的Web交互。 SeleniumLibrary的关键字非常丰富,几乎涵盖了所有Web交互。比如:
Click Element/Click Link:点击任何元素或链接。Select From List By Value:从下拉列表中选择。Mouse Over:模拟鼠标悬停。Wait Until Page Contains Element:等待页面出现某个元素,这是处理页面加载慢、避免使用硬性Sleep的更好方式。Get Text/Get Value:获取元素的文本或值,用于断言。
断言与测试验证。 自动化测试的灵魂是“验证”。RF内置了诸如 Should Be Equal、Should Contain 等断言关键字,结合SeleniumLibrary获取到的页面信息,就可以完成验证。例如,在百度搜索后,我们验证页面是否包含“RobotFramework”这个词:
${result_text} Get Text id=content_left
Should Contain ${result_text} RobotFramework
把上面这些关键字组合起来,你就能编写出完整的、带验证的Web端到端测试用例了。从打开浏览器,到一系列操作,再到最后的结果断言和报告生成,RF+SeleniumLibrary提供了一条完整的Web自动化解决方案。刚开始写定位器可能会遇到元素找不到的问题,别灰心,多用浏览器的开发者工具,多尝试几种定位方式(优先用id、name,其次用css selector,最后考虑xpath),这是每个自动化工程师的必经之路。
6. 让测试更智能:数据驱动与高级技巧
当你掌握了基础关键字和Web操作后,可能会面临新的挑战:如何用同一套测试逻辑,去验证不同的测试数据?比如用10组不同的用户名密码测试登录功能。这时候,数据驱动测试(Data-Driven Testing) 就是你的利器。RF原生支持一种简单而强大的数据驱动模式。
使用[Template]实现数据驱动。 在测试套件(Suite)的Settings里,有一个设置项叫 Test Template。你可以指定一个自定义关键字作为模板。然后,这个套件下的所有测试用例,就不再需要写具体的步骤了,而是变成了一行行的测试数据。我们用一个登录的例子来看:
首先,在资源文件里创建一个模板关键字 Login With Credentials:
[Arguments] ${username} ${password} ${expected_result}
Go To Login Page
Input Text username_field ${username}
Input Text password_field ${password}
Click Button login_button
Run Keyword If '${expected_result}' == 'PASS'
... Page Should Contain Welcome
... ELSE
... Page Should Contain Login Failed
然后,在测试套件的Settings里设置模板:
*** Settings ***
Test Template Login With Credentials
最后,创建测试用例,每一行就是一组测试数据:
*** Test Cases *** username password expected_result
Valid Login correct_user correct_pwd PASS
Invalid Login - Wrong Password correct_user wrong_pwd FAIL
Invalid Login - Wrong Username wrong_user correct_pwd FAIL
运行这个测试套件,RF会自动用每一行数据去调用一次 Login With Credentials 关键字,生成三条独立的测试结果。这种方式极大地减少了代码重复,让测试逻辑和数据分离,维护起来非常清晰。
标签(Tags)的妙用。 当你的测试用例成百上千时,如何有选择地运行一部分?比如只运行冒烟测试,或者只运行某个模块的测试。RF的标签功能就是为此而生。你可以在测试用例或测试套件的Settings里,通过 Force Tags 或 [Tags] 来打标签。
*** Test Cases ***
搜索功能测试
[Tags] smoke search
Open Browser ${URL} chrome
... # 其他步骤
用户中心测试
[Tags] regression user_center
... # 其他步骤
在RIDE中运行测试时,你可以在“Run”标签页的“Only run tests with these tags”框里输入 smoke,那么就只有第一个用例会被执行。在命令行中,可以使用 --include 或 --exclude 参数来按标签过滤,这对于集成到CI/CD流水线中非常有用。
命令行执行与报告。 虽然RIDE很方便,但在持续集成环境中,我们通常通过命令行来执行测试。RF的命令行工具 robot 功能非常强大。基础命令如下:
robot --outputdir results my_test_suite.robot
这条命令会运行 my_test_suite.robot 文件中的所有测试,并将生成的报告(output.xml)、日志(log.html)和报告(report.html)输出到 results 文件夹中。你可以组合各种参数,比如 --test 指定运行单个用例,--variable 传入变量,--loglevel DEBUG 设置更详细的日志级别等。掌握命令行执行,是你将RF测试集成到自动化流程中的关键一步。
环境搭建是起点,关键字是砖瓦,自定义关键字和资源文件是设计图,扩展库是连接外界的桥梁,而数据驱动和标签等高级特性则是让整个测试工程变得高效、可维护的工艺。RobotFramework就像一个乐高套装,提供了丰富的标准件,同时也给了你自由创造的空间。一开始可能会觉得规则稍多,但一旦熟悉了这套模式,你会发现编写和维护自动化测试用例其实可以很高效、很有条理。我见过很多团队用RF构建了成体系的自动化测试项目,从Web到API,再到移动端和数据库,它都能很好地支撑。最重要的是开始动手,遇到报错别怕,那正是学习的最好时机。RF的社区很活跃,大部分你踩的坑,网上都能找到解决方案。
更多推荐

所有评论(0)