RobotFramework接口测试方案

1. Robot FrameWork介绍

1.1 介绍

Robot Framework是用于验收测试和回归测试的通用测试自动化框架。它使用易于理解的表格数据语法,非常友好的实现了关键字驱动和数据驱动模式。它的测试功能可以通过使用Python或Java实现的测试库进行扩展,用户可以使用与创建测试用例相同的语法,从现有的关键字创建新的更高级别的关键字。

1.2 安装

在python环境下安装robotframework非常的简单,使用如下的命令即可,

    pip install robotframework

在python路径的Scripts文件夹下如(C:\Python35\Scripts),可以查看到如下三个程序,这三个程序都是robotframework的执行程序,同时也说明安装成功

image

1.3 优势

1. 与python语言可以很好的兼容,降低框架设计和用例编写的难度。   2. 支持关键字驱动和数据驱动模式,对两种设计模式体现的非常明显。   3. 内置库丰富,提供很多控制和操作的方法。   4. 扩展库AppiumLibrary、HTTPlibrary (Requests)、Selenium2Library,让robotframework可以在很多测试方法完成工作   5. 很多工具有rf插件,提供API接口,提供持续集成能力

1.4 运行测试和测试报告

1、写一个小的的demo来演示,robotframework是如何工作的。robotframework编写的是.txt文件,新建一个文件testsuite1.txt,在文件中写入如下语句

image

2、打开cmd命令行,在命令行中输入如下语句,回车

image

3、输出3个结果文件   report.html 测试报告    log.html 日志文件    output.xml 详细的输出信息

2. Robot FrameWork基本语法

2.1. 文件结构

项目—套件—用例—关键字 内部基本模块 与配置相关

*** Settings *** 与配置相关
Documentation 测试的文档说明
Library 测试导入的库
Suite Setup 执行测试套件前的关键字
Suite Teardown 执行测试套件后的关键字
Test Setup 执行测试用例前的关键字
Test Teardown 执行测试用例后的关键字
Test Tmplate 测试模板--数据驱动模式
针对相同的工作流,执行不同的输入数据
使用一个高级的用户关键字,定义工作流,然后使用不同的输入和输出数据
测试相同的场景每个测试中重复使用同一个关键字
Resourse 导入的外部资源文件---主要是关键字

测试套件中的公共变量

*** Variables ***
${变量名} 变量值

用例主体

 *** Test Case ***
    用例名
       [Documentation]
       [Tags]标签
       [Setup]
       [Teardown]
      关键字  参数

2.2. 变量

参考文档:https://blog.csdn.net/huapingqi/article/details/81140996

比起Python控制变量,RF会很方便,所以我们必须熟悉它,使用它 如果对比Python来学的话,会事半功倍 变量的种类 变量名包含变量种类标识符($, @, &, %),大括号({,})和变量名。大括号是强制使用的。 Robot Framework 中的变量和关键字相似,是大小写敏感,但对空格和下划线是忽略的。

1. 标量Scalar 标量是指${},这个有点像shell中的变量引用

赋值:${a}    Set variable    5
引用就简单的${a}就可以引用
如:Log    ${a}

DemoSuite.txt

*** Test Cases ***
case1
    [Documentation]    标量Scalar赋值和引用
    [Tags]    Scalar
    #赋值
    ${a}    Set variable    5
    #引用
    log    ${a}
case2
    [Documentation]    标量Scalar,作为返回1个值
    [Tags]    Scalar
    #赋值
    ${a}    Set variable    HelloWorld
    ${ret} =    Return One Value    ${a}
    log    ${ret}

case3
    [Documentation]    标量Scalar,作为返回多个值
    [Tags]    Scalar
    ${a}    ${b}    ${c} =    Return Three Values
    @{list} =    Return Three Values
    ${scalar}    @{rest} =    Return Three Values
    log many  ${a}    ${b}    ${c}
    log many  @{list}
    log   ${scalar}
    log many  @{rest}

*** Keywords ***
Return One Value
    [Arguments]    ${arg}
    ${value}    Set variable    ${arg}+${arg}
    [Return]    ${value}

