RF测试框架

RobotFramework框架

一、简介和特点

基于python开发的、可扩展的,以关键字驱动的自动化测试框架

  • 数据驱动:

    数据驱动是把测试用例的数据放到excel、yaml里面,然后通过改变excel或者yaml文件里面的数据,达到控制测试用例的执行过程

  • 关键字驱动:

    把项目中的一些业务逻辑或基本的操作封装成一个一个的关键字,然后调用不同的关键字或者关键字的组合实现不同的业务逻辑

  • 特点:

    1. 编写用例更方便,可以以robot,txt,html等格式
    2. 自动生成htm格式的测试报告(unittest:htmltestrunner,pytest:allure)
    3. 自带很多类库,支持很多扩展库
    4. 可以根据我们业务逻辑的需要自定义关键字(登录,下订单,评论)
    5. 支持非GUI方式运行,还可以和Jenkins持续集成

二、搭建RF测试环境

  1. 先安装python,并配置环境变量

  2. pip install robotframework

  3. pip install robotframework-ride(生成快捷方式)

  4. 检查是否安装完成

    pip list

三、RIDE的基本使用

  • 测试套件

    • Edit标签:

      Setting 设置

      加载外部文件(扩展库,资源文件,变量文件,帮助文档)

      定义内部变量

      定义元数据

四、RF类库和扩展库

  1. 标准库(RF自带的库,不需要额外安装)

    BuitIn

    Collections(集合库)

    DateTime(时间库)

    Screenshot(截屏库)

  2. 扩展库(需要通过pip命令额外安装的库)

    • web自动化:SeleniumLibrary

      安装:pip install robotframework-seleniumlibrary

    • 接口自动化:RequestLibrary

      安装:pip install robotframework-request

    • app自动化:AppiumLibrary

      安装:pip install robotframework-appiumlibrary

    • 存储的位置:E:\SoftWare\Python\Lib\site-packages

五、RF的基本使用

六、RF关键字

  • 常规关键字

    *** Settings ***
    Library           Collections
    
    *** Test Cases ***
    测试用例test
        Log    码尚学院    # 打印
        # 定义变量
        ${a}    set variable    100
        log    ${a}
        # 获取系统时间
        ${time}    get time
        log    ${time}
        # 字符串拼接
        ${str}    catenate    百里    星瑶    微微
        log    ${str}
        ${str}    catenate    SEPARATOR=    # \ \ \ 百里 \ \ \ 星瑶 \ \ \ 微微
        log    ${str}
        # 创建列表
        ${list}    Create list    百里    星瑶    微微
        log    ${list}
        @{list}    Create list    百里    星瑶    微微
        log many    @{list}
        # 字典关键字
        ${dic}    create dictionary    name=百里    age=38
        # 获取字典所有key
        log    ${dic}
        ${keys}    Get Dictionary Keys    ${dic}
        log    ${keys}
        # 获取字典所有values
        ${values}    get dictionary values    ${dic}
        log    ${values}
        # 通过key取value
        ${value}    get from dictionary    ${dic}    name
        log    ${value}
    
    *** Settings ***
    Library           Collections
    Library    Screenshot
    
    *** Test Cases ***
    常规关键字
        Log    码尚学院    # 打印
        # 定义变量
        ${a}    set variable    100
        log    ${a}
        # 获取系统时间
        ${time}    get time
        log    ${time}
        # 字符串拼接
        ${str}    catenate    百里    星瑶    微微
        log    ${str}
        ${str}    catenate    SEPARATOR=    # \ \ \ 百里 \ \ \ 星瑶 \ \ \ 微微
        log    ${str}
        # 创建列表
        ${list}    Create list    百里    星瑶    微微
        log    ${list}
        @{list}    Create list    百里    星瑶    微微
        log many    @{list}
        # 字典关键字
        ${dic}    create dictionary    name=百里    age=38
        # 获取字典所有key
        log    ${dic}
        ${keys}    Get Dictionary Keys    ${dic}
        log    ${keys}
        # 获取字典所有values
        ${values}    get dictionary values    ${dic}
        log    ${values}
        # 通过key取value
        ${value}    get from dictionary    ${dic}    name
        log    ${value}
    
    复杂关键字
        # 执行python方法
        ${rand}    evaluate    random.randint(1, 101)    modules=random
        log    ${rand}
        ${time}    evaluate    time.time()    modules=time
        log    ${time}
        # 执行py文件里面的关键字
        ${x}    evaluate    int(10)
        ${y}    evaluate    int(20)
        import library    E:/test.py
        ${result}    sum    ${x}    ${y}
        log    ${result}
        #流量控制if
        ${a}    set variable    86
        run keyword if    ${a}<60    log    不及格
        ...    ELSE IF    ${a}<80    log    一般
        ...    ELSE    log    优秀
        #流程控制for
        FOR    ${a}    IN    apple    orcale    banana
        log    ${a}
        END
        #列表方式
        @{list}    create list    apple    orcale    banana
        FOR    ${a}    IN    @{list}
        log    ${a}
        END
        #写法3
        FOR    ${a}    IN RANGE    1    11
        Run Keyword If    ${a}==6   Exit For Loop
            Log    ${a}
        END
        # 截图
        Take Screenshot
    

