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.…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
