RobotFramework测试框架(2)-测试用例

创建测试数据

测试数据语法

这里的测试数据就是指的测试用例。

测试文件组织

测试用例的组织层次结构如下:
在测试用例文件( test case file )中建立测试用例
一个测试文件自动的建成一个包含了这些测试用例的测试集( test suite
一个包含多个测试用例文件( test case file )的目录构成更高级别的测试集,即这个测试集目录包含多个子测试集,而子测试集即是由测试文件创建而来。
一个测试集目录可以包含其他测试集目录,这种层次结构可以满足层嵌套的需要
测试集目录可以有一个特殊的初始文件( initialization file
此外,还有:
测试库( Test libraries )包含最低级别的关键字( keywords
资源文件( Resource files )包含变量和更高层次的用户自定义关键字
变量文件( Variable files )可以提供比资源文件更灵活的方式创建变量

Test data sections

 测试用例文件包含这些部分。

支持的文件格式

Suite文件通常使用.robot扩展名,但哪些文件可以被解析是可以配置的。Resource files 也可以使用 .robot 扩展名,但使用专用的 .resource 扩展名是 建议,并可能在未来强制执行。

创建测试用例

测试用例语法

机器人框架用户指南 (robotframework.org)

基础语法:

Test cases是由关键字在test case sections中组织起来的。 关键字可以从 test libraries 或者 resource files中导入, 或者在测试文件中在 keyword section 中定义

Test case section中的设置:

[Documentation] Used for specifying a test case documentation.

[Setup], [Teardown] Specify test setup and teardown.

[Tags] Used for tagging test cases.

[Template] Specifies the template keyword to use. The test itself will contain only data to use as arguments to that keyword.

[Timeout] Used for setting a test case timeout. Timeouts are discussed in their own section.

*** Test Cases ***
Test With Settings
    [Documentation]    Another dummy test
    [Tags]    dummy    owner-johndoe
    Log    Hello, world!

标记测试用例

方法一:Test Tags setting in the Settings section

方法二:[Tags] setting with each test case

*** Settings ***
Library     SeleniumLibrary
Test Tags   smoke
*** Test Cases ***
Search keywords in baidu
    [Tags]  smoke
    Open Browser    url=https://www.baidu.com    browser=edge
    Input Text    //input[@id="kw"]    周杰伦
    Click Element    //input[@id="su"]
    Sleep    5
    Close Browser

 Test Setup和Test Teardown

test setup在test case之前执行,test teardown在test case之后执行。在RF中,setup和teardown只是有参数的关键字。

test teardow在两方面特殊:首先,在测试用例失败后,teardown仍会执行,所以可以用来进行清理活动,无论测试结果是什么。另外,teardown中所有的关键字都会执行,即使其中的一个关键字执行失败。失败仍继续功能也可以在一般的关键字中使用,但是在teardown中这个功能是默认开启的。

最简单的在测试用例中使用setup和teardown是在Setting部分使用Test Setup和Test Teardown设置。在单个test case中也可以使用[Setup]和[Teardown],并且可以覆盖setting部分中的设置。

*** Settings ***
Library     SeleniumLibrary
Test Setup
Test Teardown
*** Test Cases ***
Search keywords in baidu
    [Tags]  smoke
    [Setup]
    Open Browser    url=https://www.baidu.com    browser=edge
    Input Text    //input[@id="kw"]    周杰伦
    Click Element    //input[@id="su"]
    Sleep    5
    [Teardown]
    Close Browser

Test templates

在Robot Framework(RF)中,测试模板(Test Templates)是一种机制,它允许你为测试用例定义一个固定的测试结构,而测试用例本身则只需提供该结构中所需的具体数据或参数。这有助于在多个测试用例之间重用相同的测试逻辑,从而提高测试的可维护性和一致性。

使用测试模板,你可以创建一个包含多个测试步骤的模板,并在多个测试用例中引用这个模板。每个测试用例只需提供模板所需的具体数据,而无需重复编写相同的测试步骤。

测试模板的定义通常位于测试套件文件(.robot)的*** Settings ***部分,使用Test Template关键字进行指定。例如:

*** Settings ***  
Test Template    Some Template  
  
*** Test Cases ***  
Case 1  
    [Template]    arg1    arg2  
    Some value 1    Another value  
  
Case 2  
    [Template]    argA    argB  
    Value A    Value B  
  
*** Keywords ***  
Some Template  
    [Arguments]    ${arg1}    ${arg2}  
    Log    Starting test with ${arg1} and ${arg2}  
    # 其他测试步骤...


在上面的示例中:

  • Test Template Some Template 定义了一个名为 Some Template 的测试模板。
  • Case 1 和 Case 2 是两个测试用例,它们引用了 Some Template 测试模板。
  • 每个测试用例的 [Template] 设置指定了传递给模板的参数。
  • Some Template 关键字是模板的实现,它接收两个参数 ${arg1} 和 ${arg2},并包含实际的测试步骤。

当运行测试用例时,Robot Framework 会自动将每个测试用例的参数传递给 Some Template 关键字,并执行该关键字中定义的测试步骤。

测试模板的一个主要优点是,它允许你在多个测试用例之间共享相同的测试逻辑,同时保持测试用例的简洁和可读性。这尤其适用于那些包含多个相同步骤但使用不同数据的测试用例。通过使用测试模板,你可以减少代码冗余,提高测试的可维护性,并更容易地管理测试数据。

不同的测试用例模式

这里有几种不同编写用例的方法。测试用例是工作流( workflow )的描述,可以使用关键字驱动模式 (keyword-driven )也可以使用行为驱动模式( behavior-driven )。数据驱动模式可以在用变化的数据测试相同的工作流时使用。

创建测试集

RF的测试用例是使用test case section在suite file或者test case file中创建的。包含测试用例的文件即创建了test suite。(就test suite就是包含多个test case的文件)测试集没有测试用例个数的限制,但建议不要超过 10 个测试用例。

test suite的Setting section包含如下设置:

Name  Used for setting a custom suite name. The default name is created based on the file or directory name.

Documentation  Used for specifying a suite documentation.

Metadata Used for setting free suite metadata as name-value pairs.

Suite Setup, Suite Teardown  Specify suite setup and teardown.

*** Settings ***
Documentation
Metadata
Suite Setup
Suite Teardown
Library     SeleniumLibrary
Test Setup
Test Teardown
*** Test Cases ***
Search keywords in baidu
    [Tags]  smoke
    [Setup]
    Open Browser    url=https://www.baidu.com    browser=edge
    Input Text    //input[@id="kw"]    周杰伦
    Click Element    //input[@id="su"]
    Sleep    5
    [Teardown]
    Close Browser

Suite initialization files

在Robot Framework中,Suite Initialization Files(套件初始化文件)是用于执行测试套件开始前的一系列初始化步骤的文件。这些文件允许你在测试套件开始之前执行一些必要的设置,比如配置测试环境、登录到应用程序、打开数据库连接等。

Suite Initialization Files通常使用.robot文件扩展名,并且它们位于测试套件目录中。你可以使用*** Settings ***部分来定义初始化步骤,例如设置变量或导入资源文件。在*** Variables ***部分,你可以定义将在整个测试套件中使用的变量。此外,你还可以在*** Keywords ***部分定义一些只在初始化阶段使用的关键字。

下面是一个简单的示例,展示了Suite Initialization Files的基本结构:

*** Settings ***  
Suite Setup    Open Application  
Suite Teardown    Close Application  
  
*** Variables ***  
${SERVER_URL}    http://example.com/api  
  
*** Keywords ***  
Open Application  
    Log    Opening the application  
    # 这里可以添加打开应用的代码  
  
Close Application  
    Log    Closing the application  
    # 这里可以添加关闭应用的代码  
  
*** Test Cases ***  
# 这里定义具体的测试用例

在上面的示例中:

  • Suite SetupSuite Teardown分别定义了测试套件开始和结束时执行的关键字。在这个例子中,它们分别调用了Open ApplicationClose Application关键字。
  • *** Variables ***部分定义了一个变量${SERVER_URL},它可以在整个测试套件中使用。
  • *** Keywords ***部分定义了Open ApplicationClose Application这两个关键字,这些关键字包含了初始化测试环境的逻辑。

在实际使用中,Open ApplicationClose Application关键字会包含实际的代码来执行测试环境的初始化和清理工作。这些代码可能包括连接数据库、启动和停止应用程序、登录到系统等。

当Robot Framework运行测试套件时,它会自动执行Suite Initialization Files中定义的Suite SetupSuite Teardown关键字,确保在测试开始前和结束后执行必要的初始化和清理步骤。这有助于确保测试环境的一致性和可预测性,从而提高测试结果的可靠性。

Suite documentation

在Robot Framework中,Suite Documentation(套件文档)是用于描述测试套件内容、目的、设置和测试执行上下文的重要信息。尽管Robot Framework并没有专门提供一个格式化的位置来编写套件级别的文档,但是你可以在测试套件文件的开始部分使用注释和特殊关键字来提供这些信息。

通常,Suite Documentation包含以下内容:

  • 测试套件的目的和范围
  • 必要的环境设置和依赖项
  • 测试数据的来源和格式
  • 已知的限制和问题
  • 其他对理解和执行测试套件有帮助的信息
*** Settings ***
Documentation    An example suite documentation with *some* _formatting_.
...              Long documentation can be split into multiple lines.

测试集元数据

*** Settings ***
Metadata        Version            2.0
Metadata        Robot Framework    http://robotframework.org
Metadata        Platform           ${PLATFORM}
Metadata        Longer Value
...             Longer metadata values can be split into multiple
...             rows. Also *simple* _formatting_ is supported.

 Suite setup and teardown

*** Settings ***
Suite Setup
Suite Teardown

变量

Robot Framework User Guide

标量变量

列表变量

字典变量

用户关键字

Robot Framework User Guide

*** Keywords ***
Open Login Page
    Open Browser    http://host/login.html
    Title Should Be    Login Page

Title Should Start With
    [Arguments]    ${expected}
    ${title} =    Get Title
    Should Start With    ${title}    ${expected}

 位置参数

*** Keywords ***
One Argument
    [Arguments]    ${arg_name}
    Log    Got argument ${arg_name}

Three Arguments
    [Arguments]    ${arg1}    ${arg2}    ${arg3}
    Log    1st argument: ${arg1}
    Log    2nd argument: ${arg2}
    Log    3rd argument: ${arg3}

参数默认值

*** Keywords ***
One Argument With Default Value
    [Arguments]    ${arg}=default value
    [Documentation]    This keyword takes 0-1 arguments
    Log    Got argument ${arg}

可变数量参数

*** Keywords ***
Any Number Of Arguments
    [Arguments]    @{varargs}
    Log Many    @{varargs}

One Or More Arguments
    [Arguments]    ${required}    @{rest}
    Log Many    ${required}    @{rest}

Required, Default, Varargs
    [Arguments]    ${req}    ${opt}=42    @{others}
    Log    Required: ${req}
    Log    Optional: ${opt}
    Log    Others:
    FOR    ${item}    IN    @{others}
        Log    ${item}
    END

资源文件

Robot Framework User Guide

测试套件和测试套件初始化文件中的用户关键字和变量只能用于他们被创建的文件中,但是resource 文件提供了一种机制可以共享user keywords和variables。创建resource文件的语法和创建测试塔尖文件的语法一样。主要区别是resource文件不包含tests。

建议使用.resource用来做资源文件的扩展

*** Settings ***
Resource    example.resource
Resource    ../resources/login.resource
Resource    package/example.resource
Resource    ${RESOURCES}/common.resource

*** Settings ***
Documentation     An example resource file
Library           SeleniumLibrary
Resource          ${RESOURCES}/common.resource

*** Variables ***
${HOST}           localhost:7272
${LOGIN URL}      http://${HOST}/
${WELCOME URL}    http://${HOST}/welcome.html
${BROWSER}        Firefox

*** Keywords ***
Open Login Page
    [Documentation]    Opens browser to login page
    Open Browser    ${LOGIN URL}    ${BROWSER}
    Title Should Be    Login Page

Input Name
    [Arguments]    ${name}
    Input Text    username_field    ${name}

Input Password
    [Arguments]    ${password}
    Input Text    password_field    ${password}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/516879.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vulhub中Apache Solr 远程命令执行漏洞复现(CVE-2019-0193)

Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。此次漏洞出现在Apache Solr的DataImportHandler,该模块是一个可选但常用的模块,用于从数据库和其他源中提取数据。它具有一个功能&#…

【Android Studio】上位机-安卓系统手机-蓝牙调试助手

【Android Studio】上位机-安卓系统手机-蓝牙调试助手 文章目录 前言AS官网一、手机配置二、移植工程三、配置总结 前言 提示:以下是本篇文章正文内容,下面案例可供参考 AS官网 AS官网 一、手机配置 Android Studio 下真机调试 二、移植工程 Anro…

【Linux】第二个小程序--简易shell

请看上面的shell,其本质就是一个字符串,我们知道bash本质上就是一个进程,只不过命令行就是一个输出的字符串, 我们输入的命令“ls -a -l”实际上是我们在输入行输入的字符串,所以,如果我们想要做一个简易的…

通用开发技能系列:SQL基础学习

云原生学习路线导航页(持续更新中) 本文是 通用开发技能系列 文章,主要对编程通用技能 SQL基础 进行学习 1.数据库简介 1.1.数据库中的一些名称 DataBase:数据库 程序员只负责怎么维护存取数据,不管数据库是什么 DBA…

c#程序报错引用无效解决办法之一:检查引用的文件路径

直接右键然后打开本地 打开这个.csproj文件,直接对着路径看看里面的路径对不对。 一般是很多人一起开发,然后这个文件路径被推送上来的问题

考研经验与科目学习建议

前言 24考研刚刚结束,成功上岸,回想起刚开始的时候的迷茫,加上因为迷茫而被卖书的坑的几百块钱。感慨万千,所以决定写下这篇文章。回想当时,因为笔者零基础,加上作为一名专升本的学生,惶恐因为…

第十四届省赛大学B组(C/C++)子串简写

原题链接:子串简写 程序猿圈子里正在流行一种很新的简写方法: 对于一个字符串,只保留首尾字符,将首尾字符之间的所有字符用这部分的长度代替。 例如 internationalization 简写成 i18n,Kubernetes 简写成 K8s&#…

目标检测——车牌数据集

一、重要性及意义 交通安全与管理:车牌检测和识别技术有助于交通管理部门快速、准确地获取车辆信息,从而更有效地进行交通监控和执法。例如,在违规停车、超速行驶等交通违法行为中,该技术可以帮助交警迅速锁定违规车辆&#xff0…

机器学习模型:决策树笔记

第一章:决策树原理 1-决策树算法概述_哔哩哔哩_bilibili 根节点的选择应该用哪个特征?接下来选什么?如何切分? 决策树判断顺序比较重要。可以使用信息增益、信息增益率、 在划分数据集前后信息发生的变化称为信息增益&#xff0c…

MySQL 主从复制架构搭建及其原理

前言 系统的性能瓶颈一般出现在数据库上,以 mysql 为例,如果存在高并发的写请求,势必会有锁表,锁数据行的情况发生,这时候如果有读请求刚好访问到被锁的数据,那么读请求会阻塞,直到写请求处理完…

【C++ STL迭代器】iterator

文章目录 【 1. 迭代器的属性 】【 2. 不同容器支持的迭代器 】【 3. 迭代器的定义方式 】【 4. 实例 】4.1 定义方式:正向迭代器和反向迭代器4.2 迭代器属性:前向迭代、双向迭代、随机迭代4.2 迭代器的遍历方法4.3 auto关键字 自动指定迭代器定义类型 背…

C语言进阶课程学习记录-第21课 - 宏定义与使用分析

C语言进阶课程学习记录-第21课 - 宏定义与使用分析 宏定义的本质实验-字面量比较宏定义表达式实验-表达式有效性宏的作用域实验-作用域分析内置宏内置宏演示小结 本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程,图片全部来源于课程PPT,仅用于个人学…

蓝桥杯python组真题练习1

目录 1.单词分析 2.成绩统计 3.门牌制作 4.卡片 5.跑步训练 6.蛇形填数 7.时间显示 1.单词分析 1.单词分析 - 蓝桥云课 (lanqiao.cn) s list(input()) maxx 0 for i in s:num s.count(i)if num>maxx:sm imaxx numif num maxx:if ord(sm)>ord(i):sm i print…

ctypes 封装c语言

一&#xff0c;python与C类型对应关系 最左边一列的ctypes type&#xff0c;以替代C库中的各种类型。 二&#xff0c;不带参数的调用 1&#xff0c;target.c #include <stdio.h>void hello_world(){printf("hello downey!!\r\n"); } 2&#xff0c;执行命令…

基于Java,SSM,html,Vue在线视频播放管理系统网站设计

摘要 基于Java, SSM, HTML, Vue的在线视频播放管理系统网站设计是一个利用Spring框架、SpringMVC、MyBatis&#xff08;SSM&#xff09;和前端技术HTML与Vue.js实现的多功能Web应用。这个系统旨在为用户提供一个便捷、高效的平台来上传、管理和观看视频内容&#xff0c;同时兼…

吴恩达2022机器学习专项课程(一) 5.1 多元特征回归

问题预览/关键词 多元特征回归是什么&#xff1f;多元特征回归的符号多元特征回归的函数是&#xff1f;函数简化版 笔记 1.多元特征回归 从单一的输入特征&#xff08;如房子的大小&#xff09;扩展到多个输入特征&#xff08;如卧室数量、楼层、房龄&#xff09;。 2.多元…

Android java基础_类的继承_android 类继承(2)

运行结果&#xff1a;rootubuntu:/home/topeet/guyilian# javac Ext2.java rootubuntu:/home/topeet/guyilian# java Ext2 10 ustc **子类继承父类的方法和属性都可以进行覆写&#xff0c;我们在子类覆写父类的printInfo方法。**class Person { private int age; public void …

图像拼接——最小割准则提取拼接缝

一、最大流问题与Ford-Fulkerson算法介绍 二、最大流与最小割 显然,我们有对任意一个割,穿过该割的净流量上界就是该割的容量,即不可能超过割的容量。所以网络的最大流必然无法超过网络的最小割。最小割是指割的容量最小,最大流是指网络当中最大的净流量,简单的例子s是水龙…

深入浅出 -- 系统架构之微服务架构选型参考图

技术选型架构图 是一个用于展示项目中所采用的各种技术和组件之间关系的图表。 它通常包括以下几个部分&#xff1a; 1. 项目名称和描述&#xff1a;简要介绍项目的背景和目标。 2. 技术栈&#xff1a;列出项目中使用的主要技术和工具&#xff0c;如编程语言、框架、数据库…

47.函数基本概念和用法

目录 一.什么是函数 二.定义函数 三.函数调用 四.函数的声明 五.函数的分类 六.视频教程 一.什么是函数 每个C语言程序至少有一个函数&#xff0c;即主函数man函数。除了主函数以外&#xff0c;我们也可以自定义其他函数。 函数可以看作是某个功能的封装&#xff0c;而且…