乐于分享
好东西不私藏

接口 / WEB/APP 自动化一锅端!这个框架,必须人手一个

接口 / 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 robotframework  Retrying (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-requests  Downloading 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-requests  Running setup.py install for robotframework-requests ... doneSuccessfully installed robotframework-requests-0.6.2C:\Users\Administrator>pip install requestsCollecting requests  Downloading 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***testcase    log    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=xxxxx    Create 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}    200    log    ${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=xxxxx    Create 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}    200    log    ${r.json()}    ${dict}    Set variable    ${r.json()}    ${sta}    Get From Dictionary    ${dict}    code    ${status}    Evaluate    "1"    Should Be Equal    ${sta}    ${status}*** Keywords ***Provided precondition    Setup system under test
本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 接口 / WEB/APP 自动化一锅端!这个框架,必须人手一个

评论 抢沙发

7 + 7 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