Return Three Values
    [Return]    foo    bar    zap

2. 列表List 用@{}表示,在python中列表赋值方式[a, b]

赋值:

@{List1}  Create List user name password
@{L2}   1 2 3 4
@{L3}    Set variable    a    b

取值及应用: TestSuite2.txt

*** Test Cases ***
case1
    [Documentation]    标量list赋值和引用
    [Tags]    list
    #赋值
    @{L1}  Create List     user     name     password
    @{L2}    Set variable    a    b    c
    #单个元素的取用
    log    @{L1}[0]
    log    @{L1}[1]
    log    @{L1}[2]
    #在循环中使用
    :FOR    ${x}    IN    @{L2}
    \    log    ${x}

3、字典Dict 和Python里的定义一致, key=value格式 TestSuite3.txt

*** Test Cases ***
case1
    [Documentation]    标量dict赋值和引用
    [Tags]    list
    #赋值
    &{D1}    Create Dictionary    student=Tom    age=22
    #单个元素的取用
    log    &{D1}[student]
    log    &{D1}[age]

4. 创建变量表 Variables.txt文件

*** Variables ***
${a}    hello world
@{List1}    one    two     three    four
&{D1}    user=username    password=password

可以用

Resource     ../../../../config_file/Data.txt

导入到工程中 5. 全局变量 DemoSuite4.txt

*** Test Cases ***
case1
    [Documentation]    设置全局变量
    [Tags]    Set Suite Variable
    #赋值
    ${code}    Set variable    100
    Set Suite Variable    ${code}
case2
    [Documentation]    使用全局变量
    [Tags]    Set Suite Variable
    #赋值
    log    ${code}

在case1中创建的变量在case2中使用

2.3. 基础语法

1. 流程控制语句

*** Test Cases ***
case1
    [Documentation]    流程控制语句
    [Tags]
    ${smlie}    Set variable    999
    run keyword if     ${smlie}== 999    log    HelloWorld

2. 循环语句

*** Test Cases ***
case1
    [Documentation]    循环语句
    [Tags]
    :FOR    ${index}    IN RANGE    5
    \    log    ${index}

2.4. 扩展库

Http Requests selenium2Library appium

2.5. 开发用户自定义关键字

利用Robot Framework编写测试用例,往往需要开发自己的关键字,有的关键字需要通过自己编写python代码来实现。这在rf中,就需要自己定义python库。这个过程其实不复杂,本文来介绍下。   1. 在python安装目录下的 Lib\site-packages 目录下 新建一个目录,目录名就是库名,如 NewLibrary   2. 在新建的NewLibrary目录下创建一个python文件,任何合法的文件名即可,扩展名为py。 如:myclass.py其内容如下

class MyClass(object):
    def __init__(self):
        pass

    def printMsg(self,msg):
        print "hello "+msg

上面代码定义了一个python类,其中除构造方法 init 外,还定义了一个printMsg方法,该方法其实就是rf中的关键字,可以直接在rf中使用。下面我们介绍。   3. 在新建的NewLibrary目录下创建 init.py 文件,文件名必须固定这样。该文件的功能,就是把关键字类暴露出来,让rf能知道。init.py 其内容如下:

from myclass import MyClass
class NewLibrary(MyClass):
    ROBOT_LIBRARY_SCOPE = 'GLOBAL'

4. 通过前面三个步骤,一个最简单的自定义的NewLibrary库就创建好了,在rf工具中就可以使用了     1)先要导入 NewLibrary 库     2)使用关键字printMsg。需要说明的是,在rf中引用时,既可以写成 printMsg,也可写成 print msg。一般习惯用空格把单词分开。因为rf关键字不区分大小写。

*** Settings ***
Library    NewLibrary
*** Test Cases ***
successsd
    print msg    god
    printMsg    ss
    printmsg    yy

5、增加新的关键字 增加新的关键字很简单,只需在MyClass类中增加新的方法即可。如:

class MyClass(object):
    def __init__(self):
        pass

    def printMsg(self,msg):
        print "hello "+msg

    def join_info(self,a,b):
        print a+b

这里定义了 join_info方法。在rf中使用时,可以写成 join info 用空格分开。

