Jenkins自动化测试
学习 Jenkins 自动化测试的系列文章
- Robot Framework 概念
- Robot Framework 安装
- Pycharm + Robot Framework 环境搭建
- Robot Framework 介绍
- Jenkins 自动化测试
1. Robot Framework 概念
Robot Framework是一个基于Python的,可扩展的关键字驱动的自动化测试框架。
它有几个主要特点:
- 使用简单易用的表格式语法创建测试用例;
- 提供从现有关键字扩展到更高级别关键字功能;
- 提供易于阅读的结果报告和 HTML 的 log;
- 提供标记以分类和选择要执行的测试用例;
- 平台和应用程序是独立的;
- 支持创建数据驱动的测试用例;

测试数据是简单,易于编辑的表格格式,启动 Robot Framework 时,它会处理测试数据,执行测试用例并生成日志和报告。核心框架对测试中的目标一无所知,与它的交互由测试库处理,库可以直接使用应用程序接口,也可以使用低级测试工具作为驱动程序。
2. Robot Framework 安装
通过 pip 安装 Robot Framework:
- 链接下载 python, 设置环境变量,CMD 控制台输入 python 验证是否安装成功。
- 链接下载 pip,解压,CMD 控制台进入解压目录,输入 python setup.py install , 安装成功,设置环境变量,输入 pip 验证是否安装成功。

3. pip 安装 wxpython 2.8.12.1: pip install wxpython==2.8.12.1
4. pip 安装 robotframework: pip install robotframework
5. pip 安装 robotframework-selenium2library: pip install robotframework-selenium2library
6. pip 安装 rtomac-robotframework-selenium2library: pip install rtomac-robotframework-selenium2library
7. pip 安装 decorator-3.3.3.tar: pip install decorator
8. pip 安装 robotframework-ride: pip install robotframework-ride
9. CMD 输入 ride.py, 弹出 RIDE 界面即为 Robot Framework 框架搭建成功。
10. 创建桌面 RIDE 图标:桌面鼠标右击创建快捷方式, 在请键入对象 处输入 C:\Programs\Python27\pythonw.exe -c "from robotide import main; main()" ,点击下一步设置图标名称 RIDE 。将图标更改为机器人图标,右击 RIDE 选择属性,点击更改图标, 在浏览器中选择目录 F:\Python27\Lib\site-packages\robotide\widgets 找到 robot.ico,点击确定,图标变为机器人图标 RIDE, Done!
提示: 如果 pip 安装时出现如下错误:

是由于未设置代理导致的 timeout, 通过设置代理 pip install wxpython==2.8.12.1 --proxy=<proxy_ip:port> 下载即可解决。
3. Pycharm + Robot Framework 环境搭建
- 下载 Pycharm
- Pycharm 中配置 intelliBot:Pycharm 中点击 File -> Settings -> Plugins, 在 搜索栏输入 intelliBot, 点击安装,需要设置代理的话点击 HTTP Proxy Settings 设置代理下载安装。
- Pycharm 中配置 suite 和 case 的运行环境:
配置 suite: Robot Run TestSuite / -d results $FileName$ / $FileDir$

