Robot Framework & BDD 入门

一、概念介绍

什么是Robot Framework

Robot Framework (以下简称RF),不是工具,是基于Python的开源的通用的自动化测试框架,支持关键字驱动、数据驱动和行为驱动(BDD),遵守Apache License 2.0协议。因为RF的灵活性和可扩展性,所以它很合适用于测试具有多种接口的复杂软件:用户接口,命令行,web service,编程接口等。RF的测试用例和配置使用HTML、TXT、Robot等格式文件进行编辑,html是比较常用的一种格式,比较喜欢Robot格式,采用表格的形式编辑。RF提供很多的扩展库供使用,可以参考RF的官网:https://robotframework.org/。常用库的中文说明可以参考https://www.cnblogs.com/yinrw/p/9449244.html

常用库介绍

 

  • Builtin库:由于RF没有像别的高级语言那样提供类似if-else-while等内置关键字来实现各种逻辑功能,但是为了让用户能实现简单的逻辑功能,所以提供了BuiltIn库。同时BuiltIn库中还封装了很多常见方法和能够控制RF运行状态的关键字。
Evaluate 关键字
 Should 系列关键字 
Convert To系列关键字 
Run keyword系列关键字 
For Loop关键字 
Wait Until Keyword Succeeds关键字

 

  • Collections库:处理列表和字典的库。
  • String库:用于处理字符串并验证它们的内容的库,用于生成、修改和验证字符串。

驱动方式

  • 关键字驱动

关键字驱动是RF中最好理解、最好实现和最易读的一种驱动方式。测试人员可以将一些通用的逻辑封装到关键词库中,即使是业务员也可以很快速地编写自动化测试用例。

> 关键词库示例 <

 

*** Settings ***
Resource          pubVariables.robot
Library           Collections

*** Keywords ***
genInvoketxParams
    [Arguments]    ${caCertHolder}    ${caCertHolder}    ${from}    ${to}    ${certContractAddr}    ${args}
    ...    ${certid}
    ${params}=    Create List    ${caCertHolder}    ${caCertHolder}    ${from}    ${to}    ${certContractAddr}
    ...    ${args}    ${certid}    0
    [Return]    ${params}

newAccount
    ${params}=    Create List    ${pwd}
    ${respJson}=    sendRpcPost    personal_newAccount    ${params}    newAccount
    Dictionary Should Contain Key    ${respJson}    result
    [Return]    ${respJson["result"]}

transferPtnTo
    [Arguments]    ${to}
    ${params}=    Create List    ${tokenHolder}    ${to}    ${amount}    ${fee}    ${null}
    ...    ${pwd}
    ${respJson}=    sendRpcPost    ${transferPTNMethod}    ${params}    transferPTN
    Dictionary Should Contain Key    ${respJson}    result

 

> 关键词库调用示例 <

 

*** Settings ***
Resource          setups.robot
Library           Collections

*** Test Cases ***
transferGasToken
    queryTokenHolder
    newAccounts
    transferGasTokenToNewUsers

*** Keywords ***
transferGasTokenToNewUsers
    # transfer gas token WWW to Alice
    transferPtnTo    ${Alice}
    wait for transaction being packaged
    ${balance}=    getBalance    ${Alice}
    Should Be Equal    ${balance}    ${amount}
    # transfer gas token WWW to Bob
    transferPtnTo    ${Bob}
    wait for transaction being packaged
    ${balance}=    getBalance    ${Bob}
    Should Be Equal    ${balance}    ${amount}
    # transfer gas token WWW to Carol
    transferPtnTo    ${Carol}
    wait for transaction being packaged
    ${balance}=    getBalance    ${Carol}
    Should Be Equal    ${balance}    ${amount}

 

说明:在RF中,测试用例的执行顺序和文件夹、文件的先后顺序有关。所以,如果测试用例前后有依赖关系可以使用01、02等标号进行标记顺序,且同一robot文件下,测试用例的执行顺序和其先后顺序相关,如下图所示。

  • 数据驱动