上面介绍了最简单的自定义模块,虽然简单,但实际可以满足大部分自己开发的需求了。

3. 接口测试和用例设计

参考资料https://blog.csdn.net/weixin_42273775/article/details/81868184

image

对于如何进行接口测试,可以参考上面的资料,本文的下面部分开始讨论如何使用robotframework,来完成接口的功能测试,也就是图中标红色的部分 某一个接口的用例编写如下

image

将用例分成3个等级,Level1、Level2、Level3,Level3优先级最高   Level1:最能反应该接口功能的测试用例   Level2:参数的正常校验和异常校验   Level3:字段是否必传

4. Pycharm安装Robot FrameWork插件

我们已经知道编写roborframework脚本,其实就是编写.txt文件,那么有了功能强大的编辑器的辅助,会让工作事半功倍,下面讲述如何在Pycharm安装Robot FrameWork插件。   1. 下载IntelliBot   2. 打开PyCharm,单击 左上角file→settings →Plugins → 【install plugin from dink】

image

3. 配置文件类型   点击File>点击setting>点击editor>点击file types,点击右侧的+号配置一下文件类型即可

image

4. 至此已经可以在pycharm中编辑脚本了,但是还不能进行脚本的执行,接下来配置如何执行测试用例 点击File>点击setting>点击Tools>点击External tools,配置执行测试套件,可以执行一个测试套件内的所有case。

Robot Run TestSuite
-d ../../../../report $FileName$
$FileDir$

image

5. 添加执行单个用例的配置

Robot Run SingleTestCase
-d ../../../../report -t *$SelectedText$* ./ $FileName$
$FileDir$

image

6. 执行实例

image

5. rob框架介绍

下面开始介绍具体的功能 github 地址https://github.com/shengtangcike/robframe

image

5.1. 辅助工具生成测试用例

在用例设计阶段,建议在excel文件中设计测试用例,尤其是复杂的情况。excel文档结构如下

image

使用bin目录下面generatecase.py文件中的Generatecase类将excel中设计的case生成到.txt 文件中。txt文件才是我们真正需要的文件,生成的文件如下

image

5.2. 环境切换

目前编写的rob_frame框架需要兼容测试环境和自动化环境,自动化环境的脚本执行每日定时构建,而测试环境的脚本在代码构建完成之后执行,达到一个冒烟测试的效果。   1. 使用config_file目录下的env.ini和Data.txt文件来控制环境切换   2. 在使用python rob.py –e test/auto XXXXX执行时,会根据传入的test/auto值,重置env.ini和Data.txt文件,来达到控制环境切换的目的。

5.3. 用户关键字lib

将lib文件放到PYTHONPATH中,目的是用户自定义关键字放在工程目录文件lib中,同时要pybot.bat能够在任何位置找到这些.py文件,也就是说把这些.py文件添加到python的默认路径下   方法:在site-packages添加一个路径文件,如mypkpath.pth,必须以.pth为后缀,写上你要加入的模块文件所在的目录名称就是了。   lib文件中包含了目前所有的关键字

5.4. 扩展断言

对于一些接口返回信息的检查比较复杂,光靠是否有返回信息已经不足以判断,例如交易流水,需要检查倒叙排序,还有是否为同一类型,这种情况下可以通过编写python脚本实现断言控制。 ex.在HttpApiLib.py这个文件中,编写关键字对self.r.text进行处理...待完善

5.5. 执行报错的脚本

随着不断的持续集成,编写的测试用例不断的增加,这种情况下执行一轮测试用例会需要大量的时间,而后考虑到能否将报错的脚本单独执行呢?   具体实现是,将报告中的xml中的信息读取出来,获取是那些txt文件报错然后可以按照下面的方法执行。。。下面会说到   在用例执行完成之后,可以读取xml文件从中筛选出报错的txt文件,然后按照图中的方法,执行所有的报错的txt文件,来做到将错误的txt文件重新执行一遍而不需要全部执行

下面的ex说明了方法的可行性

image

6. 配置Jenkins

6.1. linux下安装部署Jenkins

