接口 / WEB/APP 自动化一锅端!这个框架,必须人手一个
## Robot Framework
RobotFramework是一个开源的、关键字驱动的自动化测试框架,主要用来做各类软件的自动化测试,尤其擅长验收测试和验收测试驱动开发(ATDD)。简单来说,它的核心价值是:把复杂的自动化测试逻辑,封装成简单易懂的 “关键字”,让不懂编程的测试人员也能轻松编写和维护自动化测试用例。
你可以把它理解成一个 “自动化测试的翻译官”:
-
对测试人员:用类似自然语言的格式写测试用例(比如 “打开浏览器”、“输入用户名”、“点击登录按钮”) -
对计算机:框架会把这些 “人话” 翻译成可执行的代码,自动完成测试操作
该框架本身是用Python开发的,所以它的核心支持语言分为两类:原生支持和扩展支持。
-
对于编程语言而言,该框架原生核心支持:Python
这是RobotFramework最基础、最完善的支持语言,也是官方推荐的首选:RobotFramework的运行环境依赖Python支持,基于python语言的快速发展,目前已经是python3的天下
-
你编写的自定义关键字、测试库、扩展插件,最常用的方式就是用 Python 实现。无需额外配置,直接就能将 Python 代码集成到 Robot Framework 中,兼容性最好。
-
一级扩展支持:Java
RobotFramework对Java也有完善的官方支持(通过Jython,即Python 的Java实现):
-
可以用 Java 编写自定义测试库、关键字,供RobotFramework调用。 -
适合 Java 技术栈的项目(比如测试Java后端接口、Java桌面应用)。 -
注意:需要通过Jython运行,而非标准 Python,配置稍复杂,但官方提供了完整的文档和示例。
-
其他间接支持的语言
通过 “中间层封装”,Robot Framework 可以间接调用其他语言编写的代码,常见的有:
- C#:通过 Python/.NET 交互库(如 pythonnet),让 Robot Framework 调用 C# 编写的函数 / 库。
- JavaScript/Node.js:通过 Python 的 subprocess 调用 Node.js 脚本,或用 pyv8 等库交互。
- C/C++:将 C/C++ 代码编译成动态链接库(.so/.dll),再用 Python 调用,间接给 Robot Framework 使用。
- Go:同理,将 Go 代码编译成可执行文件,通过 Python 调用,或用 cgo 生成动态库供 Python 调用
如果要是用这个框架做不同领域的自动化还单独安装扩展库,Robot FrameWork提供了丰富的Library。

## 环境搭建
安装3个Python模块,robotframework, robotframework-requests, request
C:\Users\Administrator>pip install robotframeworkCollecting robotframeworkRetrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='pypi.org', port=443): Read timed out. (read timeout=15)")': /simple/robotframework/Downloading https://files.pythonhosted.org/packages/22/0f/1b9ffa0c4e59789b50e6034866e823b7d4a5c7eaedad7bfd0bba42f2aa9d/robotframework-3.1.2-py2.py3-none-any.whl (602kB)100% |████████████████████████████████| 604kB 6.4kB/sInstalling collected packages: robotframeworkSuccessfully installed robotframework-3.1.2C:\Users\Administrator>pip install robotframework-requestsCollecting robotframework-requestsDownloading https://files.pythonhosted.org/packages/42/83/d9cc0a0b170c10eed016fdcc1a6fb6c5d9df050297830b759482ee438012/robotframework-requests-0.6.2.tar.gzRequirement already satisfied: robotframework in c:\python37\lib\site-packages (from robotframework-requests) (3.1.2)Requirement already satisfied: requests in c:\python37\lib\site-packages (from robotframework-requests) (2.21.0)Requirement already satisfied: certifi>=2017.4.17 in c:\python37\lib\site-packages (from requests->robotframework-requests) (2018.11.29)Requirement already satisfied: idna<2.9,>=2.5 in c:\python37\lib\site-packages (from requests->robotframework-requests) (2.8)Requirement already satisfied: urllib3<1.25,>=1.21.1 in c:\python37\lib\site-packages (from requests->robotframework-requests) (1.24.1)Requirement already satisfied: chardet<3.1.0,>=3.0.2 in c:\python37\lib\site-packages (from requests->robotframework-requests) (3.0.4)Installing collected packages: robotframework-requestsRunning setup.py install for robotframework-requests ... doneSuccessfully installed robotframework-requests-0.6.2C:\Users\Administrator>pip install requestsCollecting requestsDownloading https://files.pythonhosted.org/packages/51/bd/23c926cd341ea6b7dd0b2a00aba99ae0f828be89d72b2190f27c11d4b7fb/requests-2.22.0-py2.py3-none-any.whl (57kB)100% |████████████████████████████████| 61kB 10kB/sRequirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in c:\python37\lib\site-packages (from requests) (1.24.1)Requirement already satisfied: chardet<3.1.0,>=3.0.2 in c:\python37\lib\site-packages (from requests) (3.0.4)Requirement already satisfied: idna<2.9,>=2.5 in c:\python37\lib\site-packages (from requests) (2.8)Requirement already satisfied: certifi>=2017.4.17 in c:\python37\lib\site-packages (from requests) (2018.11.29)Installing collected packages: requestsSuccessfully installed requests-2.22.0
## Python2 Robot Framework 开发环境配置
### 使用RIDE作为Robot Framework的编译工具:
因为RIDE依赖于wxPython,因此环境的配置必须严格匹配,可以采用如下组合:

如果环境安装成功,在命令行输入ride则可启动RIDE的GUI