七、准备WEB自动化环境

  • web自动化关键字

    *** Settings ***
    Library     SeleniumLibrary
    
    *** Test Cases ***
    # 打开浏览器并且加载网页
    打开浏览器
        Open Browser    url=http://www.baidu.com   browser=chrome
    # 设置隐式等待
        Set Browser Implicit Wait    3
        Sleep    2
        # 设置浏览器最大化
        Maximize Browser Window
        Sleep    2
        # 设置浏览器的宽度和高度
        Sleep    2
        Set Window Size    600    800
        # 获得浏览器的宽度和高度
        Sleep    2
        ${width}    ${height}   Get Window Size
        Sleep    2
        # 回退
        Go Back
        # 前进
        Go To    http://www.csdn.com
        # 刷新
        Reload Page
        # 获得标题
        ${title}    Get Title
        # 获得浏览器地址
        ${location}     Get Location
        # 关闭浏览器
        Close Browser
    

八、元素定位

前提:元素或属性必须唯一

八种元素定位方式:id\name\link_text\partial_link\xpath\css\class_ame\tag_name

绝对路径:以/开头,绝对路径是从网页的第一个标签开始查询元素

xpath=/html/body/div[1]/div/div[5]/div/div/form/span[1]/input

相对路径:以//开头,相对路径是从网页的任意标签开始查询元素

  • 相对路径+索引定位 //form/span/input

  • 相对路径+属性定位 //input[@autocomplete=“off”]

  • 相对路径+部分属性值定位

    • 以什么开头 //input[starts-with(@autocomplete,‘of’)]
    • 以什么结尾 //input[substring(@autocomplete,2)=‘ff’]
    • 包含 //input[contains(@autocomplete,‘of’)]
  • 相对路径+通配符定位

    • //*[@id=‘kw’]
    • 一般不建议大家复制xpath使用
      1. 复制的xpath性能较低
      2. 复制的xpath比我们手写的要复杂
      3. 有些元素是动态的,复制的xpath完全失效
  • 相对路径+文本定位

    • //span[text()=“按图片搜索”]
  • CSS定位

    • 绝对路径

      xpath=html>body>div[1]>div>div[5]>div>div>form>span[1]>input

    • 相对路径

    *** Settings ***
    Library     SeleniumLibrary
    
    *** Test Cases ***
    # 打开浏览器并且加载网页
    元素定位
        Open Browser    url=http://www.baidu.com   browser=chrome
        Set Browser Implicit Wait    2
        # id定位
        Input Text    id=kw   自动化测试
        Click Element    id=su
        # name定位
        Input Text    name=wd    自动化测试
        Click Element    id=su
        # link_text链接文本定位
        Click Element    link=新闻
        # particl_link 部分链接
        Click Element    partial link=新
        Sleep    3
        # xpath定位
        Input Text    xpath=/html/body/div[1]/div/div[5]/div/div/form/span[1]/input  自动化测试
        Click Element    id=su
        Input Text    xpath=//input[starts-with(@autocomplete,'of')]    自动化测试
        Input Text    xpath=//input[substring(@autocomplete,2)='ff']    自动化测试
        Input Text    xpath=//input[contains(@autocomplete,'of')]    自动化测试
        Input Text    xpath=//*[@id='kw']    自动化测试
        Input Text    xpath=//span[text()="按图片搜索"]    自动化测试
        Click Element    id=su
        # CSS定位
        # 通过ID定位
        Input Text    css=#kw    自动化测试
        Click Element    id=su
        # 通过class定位
        Input Text    css=input.s_ipt    自动化测试
        Click Element    id=su
       	# 清空元素
        Clear Element Text    id=kw
    