数据驱动测试是从数据文件(如Excel文件、文本文件、XML文件或数据库等)中读取测试数据,然后通过变量传入事先编写或录制好的测试脚本中,这些变量既可传递测试输入数据也可传递测试输出的验证数据。测试数据只出现在数据文件中,测试脚本负责测试逻辑业务过程、测试状态以及数据文件读取,因此,测试数据和测试脚本是分开存放的。数据文件中的每一行表示一组测试数据,通过循环遍历数据文件中的每一行,将数据逐一注入到相同的测试流程进行反复的测试验证。(来源:https://www.cnblogs.com/loleina/p/5379869.html

在RF中为了实现数据驱动引入了“模板”的概念。这种驱动方式是为了减少测试人员的许多重复动作。这种驱动模式一般用于需要同时测试正常和异常操作正确性情况的验证,类似于黑盒测试,比如计算操作,基于横向构造不同的测试数据输入来判断不同的测试结果,这种行为就可以封装为模板。示例如下。

 

*** Settings ***
Test Template     Calculate
Library           CalculatorLibrary

*** Test Cases ***    Expression    Expected
Additions             12 + 2 + 2    16
                      2 + -3        -1

Substractions         12 - 2 - 2    8
                      2 - -3        5

Multiplication        12 * 2 * 2    48
                      2 * -3        -6

Division              12 / 2 / 2   3
                      2 / -3        -1

Calculation error     [Template]    Calculation should fail
                      kekkonen      Invalid button 'k'.
                      ${EMPTY}      Invalid expression.
                      1 / 0         Division by zero.

*** Keywords ***
Calculate
    [Arguments]    ${expression}    ${expected}
    Push buttons    C${expression}=
    Result should be    ${expected}

Calculation should fail
    [Arguments]    ${expression}    ${expected}
    ${error} =    Should fail    C${expression}=
    Should be equal    ${expected}    ${error}

 

  • 行为驱动:参考“什么是BDD”一节。

什么是BDD

BDD是行为驱动开发(Behaviour-driven Development),其主要目的让敏捷研发团队尽可能理解产品经理或业务人员的产品需求,并在软件研发过程中及时反馈和演示软件产品的研发状态,让产品经理或业务人员根据获得的产品研发信息及时对软件产品特性进行调整。BDD帮助敏捷研发团队把精力集中在识别、理解和构建跟业务目标有关的产品特性上面,并让敏捷研发团队能够确保识别出的产品特性能够被正确设计和实现出来。

BDD的软件研发过程如下:

1、产品经理(业务人员)通过具体的用户故事使用场景来告诉软件需求分析人员他(她)想要什么样的软件产品。使用软件产品的使用场景来描述软件需求可以尽可能的避免相关人员错误理解软件需求或增加自己的主观想象的需求。

2、软件需求分析人员(BA)和研发团队(研发人员、测试人员)一起对产品经理(业务人员)的用户故事进行分析,并梳理出具体的软件产品使用场景举例,这些场景举例使用结构化的关键字自然语言进行描述,例如中文、英文等。

3、研发团队使用BDD工具把用户故事场景文件转化为可执行的自动化测试代码,研发人员运行自动化测试用例来验证开发出来的软件产品是否符合用户故事场景的验收要求。

4、测试人员可以根据自动化测试结果开展手工测试和探索性测试。

5、产品经理(业务人员)可以实时查看软件研发团队的自动化测试结果和BDD工具生成的测试报告,确保软件实现符合产品经理(业务人员)的软件期望。

---------------------

作者:时间牧人

来源:CSDN

原文:https://blog.csdn.net/winteroak/article/details/81585299

版权声明:本文为博主原创文章,转载请附上博文链接!

而BDD测试就是测试人员使用BDD工具(常用的是Cucumber)将其转化为可以运行的验收测试说明文档,也就是自动化测试案例。有兴趣的同学可以自行去了解Cucumber的语法和示例。

在RF中通过Given-When-Then仍然可以实现BDD测试,示例如下:

 

*** Settings ***
Library           CalculatorLibrary

*** Test Cases ***
Addition
    Given calculator has been cleared
    When user types "1 + 1"
    and user pushes equals
    Then result is "2"

*** Keywords ***
Calculator has been cleared
    Push button    C

User types "${expression}"
    Push buttons    ${expression}

User pushes equals
    Push button    =

Result is "${result}"
    Result should be    ${result}

 

二、环境和版本

  • 操作系统
    • windows 10
  • 软件版本(python、RF的版本与Travis上ubuntu的版本相对应)
    • Python 2.7.12 (RF是基于python实现)
    • Robot Framework 2.8.5

三、Windows10上RF环境搭建

可以参考姚齐新Viki文档:

http://39.105.202.191:8090/pages/viewpage.action?pageId=5440597

也可以参考网上的博文:

https://blog.csdn.net/zxy987872674/article/details/54909335

四、RIDE使用说明

  • 新建测试用例

一个RF的case不管里面实际跑了多少个测试用例,只要一个失败,就是全部失败状态。结合上述几种驱动方式,在RF内测试用例的管理有2种形式:

      第一:一个suit 就是一个接口,一个case就是一条测试用例。

      第二: 一个suit是一个模块,一个case是一个接口。(未作深入研究)

 

  • 编辑测试用例

  • 运行测试用例

 

五、Travis上部署RF测试用例

 

script:
    - # 将shell下面的语句输入即可,顺序执行
    - python -m robot.run -d ${BDD_LOG_PATH}/${CREATE_TRANS_DIR} -i normal ./testcase/createTrans;

 

-d: 指定输出路径

-i:指定执行包含tag的测试用例

Robotframework⼊门教程(⼀) 最近⼯作中⽤Robot Framework框架来做⾃动化,所以,花时间学习了⼀下,⽹上好的⽂档不多,⼤多都是复制粘贴如何安装环境。要么就是介绍了⼀堆RIDE 的界⾯,活活把这么强⼤的⼀个⼯具讲成了个photoshop,我⽬前⽤了1个多⽉,这个⼯具很强⼤,简单写两句。 ==安装== ⾸先其实RIDE是个好⼯具,但是安装起来真⼼费劲,当时我的MAC上安装的时候google了两天,⼀个问题接⼀个问题。 我这边呢就不⽤RIDE了,想⽤呢⾃⼰想辙安去。 安装命令: pip install robotframework ==第⼀个testcase== RF的特点什么的就不多说了,⽹上有的是,撸起袖⼦就是⼲。 新建demo.robot⽂件,内容如下。 *** Test Cases *** First Case Log Hello World! warn Second Case ${res} Evaluate 1+2+3 Should Be Equal ${res} 6 Third Case ${res} Evaluate &#39;i&#39;*3 Length Should Be ${res} 运⾏ robot demo.robot。将得到如下 上⾯的例⼦有三条case,第⼀条调⽤内置关键字Log, 第⼀个参数是&quot;Hello World! &quot; ,第⼆个参数是&quot;warn&quot;。就是简单打印⼀条log,后⾯的是log的等级,默 认输出info以上的log到console,截图中可以看到first case中打印了 Hello World!等级为WARN。 第⼆条case,调⽤内置关键字Evaluate,参数是&quot;1+2+3&quot;,结果赋值给变量res(RF的语法是⽤$和⼤括号代表标量变量,还有其他类型的变量以后再说)然后调 ⽤Should Be Equal校验结果是否等于6,因为默认是字符串格式,所以second case 执⾏结果是FAIL。 第三条case,和第⼆条类似,同样调⽤Evalutate 赋值给变量res为&quot;iii&quot;,校验变量长度为3,执⾏结果为PASS。 最后三⾏显⽰这次执⾏结果⽣成的⽂件,output.xml,log.html,report.html。打开log⽂件如下,结果报告有什么优点就不说了,⾃⼰去看。output.xml先放放以后 再说。 前⾯说过RF中默认的都是格式是String,那么怎么给关键字传其他的类型,答案是⽤变量。修改second case如下: Second Case ${res} Evaluate 1+2+3 Should Be Equal ${res} ${6} 再次执⾏robot demo.robot 这次的结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值