1、 安装JDK 2、 安装Tomcat 解压tar -zxvf apache-tomcat-8.0.53.tar.gz 放在usr/local/tomcat下所以要创建tomcat文件夹并将解压文件移动到tomcat下

mkdir /usr/local/tomcat
mv apache-tomcat-8.0.53 /usr/local/tomcat/

进入tomcat安装bin目录并启动

cd /usr/local/tomcat/apache-tomcat-8.0.53/bin/

启动 ./startup.sh 关闭 ./shutdown.sh 成功启动后浏览器输入http://192.168.1.31:8090/ 修改端口 查看tomcat是否启动

ps -ef |grep tomcat

假设tomcat所在目录为/usr/local/apache-tomcat/ 1、打开tomcat配置文件 #vi /usr/local/apache-tomcat/conf/server.xml 2、打开Tomcat配置文件之后按 /8080 快速检索 3、修改端口,按 i 进行,将8080 修改为 80 4、按:wq 保存并退出 5、 重启tomcat 3、安装Jenkins 首次安装启动Jenkins, jenkins初次登陆卡在SetupWizard界面 赋777权限给jenkins,并用谷歌浏览器打开,(本人亲测ok) admin 123456

6.2. 安装Jenkins的robot framework插件

1、进入jenkins主页面,系统管理-管理插件-可选插件;在过滤栏输入“robot”,选择安装如下图的插件【Robot Framework plugin】

image

2、构建后的操作,选择“Publish Robot Framework test results”;

*Directory of Robot output 填一个本地路径,要根据你的output文件放在哪里,可以不填

*Thresholds for build result 测试用例执行成功率和通过率的设置,如80%和100%

image

image

6.3. 执行构建

1、qtw_interfacetest_autoenv_NoSendEmail

(1)测试环境自动化环境 (2)执行全部用例Level1/Level2/Level3 (3)不发送邮件

python /root/dengshaoke/lineDownlineUP/hyxd/rob_frame/bin/rob.py -e auto -p pybot -d /root/dengshaoke/lineDownlineUP/hyxd/rob_frame/report -f /root/dengshaoke/lineDownlineUP/hyxd/rob_frame/qutouwang/App

2、qtw_interfacetest_testenv_NoSendEmail (1)测试环境qtw测试环境 (2)在去投网2.0测试//qtw_invest_api_test执行构建机构后进行该构建 (3)sleep 600s延时构建,等待系统启动 (4)执行Level1/Level2/Level3全部用例 (5)不发送邮件

sleep 300

python /root/dengshaoke/lineDownlineUP/hyxd/rob_frame/bin/rob.py -e test -p pybot -d /root/dengshaoke/lineDownlineUP/hyxd/rob_frame/report -f /root/dengshaoke/lineDownlineUP/hyxd/rob_frame/qutouwang/App

3、qtw_interfacetest_autoenv_SendEmail (1)测试环境自动化环境 (2)定时构建,每日执行 (3)执行用例等级为Level1的用例

python /root/dengshaoke/lineDownlineUP/hyxd/rob_frame/bin/rob.py -e auto -m YES -p pybot -d /root/dengshaoke/lineDownlineUP/hyxd/rob_frame/report -f /root/dengshaoke/lineDownlineUP/hyxd/rob_frame/qutouwang/App

4、qtw_interfacetest_error_case

(1)执行上次构建报错的case

6.4. 即时构建

在构建完成【去投网2.0测试】下面的qtw-invest-api-test任务后,会即时构建qtw_interfacetest_testenv_NoSendEmail,达到冒烟测试的目的,有问题及时反馈出来。

java -jar jenkins-cli.jar -s http://192.168.1.31:8090/jenkins/ build qtw_interfacetest_testenv_NoSendEmail --username admin --password 123456

参考资料:https://www.cnblogs.com/honeybee/p/6525902.html

1、下载jenkins-cli

jenkins-->系统管理-->Jenkins CLI:如下图

image

2、命令行执行