九、操作元素的关键字

  • 操作元素

    *** Settings ***
    Library     SeleniumLibrary
    
    *** Test Cases ***
    常规元素操作
        Open Browser    http://www.baidu.com    chrome
        # 获取元素文本信息
        ${text}     Get Text    xpath=//a[@href='http://news.baidu.com']
        # 获取元素属性
        ${attribute}    Get Element Attribute    xpath=//a[@href='http://news.baidu.com']    class
    
    鼠标和键盘关键字
        Open Browser    http://www.baidu.com    chrome
        # 双击元素
        Double Click Element    id=kw
        # 键盘事件
        Press Key    id=kw    autotest
        Sleep    3
        Close Browser
    
    断言关键字(系统断言)
        # 系统断言
        ${a}    Set Variable    zhangsan
        Should Be Empty    ${a}
        Should Be Equal    ${a}    ZHANGSAN     ignore_case=True
        Should Be True    1=2
        Should Contain    zhangsan    zhan      ignore_case=False
        Should Start With    zhangsan    zh
        Should End With    zhangsan    an
        Length Should Be    zhangsan    8
    
        Open Browser    https://www.baidu.com   chrome
        Sleep    3
    
    slenium断言
        Open Browser    https://www.baidu.com   chrome
        Sleep    5
        # 断言页面是否包含hao123这个字段
        Page Should Contain    hao123
        # 断言页面中是否包含有id=kw的元素
        Page Should Contain Element    id=kw
    
    元素等待关键字
        Open Browser    https://www.baidu.com   chrome
        Set Browser Implicit Wait    3      # 针对当前浏览器
        Set Selenium Implicit Wait    3     # 针对所有浏览器
        # 等待元素包含指定的文本
        Wait Until Element Contains    xpath=//a[@href='http://news.baidu.com']     新闻  3
        Sleep    3
        # 等待元素可用
        Wait Until Element Is Enabled    link=新闻    3
        # 等待元素可见
        Wait Until Element Is Visible    link=新闻    3
        # 等待页面包含指定的文本
        Wait Until Page Contains    百度一下    3
        # 等待页面包含指定元素
        Wait Until Page Contains Element    id=kw
        Close Browser
    

十、项目实战

  • 示例

    *** Settings ***
    Library     SeleniumLibrary
    
    *** Test Cases ***
    登录
        Open Browser    http://ihrm-java.itheima.net/#/login      chrome
        Clear Element Text    name=username     
        Clear Element Text    name=password
        Sleep    5
        Input Text    name=username    13800000002
        Input Text    name=password    888itcast.CN764%...
        Click Button    xpath=//*[@id="app"]/div/form/button
        Sleep    3
        Close Browser
    
    查询商品(框架及下拉框)
        # 进入框架
        Select Frame    name=menu-frame
        # 选择元素
        # 跳出框架
        Unselect Frame
        # 进入新框架
        Select Frame    name=main-frame
        # 选中下拉框中的数据
        Select From List By Index    name=brand_id  4
        Select From List By Value    name=brand_id  9
        Select From List By Label    name=brand_id  联想
        
    删除商品
        # 定位一组元素
        ${ele_list}     Get WebElements    xpath=//img[@src='abc']
        Click Element    ${ele_list}[0]
        # 点击alert按钮
        Sleep    2
        Handle Alert    # 直接点确定
        Handle Alert    action=Dismiss  # 取消
        Handle Alert    timeout=10s     # 超时接受
        Handle Alert    DISMISS     # 超时取消
        ${message}      Handle Alert
    
    新网页操作
        Select Frame    name=header-frame
        Click Element    link=查看网店
        Sleep    3
        # 进入到新网页操作
        Switch Window   new
    
    