配置 case: Robot Run SingleTestCase / -d results -t "$SelectedText$" ./ / $FileDir$
4. 测试环境是否搭建成功:
一个简单的 case:
*** Settings ***
Documentation Example case for test
Force Tags owner
Library Selenium2Library
Library Collections*** Variables ***
${var} 1
${result} 1*** Test Cases ***
First Case[Documentation] this is a first case for test example[Tags] personLog to console ${var}Log to console ${result}should be equal ${result} ${var}
文件名右击 -> External Tools -> Robot Run TestSuite, 显示测试结果,环境搭建成功 。
4. Robot Framework 介绍
4.1 变量 Variables
Robot Framework 用 $,@,& 分别表示标量,列表,和字典。在 Variables 下创建变量,一个简单的 case 如下所示:
*** Variables ***
${var} value
@{list} a b c ${var}
&{dict} key1=name key2=${list}*** Test Cases ***
First Case
Log to console ${var}
Log to console ${list}
Log to console ${dict}
对应于 python 的语法为 var = “value”, list1 = [‘a’,’b’,’c’,var], dict1={‘key1’:’name’, ‘key2’:list1} 。
用作分隔符的空格可以变化,只要大于两个空格即可,因此可以很好的对齐数据,建议在关键字和参数之间使用 4 个空格 。
4.2 关键字 Keywords
关键字 keywords 分为内置关键字和自定义关键字。
常用内置关键字:
- Set Variable If: ${var2} Set Variable If condition value1 value2 ,给出一个条件和两个值,如果条件为true,则返回第一个值,否则返回第二个值;
- Should contain: Should Contain ${result} value ,如果 result 不包括 value 一次或者多次,则测试失败;
- log: 记录给定信息;
- log to console: 将给定信息打印到控制台;
- set suite variable: Set Suite Variable ${Scalar} ${Hello world} ,使变量在当前 suite 范围内都是可用的;
- Run Keyword If: Run Keyword If condition action arg ,如果 condition 为 true, 则使用给定的参数运行指定的关键字;
自定义关键字:
resource.txt*** Test Cases ***
First Case[Documentation] this is a first case for resource[Tags] ananCalculate and Check EqualsCalculate and Check Equals expression=6+3 expected=${9}*** Keywords ***
Calculate and Check Equals[Arguments] ${expression}=3+3 ${expected}=${6}${res} Evaluate ${expression}Log to console expression=${expression}should be equal ${res} ${expected}
自定义关键字 Calculate and Check Equals,该关键字类似 python 的方法,有两个参数 expression 和 expected 默认值均为 6,如果输入参数不指定则用默认值。
4.3 resource / Library
setting 表里使用 resource 导入文件,文件中包含了关键字的定义。
setting 表里使用 library 导入内置库和自定义库,库中定义了一系列方法。
*** Settings ***
Documentation Example case for resource
Force Tags owner
Resource ./resource/resource.txt
Library Selenium2Library
Library Collections
Library ./lib/robot.py
其中 robot.py 是自定义库。
4.4 自定义库
自定义库中定义了一系列关键字的方法。
robot.pyimport hashlibdef gen_sign(*args):m = hashlib.md5()m.update(''.join(args))return m.hexdigest()
def gen_sign_keywords(*args):m = hashlib.md5()m.update(''.join(args))
resource.txt*** Test Cases ***
First Case[Documentation] this is a first case for resource[Tags] ananCalculate and Check EqualsCalculate and Check Equals expression=6+3 expected=${9}*** Keywords ***
Calculate and Check Equals[Arguments] ${expression}=3+3 ${expected}=${6}${res} Evaluate ${expression}Log to console expression=${expression}should be equal ${res} ${expected}${result} gen_sign @{list1}log to console ${result}
4.5 setup & teardown
在 test case 执行前执行 Test Setup,执行后执行 Teardown 。
这样做,如果多个 test case 都需要执行 Test Setup 和 Teardown 时,可以将共同的部分放到 Suite Setup 和 Suite Teardown 中执行,这样只需要执行一次即可。
*** Settings ***
Suite Setup Commen_Suite_Setup
Suite Teardown Commen_Suite_Teardown
Documentation Example case for resource
Force Tags owner
Resource ./resource/resource.txt
Library Selenium2Library
Library Collections
Library ./lib/robot.py
robot framework 测试例子:
*** Settings ***
Suite Setup Commen_Suite_Setup
Suite Teardown Commen_Suite_Teardown
Documentation Example case for resource
Force Tags owner
Resource ./resource/resource.txt
Library Selenium2Library
Library Collections
Library ./lib/robot.py*** Test Cases ***First Case[Documentation] this is a first case for resource[Tags] ananCalculate and Check EqualsCalculate and Check Equals expression=6+3 expected=${9}${result_first_case} gen_sign @{list1}Set Suite Variable ${test_id} ${result_first_case}Log to console ${test_id}
Second Case[Documentation] this is a second case for custom lib[Tags] anan${sign} gen_sign @{list1}Log to console ${sign}Log to console ${test_id}
*** Settings ***
Documentation this is a test demo case
Library ./../lib/robot.py*** Variables ***
${var1} value
@{list1} a b c d
&{dict1} key1=sf key2=${list1}
${INSTANTIATE_JSON_FILE}
${INSTANCEID}*** Keywords ***
Calculate and Check Equals[Arguments] ${expression}=3+3 ${expected}=${6}${res} Evaluate ${expression}Log to console expression=${expression}should be equal ${res} ${expected}${result} gen_sign @{list1}log to console ${result}should contain ${result} clog to console ${result}Commen_Suite_SetupCommon_Case_SetupCommon_Case_LogCommen_Suite_TeardownUndeploy_Case_SetupCommon_Case_SetupLog to console ${var1}Common_Case_LogLog to console huyun's test caseUndeploy_Case_SetupLog to console undeploy case setup
import hashlibdef gen_sign(*args):m = hashlib.md5()m.update(''.join(args))return m.hexdigest()def gen_sign_keywords(*args):m = hashlib.md5()m.update(''.join(args))
5. Jenkins 自动化测试
5.1 持续集成构建
持续集成构建步骤: 代码集成 -> 编译 -> 打包 -> 部署 -> 测试
代码集成: 分支管理,用到的工具有 SVN 或者 Git。
编译/打包: 用到的工具有 maven、IDE 等。
部署: 将软件安装到服务器或者客户端。
测试: daily build,持续集成构建, CI(Continuous integration) 版本。
5.2 自动化测试
自动化测试概念: 通过编写脚本用机器代替人工执行测试。
自动化测试流程:
- 功能测试流程: 需求分析 - 测试计划 - 用例设计 - 测试执行 - 测试报告
- 自动化测试流程: 测试用例选择 - 用例编码实现 - 测试执行 - 测试报告
5.3 自动化测试框架
自动化测试框架(Robot Framework):
自动化测试框架分为几种类型:
- 关键字驱动框架: 将测试过程的操作方法抽象为关键字;
- 数据驱动框架: 将测试中用到的数据在自动化测试过程中自动加载;
- 混合型框架: 数据驱动、关键字驱动等多种技术融合的框架;
5.4 Jenkins 自动化测试
Jenkins是一个功能强大的应用程序,该程序允许持续集成和持续交付项目。
Python接口自动化测试零基础入门到精通(2023最新版)
相关文章:
Jenkins自动化测试
学习 Jenkins 自动化测试的系列文章 Robot Framework 概念Robot Framework 安装Pycharm Robot Framework 环境搭建Robot Framework 介绍Jenkins 自动化测试 1. Robot Framework 概念 Robot Framework是一个基于Python的,可扩展的关键字驱动的自动化测试框架。 它…...
python 字典dict和列表list的读取速度问题, range合并
嗨喽,大家好呀~这里是爱看美女的茜茜呐 python 字典和列表的读取速度问题 最近在进行基因组数据处理的时候,需要读取较大数据(2.7G)存入字典中, 然后对被处理数据进行字典key值的匹配,在被处理文件中每次…...
测试用例的设计方法(全):等价类划分方法
一.方法简介 1.定义 是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。 2.划分等价类: 等价类是指某个输入域的…...
Office技巧(持续更新)(Word、Excel、PPT、PowerPoint、连续引用、标题、模板、论文)
1. Word 1.1 标题设置为多级列表 选住一级标题,之后进行“定义新的多级列表” 1.2 图片和表的题注自动排序 正常插入题注后就可以了。如果一级标题是 “汉字序号”,那么需要对题注进行修改: 从原来的 图 { STYLEREF 1 \s }-{ SEQ 图 \* A…...
Java实现ORM第一个api-FindAll
经过几天的业余开发,今天终于到ORM对业务api本身的实现了,首先实现第一个查询的api 老的C#定义如下 因为Java的泛型不纯,所以无法用只带泛型的方式实现api,对查询类的api做了调整,第一个参数要求传入实体对象 首先…...
HFSS笔记——求解器和求解分析
文章目录 1、求解器2、求解类型3、自适应网格剖分4、求解频率选择4.1 求解设置项的含义4.2 扫频类型 1、求解器 自从ANSYS将HFSS收购后,其所有的求解器都集成在一起了,点击Project,会显示所有的求解器类型。 其中, HFSS design&…...
jenkins配置gitlab凭据
下载Credentials Binding插件(默认是已经安装了) 在凭据配置里添加凭据类型 点击保存 Username with password: 用户名和密码 SSH Username with private 在凭据管理里面添加gitlab账号和密码 点击全局 点击添加凭据(版本不同…...
0基础学习PyFlink——用户自定义函数之UDTF
大纲 表值函数完整代码 在《0基础学习PyFlink——用户自定义函数之UDF》中,我们讲解了UDF。本节我们将讲解表值函数——UDTF 表值函数 我们对比下UDF和UDTF def udf(f: Union[Callable, ScalarFunction, Type] None,input_types: Union[List[DataType], DataTy…...
【Java 进阶篇】Java Request 原理详解
在网络应用开发中,HTTP请求是一项常见而关键的任务。当我们使用Java编写网络应用时,了解HTTP请求的工作原理变得至关重要。本文将详细介绍Java中HTTP请求的原理,包括请求的结构、发送请求的方法以及处理请求的过程。 HTTP请求的基本结构 HT…...
13 结构性模式-装饰器模式
1 装饰器模式介绍 在软件设计中,装饰器模式是一种用于替代继承的技术,它通过一种无须定义子类的方式给对象动态的增加职责,使用对象之间的关联关系取代类之间的继承关系. 2 装饰器模式原理 //抽象构件类 public abstract class Component{public abstract void operation(); }…...
支持向量机(SVM)
一. 什么是SVM 1. 简介 SVM,曾经是一个特别火爆的概念。它的中文名:支持向量机(Support Vector Machine, 简称SVM)。因为它红极一时,所以关于它的资料特别多,而且杂乱。虽然如此,只要把握住SV…...
Rabbitmq----分布式场景下的应用
服务异步通信-分布式场景下的应用 如果单机模式忘记也可以看看这个快速回顾rabbitmq,在做学习 消息队列在使用过程中,面临着很多实际问题需要思考: 1.消息可靠性 消息从发送,到消费者接收,会经理多个过程: 其中的每一…...
springboot + redis实现签到与统计功能
在很多项目中都会有签到与统计功能,最容易想到的方案是创建一个签到表来记录每个用户的签到记录,比如设计一个mysql数据库表: CREATE TABLE tb_sign id bigint(20) unsigned NOT NULL AUTOINCREMENT COMMENT 主键, user_id bigint(20) unsig…...
Redis | 数据结构(02)SDS
一、键值对数据库是怎么实现的? 在开始讲数据结构之前,先给介绍下 Redis 是怎样实现键值对(key-value)数据库的。 Redis 的键值对中的 key 就是字符串对象,而 value 可以是字符串对象,也可以是集合数据类型…...
Linux C语言开发-D7D8运算符
算术运算符:-*/%,浮点数可以参与除法运算,但不能参与取余运算 a%b:表示取模或取余 关系运算符:<,>,>,<,,! 逻辑运算符:!,&&,|| &&,||逻辑运算符是从左到右,依次运算&#…...
redis 配置主从复制,哨兵模式案例
哨兵(Sentinel)模式 1 . 什么是哨兵模式? 反客为主的自动版,能够自动监控master是否发生故障,如果故障了会根据投票数从slave中挑选一个 作为master,其他的slave会自动转向同步新的master,实现故障自动转义 2 . 原理…...
Python---练习:使用for循环实现用户名+密码认证
案例: 用for循环实现用户登录 ① 输入用户名和密码 ② 判断用户名和密码是否正确(usernamelaowang,passwordlw123) ③ 登录仅有三次机会,超过3次会报错 思考: 用户登陆情况有3种: ① 用户名错误(此时…...
react中使用jquery 语法
react中使用jquery 语法 npm install jquery引入 import $ from ‘jquery’ import React from react; import ./css/App.css import { Button } from antd; import $ from jquerylet slider_img [https://cdn.jsdelivr.net/gh/xaoxuu/cdn-wallpaper/abstract/41F215B9-261F…...
服务器中了360后缀勒索病毒怎么解决,勒索病毒解密,数据恢复
近期,网络上的各种病毒都比较猖獗,而其中较为明显的就是360后缀勒索病毒,从这个月开始云天数据恢复中心接到很多企业的求助,企业的服务器遭到了360后缀勒索病毒的攻击,通过给用户的服务器检测与加密病毒的分析…...
使用字节流读取文件中的数据的几种方式
public class FileReader02_ {public static void main(String[] args) {}Testpublic void m1() {String filePath "e:\\hello.txt";FileReader fileReader null;int date0;try {fileReader new FileReader(filePath);//循环读取 使用readwhile ((datefileReader.…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