### 使用Sublime3作为Robot Framework编译工具
打开Sublime,使用快捷键Ctrl+` (键盘数字1前边的按键)调出控制台,逐行将如下代码黏贴到控制台并回车,执行完成后重启软件
import urllib.request,os;pf = 'Package Control.sublime-package';ipp = sublime.installed_packages_path();urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) );open(os.path.join(ipp, pf), 'wb').write(urllib.request.urlopen( 'http://sublime.wbond.net/' + pf.replace(' ','%20')).read())
286331reloading plugin Package Control.1_reloaderreloading plugin Package Control.2_bootstrapreloading plugin Package Control.Package ControlPackage Control: Not running package cleanup since bootstrapping is not yet completereloading settings Packages/Package Control/Package Control.sublime-settingsreloading settings Packages/User/Package Control.sublime-settingsreloading plugin 0_package_control_loader.00-package_control
重新打开软件后,选择Preferences选择PackageControl或者Ctrl+Shift+P,调出命令面板输入install

然后在输入窗口输入install Package,然后鼠标左键点击第一个选项

在新窗口中输入robot frameworkAssistant,检索出来后,然后点击该选项即可安装
安装完成后,会有如下提示信息:
Package Control Messages========================RobotFrameworkAssistant-----------------------Features--------* Syntax highlighting/automatic detection/activation for Robot Framework '.robot' files* `Alt+Enter` or `Alt+Click` to go to source of item at cursor (either *Library*, *Resource*, *Keyword* or *Variable*)* `Ctrl+Alt+Enter` or `Ctrl+Alt+Click` on item to log *Keyword* documentation into output panel.* `Ctrl+Space` to auto complete library/resource name, keywords (can start with any part/word of keyword). Using of '.' after library/resource name is also supported (limits keywords to given library/resource);* Autocomplete gives *Keyword* with its *arguments* formatted according to Robot Framework syntax. Jump through arguments with `TAB` key.* `$`, `@` or `&` for autocomplete of *Built-in* and *Resource* variables* `:` and then `TAB` to get list of special Robot Framework syntax elements (like *[Arguments]*, *[Return]* etc);* `:f` and then `TAB` to insert *:FOR* loop template;* `*k`, `*s`, `*v` and then `TAB` to insert tables hedings templates* Toggle comments with `Cmd+/`* `Cmd+B` to run *pybot* with current file* `Robot Framework` context menu which allows to run *pybot* with current file, update internal database, insert snippets etc.Please visit https://github.com/andriyko/sublime-robot-framework-assistant for more information.
同时:

在Sublime中新建一个文件,输入如下内容,并保存为robot格式的文件
***Setting******Test Cases***testcaselog robot framework
在windows命令行执行该文件pybot test.robot执行结果为:
C:\Program Files\Sublime Text 3>pybot test.robot==============================================================================Test==============================================================================testcase | PASS |------------------------------------------------------------------------------Test | PASS |1 critical test, 1 passed, 0 failed1 test total, 1 passed, 0 failed==============================================================================Output: C:\Program Files\Sublime Text 3\output.xmlLog: C:\Program Files\Sublime Text 3\log.htmlReport: C:\Program Files\Sublime Text 3\report.html

如果遇到提示pybot不是内部或外部命令,也不是可运行的程序或批处理文件,那么找到Python的安装路径
C:\Python37\Scripts,在该路径下新建一个bat文件,命名为pybot.bat,用记事本打开该文件,将如下内容输入并保存即可解决该问题
@Echo offpython -m robot.run %*
执行结束后实际上有三个结果呈现形式
Output: C:\Program Files\Sublime Text 3\output.xmlLog: C:\Program Files\Sublime Text 3\log.htmlReport: C:\Program Files\Sublime Text 3\report.html

请在微信客户端打开
### Pycharm 作为Robot Framework编译工具
为Pycharm安装插件

安装插件需要重启,然后新建文件便可以选择robot file



## 代码示例
*** Settings ***Documentation Robot FrameworkLibrary RequestsLibraryLibrary Collections*** Test Cases ***test_login_xxxxx# 查询发布会(GET请求)&{headers} Create Dictionary Content-Type=application/x-www-form-urlencoded&{payload} Create Dictionary userName=yangdawei password=xxxxxCreate Session event https://cnend.xxxxxx.com${r} Post Request event /cuss-login/login data=${payload} headers=${headers}Should Be Equal As Strings ${r.status_code} 200log ${r.json()}${dict} Set variable ${r.json()}${sta} Get From Dictionary ${dict} code${status} Evaluate "1"Should Be Equal ${sta} ${status}
### 报告

更多[RobotFramework关键字](http://bulkan.github.io/robotframework-requests/doc/RequestsLibrary.html)
更多例子
*** Settings ***Documentation Robot FrameworkLibrary RequestsLibraryLibrary Collections*** Test Cases ***test_login_xxxxxx# 登录询盘云(POST请求)&{headers} Create Dictionary Content-Type=application/x-www-form-urlencoded&{payload} Create Dictionary userName=yangdawei_xxxx password=xxxxxCreate Session event https://cnend.xxxxxx.com${r} Post Request event /cuss-login/login data=${payload} headers=${headers}Should Be Equal As Strings ${r.status_code} 200log ${r.json()}${dict} Set variable ${r.json()}${sta} Get From Dictionary ${dict} code${status} Evaluate "1"Should Be Equal ${sta} ${status}*** Keywords ***Provided preconditionSetup system under test
夜雨聆风