[http://192.168.1.31:8090/jenkins/](https://links.jianshu.com/go?to=http%3A%2F%2F192.168.1.31%3A8090%2Fjenkins%2F)

查看jenkins-cli的帮助

java -jar jenkins-cli.jar -s [http://192.168.1.31:8090/jenkins/](https://links.jianshu.com/go?to=http%3A%2F%2F192.168.1.31%3A8090%2Fjenkins%2F) help

查看job列表

java -jar jenkins-cli.jar -s [http://192.168.1.31:8090/jenkins/](https://links.jianshu.com/go?to=http%3A%2F%2F192.168.1.31%3A8090%2Fjenkins%2F) list-jobs

6.5. 其他遇到的问题

1、Jenkins打不开robotframework测试报告,报Opening Robot Framework report failed错误

参考资料:https://blog.csdn.net/huashao0602/article/details/53925492

image

2、Jenkins开放用户注册和匿名查看功能,可以不登陆而查看登录Jenkins

https://blog.csdn.net/boonya/article/details/77362603

3、jenkins的工作目录

cd /root/.jenkins

cd workspace

cd job

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

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

相关文章

【JavaSE】Java基础语法(十七)

文章目录 1. final2. 代码块2.1 代码块概述2.2 代码块分类 1. final fianl关键字的作用 final代表最终的意思,可以修饰成员方法,成员变量,类 final修饰类、方法、变量的效果 fianl修饰类:该类不能被继承(不能有子类&a…

软件测试基础概念

目录 软件测试的生命周期如何描述一个bug如何定义bug的级别bug的生命周期产生争执怎么办(处理人际关系)如何开始第一次测试测试的执行和bug管理如何发现更多的bug 软件测试的生命周期 需求分析 – 测试计划 – 测试设计、测试开发 – 测试执行 – 测试评…

界面控件DevExpress WinForms全新的UI模板,解决各种业务线需求!

去年秋天DevExpress官方发布了一个新的 WinForms UI模板预览版(第一个EAP只提供给DevExpress宇宙版激活的用户) ,这些精炼的、随时可用的“模板”旨在启动表单设计/开发过程。有了这个模板,用户可以创建/交付现成的UI解决方案&…

Jenkins——maven 插件配置

文章目录 一、Maven 的集成二、在执行job的机器上安装好maven三、下载 maven 插件四、配置全局工具五、Maven 相关使用1、新建 job2、自由风格 job 中命令行使用 mvn 命令3、构建操作 一、Maven 的集成 在 Jenkins 上构建 Java 项目时需要使用 Maven 来进行构建打包 二、在执…

cisp pte模拟题

1.信息搜集 本题共三个key 端口 1433 27689 存活ip 192.168.85.137 2.访问网站27689进行信息搜集 一个登录框,sql注入失败,暴力破解失败 扫描目录 发现三个文件robots.txt ,web.config 除了robots.txt,其他都访问不了 访问robots.txt,发现一个file参数…

在职阿里8年,一个31岁女软件测试工程师的心声

简单的先说一下,坐标杭州,13届本科毕业,算上年前在阿里巴巴的面试,一共有面试了有6家公司(因为不想请假,因此只是每个晚上去其他公司面试,所以面试的公司比较少) 其中成功的有4家&am…

chatgpt赋能python:使用Python创建结构体:完全指南

使用Python创建结构体:完全指南 在Python编程领域,结构体是一种非常方便和有用的数据类型,用于存储和组织相关变量。在本篇文章中,我们将讨论如何使用Python创建结构体。让我们开始吧! 什么是结构体? 结…

CodeForces..构建美丽数组.[简单].[情况判断].[特殊条件下的最小值奇偶问题]

题目描述&#xff1a; 题目解读&#xff1a; 给定数组a[n]&#xff0c;ai>0&#xff0c;问能否得到一个数组b[n]&#xff0c;数组b中的元素都大于0且全奇or全偶。 数组b中的元素biai or ai-aj&#xff08;1<j<n&#xff09;。 解题思路&#xff1a; 数组b中的元素都…

Zotero之多篇文献引用

前提 需看下我的这篇&#xff1a;Zotero文献在word中的引用 具体操作 Step01 在Word中引用多篇文献 点击“Add/Edit Citation”在跳出的Zotero搜索框中&#xff0c;选择“经典视图”在跳出的“添加/编辑引注”界面中&#xff0c;点击“多重来源”&#xff08;单一来源&…

[图表]pyecharts模块-反转柱状图

[图表]pyecharts模块-反转柱状图 先来看代码&#xff1a; from pyecharts import options as opts from pyecharts.charts import Bar from pyecharts.faker import Fakerc (Bar().add_xaxis(Faker.choose()).add_yaxis("商家A", Faker.values()).add_yaxis("…

Spring 事件相关知识ApplicationEvent

Spring 事件相关知识ApplicationEvent 事件工作流程相关类ApplicationListenerApplicationEvent 我们可以发布自己的事件ApplicationEventPublisher Spring框架中提供了多种事件类型&#xff0c;常用的几个事件类型如下&#xff1a; Spring 事件驱动模型是 Spring 框架中的一个…

oracle安装

服务端安装&#xff08;公司中不需要&#xff0c;只安装客户端就行&#xff09; 1、挂载一个Windows系统 双击vmx文件 启动 2、网络配置 添加一个网络 自己电脑看控制面板是否添加虚拟网卡 查看连接的网络&#xff0c;ip地址不能为1&#xff0c;为1就自己修改&#xff0c;…

【剑指offer】数据结构——数

目录 数据结构——数直接解【剑指offer】43. 1&#xff5e;n 整数中 1 出现的次数【剑指offer】44. 数字序列中某一位的数字【剑指offer】49. 丑数【剑指offer】60. n个骰子的点数【剑指offer】62. 圆圈中最后剩下的数字【剑指offer】64. 求12…n 特殊解——分治法 &#xff1a…

用反射设计通用的实例化对象方案

需求 对象的相关信息存储在javabean.properties文件中&#xff0c;通过读取properties文件中的信息&#xff0c;实例化对象&#xff0c;要求程序不能硬编码&#xff0c;即程序可以通用&#xff0c;针对不同的对象&#xff0c;都可以实例化。仅需修改配置文件&#xff0c;不需要…

【课代表笔记】直播回顾:Top药企的数字化实践集锦

【K讲了】系列直播之医药行业第一期&#xff1a;Top药企的数字化实践集锦前不久已在视频号和大家如期见面&#xff0c;以下是课代表为大家抄好的笔记~~ 斯歌K2的医药行业经验 K2在医药领域拥有丰富的客户积累及实施经验&#xff0c;全球TOP 10药企中有7家选择K2。斯歌K2已在医药…

数据链路层:封装成帧

1.数据链路层&#xff1a;封装成帧 笔记来源&#xff1a; 湖科大教书匠&#xff1a;封装成帧 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记仅做学习参考 封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧 帧头和帧尾中包含重要的控制…

java的UDP(一)

文章目录 1. 简介2. UDP客户端3. UDP服务器4. DatagramPacket类 1. 简介 Java中的UDP实现分为两个类&#xff1a;DatagramPacket和DatagramSocket。DatagramPacket类将数据字节填充到UDP包汇总&#xff0c;这称为数据报&#xff0c;由你来解包接收的数据报。DatagramSocket可以…

Day57【动态规划】647.回文子串、516.最长回文子序列

647.回文子串 力扣题目链接/文章讲解 视频讲解 1、确定 dp 数组下标及值含义 dp[i][j]&#xff1a;表示区间范围为 [i, j] 的子串是否为回文串&#xff08;j > i&#xff09; 这样定义才方便我们的递推&#xff01;怎么想到的&#xff1f;回文串需要对比串的两端&#…

用可编程逻辑器件FPGA LCMXO2-4000HC-6MG132I 实现智能汽车解决方案设计

LCMXO2-4000HC-6MG132I lattice莱迪斯深力科 MachXO2 可编程逻辑器件 (PLD) 由六个超低功耗、即时启动、非易失性 PLD 组成&#xff0c;可提供 256 至 6864 个查找表 (LUT) 的密度。 MachXO2 系列 PLD 提供多种特性&#xff0c;例如嵌入式块 RAM (EBR)、分布式 RAM 和用户闪存 …

基于html+css的图片展示93

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…