zoukankan      html  css  js  c++  java
  • 【robotframework】pycharm+robotframe

    一、环境搭建

    二、框架介绍

    1.settings

    • 是这个测试套件的全局配置表
    • 说明这个测试套件要使用的测试库、资源文件
    • 测试套件的环境初始化(setup)和清除(teardown)
    • 该套件内的标签等

    2.Variables

      定义本测试套件的全局变量

    3.Keywords

      定义本测试套件的关键字(支持返回值[Return])

    4.Test Cases

      定义本测试套件的测试用例

    *** Settings ***
    Library     Selenium2Library
    Resource    xxxx
    Suite Setup     xxxxx
    Suite Teardown
    Test Setup
    Test Teardown
    Default Tags
    Force Tags
    Test Template
    *** Variables ***
    ${v1}       1
    @{list}     1,2,3
    
    *** Keywords ***
    Open page
        open browser    www.baidu.com
        
    *** Test Cases ***
    case1
        xxx
    case2
        xxx

    测试用例表语法

    • 测试用例表里面的每个用例大概可以分为:
      • 配置部分
      • 用例部分
    • 用例配置部分
      • [Documentation]该用例的文字说明
      • [Tags]该用例的标签
      • [Setup],[Teardown]该用例的初始化和清除操作
      • [Template]声明该用例是模板关键字驱动的,本用例只包含测试数据
      • [Timeout]设置用例超时时间

    三、关键字

    1.log打印

      log

      log  to console 打印到控制台

    2.定义变量

      1)${variable name}  value  (在***Variables***中定义)

      ${variable name}  Set variable  value  (在***Test Cases***中定义)

      2)定义列表

      @{list name}  value1 value2......  (在***Variables***中定义)

      @{list name}  Create List  value1 value2......  (在***Test Cases***中定义)

    3.获取时间

      在 Robot Framework 中也提供操作时间的关键字。get time

    *** Test Cases ***
    case5
    ${t} get time
    log ${t}
    sleep 5 #设置休眠时间

    4.if语句  

    通过“run keyword if”关键字可以编写 if 分支语句*** Test Cases ***case2

    ${a} Set variable 59
    run keyword if ${a} > 80 log youxiu
    ... ELSE IF ${a} > 60 log bujige
    ... ELSE log bujige

    注意:分支语句前加“...”

    5.for循环  

    在 Robot Framework 中编写循环通过“:for”

    *** Test Cases ***
    case3
    :FOR ${i} IN RANGE 0 10 2 #分别为起始值,结束之和步长,当起始值和结束之为空时,二者默认为0和1
     log ${i}
     log end
     Exit For Loop if '${i}' == '4' #跳出循环
    case4
    @{list} Create List a b c
    :FOR ${i} IN @{list}
     log ${i}
     log end

    注意::FOR ,其中的:用于与一般关键字做区分,对于循环结构体内的每一行,使用 作为改行的行首关键字

    6.Evaluate 

     通过它可以使用 Python 语言中所提供的方法。

    *** Test Cases ***
    case6
    ${d} Evaluate random.randint(0,100) random      #变量  关键字  调用python方法  方法所在库
    log ${d} ${path}

    7.catenate 

    8.collection库

    *** Settings ***
    Library Collections
    *** Test Cases ***
    case8
    ${dict} Create Dictionary a 1 b 2 c 3 #创建字典
    ${items} Get Dictionary Items ${dict} #获取字典中的key和value
    log ${items}
    ${key} Get Dictionary Keys ${dict} #获取字典中的key
    log ${key}
    ${value} Get Dictionary Values ${dict} #获取字典中的value
    log ${value}
    ${v} Get From Dictionary ${dict} b #获取字典中key所对应的value
    log ${v} 

    9、资源文件

    • 在测试套件文件中定义关键字的问题
      • 只能在本测试套件中有效,无法共享给其他测试套件使用
    • 使用资源文件
    • 资源文件其实就是RF层面的库文件
      • 里面可以包含用来共享的变量和关键字
      • 资源文件的格式基本也和测试套件文件格式类似(只是不含测试用例)
    • 资源文件的引用Resource

    Resource 后可以跟绝对路径也可以用相对路径(相对于当前文件所在的目录),但文件名必须要带后缀。
    如果同级目录下没有,就会去path路径下寻找。

    *** Settings ***
    Library  SeleniumLibrary
    Resource  rc.robot

    10.导入扩展库

    1).导入python库-变量

    • 将变量或关键字封装到python文件中
    •  RF***settings***中生命变量文件(以下例子,两文件在同一路径下)

        python文件引用时可以使用绝对路径也可以使用相对路径,建议使用相对路径

        使用相对路径的时候,RF搜索规则和资源文件搜索规则一样:先搜索当前目录下该python文件是否存在,没有的话则根据path路径查找

        

        

    2).python模块作为测试库

    • 将变量或关键字封装到python文件中(可封装成类或直接封装为方法)
    •  RF***settings***中生命变量文件(以下例子,两文件在同一路径下)

        

        

    注意:当文件名和类名不一样时,如文件名为a,类名为b,方法为c(同一路径下)

    ***settings***

    library   a.b

    ***test case***

    ${a}  a.b.c

    11.注释

      使用关键字comment或#

    四、selenium2Library中的关键字

    *** Test Cases ***
    case9
        Open Browser        https://www.baidu.com/      Firefox     #启动浏览器,浏览器为空时,默认启动firefox
       
    #   go to               https://mail.qq.com/                    #跳转到某个网页
    #   go back                                                     #返回
    #    Maximize Browser Window                                    #窗口最大话
        ${width}    ${height}       Get Window size                 #获取窗口大小
        log     ${width} ${height}
        ${title}    get title                                       #获取窗口title信息
        log     ${title}
        ${attribute}    get element attribute   id=kw   name        #获取元素属性
        log     ${attribute}                                        #添加cookie
        add cookie      mark    dhs
        ${all_cookies}       get cookies                            #获取所有cookies
        log     ${all_cookies}
        ${cookie}   get cookie        BAIDUID                 #根据key_name获取cookie值
        log     ${cookie}
        ${result}   should contain      ${title}        百度一下,你就知道       #验证是否包含
        log     ${result}
    #    delete cookie       mark                                    #根据key_name删除cookie值
    #    delete all cookies
    #    get text       id=                                         #获取元素文本信息
    #    input text      id=kw      robotframework                  #文本输入关键字    定位方式    输入的文本
    #    input text      name=wd      robotframework
    #    input text      Xpath = //*[@id='kw']    robotframework
        input text      css = #kw    robotframework
        wait until page contains element    css = #kw   5   can't find element      #关键字 元素 等待时长 错误提示 类似于selenium中的显示等待
    #   click element   id=                                         #点击元素
        click button    id=su                                       #点击按钮
    #    select from list by value                                  #下拉框选择
    #    execute javascript      js语句                               #执行js语句
    #    Close Browser                                               #关闭当前浏览器
    #   Close All Browser                                           #关闭所有浏览器
    case10
        open browser    https://mail.163.com/
        sleep   2
        select frame        xpath=                      #进入表单
        unselect frame                                  #退出表单
    • Should Be Equal
    • Should Be ...
    • Should Be True
      1. 字符串时  should be true'${str}'=='str'
      2. 数字  should be true  ${value}==value
    • convert to interger 转换为整数

    • convert to Number 转换为浮点数

    • ${33} 直接传数字

    五、各个级别的set up

      suite setup/teardown:在suit套件中只执行一次

      test setup/teardown:每个case执行前都会执行一次

      [setup/teardown]:属于case级别,每个case执行前都会执行一次,当同时存在test setup/teardown和[setup/teardown]时,执行[setup/teardown];

      

    六、关键字驱动示例

    *** Settings ***
    Library     Selenium2Library
    
    Test Setup    open browser    ${url}
    Test Teardown      close browser
    
    *** Variables ***
    ${url}      http://xxxxx
    ${correct_acc}      admin
    ${correct_pwd}      admin
    
    *** Keywords ***
    login_failed
        [Arguments]     ${account}      ${password}
    #    open browser    ${url}
        input text      id=id_username      ${account}
        input text      id=id_password      ${password}
        click button    id=login_submit
        sleep   2
        ${result}       get text    xpath=.//*[@id='content']/div
        should contain      ${result}    Invalid Username or Password, please try again.
    *** Test Cases ***
    #casename                      username                pwd
    case1:pwd_error
        [Documentation]            passworderror
        login_failed               ${correct_acc}          123
    case2:acc_error
        login_failed               123                     ${correct_pwd}
    case3:pwd_acc_error
        login_failed               123                     123
    case4:pwd_emty
        login_failed               ${correct_acc}          ${empty}
    case5:acc_emty
        login_failed               ${empty}                ${correct_pwd}
    case6:acc__pwd_emty
        login_failed               ${empty}                ${empty}
  • 相关阅读:
    jQuery 核心
    Visual Studio 文件没发布出来
    冷门JS技巧
    项目发布: error CS0103: 当前上下文中不存在名称“*****”
    jQuery编程的最佳实践
    HTML5中类jQuery选择器querySelector的使用
    html dl dt dd标签元素语法结构与使用
    EF Code First 更新数据库, 数据库迁移
    ASP.NET MVC中的拦截器
    C#Linq中的Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods,skip,take,takewhile,skipwhile,编译查询等
  • 原文地址:https://www.cnblogs.com/dhs94/p/10913485.html
Copyright © 2011-2022 走看看