问题

  1. 线性脚本,不利于后期维护

  2. 没有分层封装的思想

    京东的仓库:日用品,书籍,电器

    分层:页面的元素层,业务逻辑层,测试用例层(数据驱动)

  3. 数据是没有独立的

分层目的:主要增加脚本的重复利用

项目的三层架构

  1. 页面元素层
  2. 业务逻辑层
  3. 测试用例层
  • 业务逻辑层调用页面元素层,测试用例层调用业务逻辑层

  • 为什么要分层

    实现页面元素,公共方法,公共数据,测试用例集中式管理

    增加脚本重复利用率

    增加脚本的可维护性

Jenkins持续集成RF

  • 在Jenkins里面安装robotframework插件

RF扩展

  1. 发送电子邮件
  2. 执行js脚本
  3. 鼠标键盘事件
  4. 验证码处理
  5. 断言
  6. 接口自动化
  7. APP自动化
  • web自动化

    语言:python、java

    设计模式:PO模式、关键字驱动

    用例管理:unittest/pytest

    日志监控:logger

    二次封装:selenium二次封装,yaml二次封装,excel二次封装,数据库二次封装

    测试报告:htmltestrunner/allure,日志的定制

    数据驱动ddt,parameterice

    版本控制:git,集成pycharm

    容器技术:docker

    最核心的:自主独立的搭建一套自动化框架

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RF自动化框架是一个基于Python编程语言的开源框架,用于自动化测试和自动化任务的实施。以下是一些常见的RF自动化框架面试题及其回答: 1. 介绍一下RF自动化框架RF自动化框架是一个基于关键字驱动的自动化测试框架,其核心原理是将测试用例进行模块化,并使用关键字进行描述。它支持多种测试库,并提供了丰富的内置关键字,使得测试用例的编写更加简洁和高效。 2. RF自动化框架有哪些主要特点? RF自动化框架具有以下主要特点: - 关键字驱动:通过使用关键字描述测试用例,使得测试用例更容易理解与维护。 - 数据驱动:可以使用数据源来提供测试数据,并通过关键字进行数据驱动测试。 - 灵活性:支持多种测试库和插件,可以与其他工具集成,满足不同项目的需求。 - 并行执行:支持多线程执行测试用例,提高执行效率。 - 结果报告:生成详细和易读的测试结果报告,方便测试人员和开发人员分析问题。 3. 如何在RF自动化框架中使用关键字? 在RF自动化框架中,可以使用两种方式来使用关键字:关键字库和用户关键字。 - 关键字库:RF自动化框架提供了内置的关键字库,可以直接调用这些关键字来实现特定的功能。 - 用户关键字:除了内置的关键字库,RF还支持用户自定义关键字,可以将一些常用的测试步骤封装成用户关键字,以便复用。 4. RF自动化框架如何处理测试数据? RF自动化框架支持多种方式处理测试数据: - 使用全局变量:可以通过设置全局变量来传递和共享测试数据。 - 数据表格:RF提供了数据表格来组织和管理测试数据,可以以表格的形式定义测试数据。 - 数据源:可以使用数据源来提供测试数据,比如Excel、CSV等文件格式。 5. RF自动化框架的优缺点是什么? RF自动化框架的优点包括易学易用、灵活性高、可读性强、支持多种测试库和插件、并行执行等。缺点包括有些功能较为复杂、对Python编程知识的要求较高、部分插件的质量和稳定性有待提高等。 总的来说,RF自动化框架是一个功能强大且易于使用的自动化测试框架,通过使用关键字驱动和数据驱动的方法,可以提高测试效率和可维护性,适用于各种规模和类型的自动化测试项目。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值