当前位置: 首页 > news >正文

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:

  1. 链接下载 python, 设置环境变量,CMD 控制台输入 python 验证是否安装成功。
  2. 链接下载 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 环境搭建
  1.  下载 Pycharm
  2.  Pycharm 中配置 intelliBot:Pycharm 中点击 File -> Settings ->  Plugins, 在 搜索栏输入 intelliBot, 点击安装,需要设置代理的话点击 HTTP Proxy Settings 设置代理下载安装。
  3.  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的&#xff0c;可扩展的关键字驱动的自动化测试框架。 它…...

python 字典dict和列表list的读取速度问题, range合并

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 python 字典和列表的读取速度问题 最近在进行基因组数据处理的时候&#xff0c;需要读取较大数据&#xff08;2.7G&#xff09;存入字典中&#xff0c; 然后对被处理数据进行字典key值的匹配&#xff0c;在被处理文件中每次…...

测试用例的设计方法(全):等价类划分方法

一.方法简介 1.定义 是把所有可能的输入数据,即程序的输入域划分成若干部分&#xff08;子集&#xff09;,然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。 2.划分等价类&#xff1a; 等价类是指某个输入域的…...

Office技巧(持续更新)(Word、Excel、PPT、PowerPoint、连续引用、标题、模板、论文)

1. Word 1.1 标题设置为多级列表 选住一级标题&#xff0c;之后进行“定义新的多级列表” 1.2 图片和表的题注自动排序 正常插入题注后就可以了。如果一级标题是 “汉字序号”&#xff0c;那么需要对题注进行修改&#xff1a; 从原来的 图 { STYLEREF 1 \s }-{ SEQ 图 \* A…...

Java实现ORM第一个api-FindAll

经过几天的业余开发&#xff0c;今天终于到ORM对业务api本身的实现了&#xff0c;首先实现第一个查询的api 老的C#定义如下 因为Java的泛型不纯&#xff0c;所以无法用只带泛型的方式实现api&#xff0c;对查询类的api做了调整&#xff0c;第一个参数要求传入实体对象 首先…...

HFSS笔记——求解器和求解分析

文章目录 1、求解器2、求解类型3、自适应网格剖分4、求解频率选择4.1 求解设置项的含义4.2 扫频类型 1、求解器 自从ANSYS将HFSS收购后&#xff0c;其所有的求解器都集成在一起了&#xff0c;点击Project&#xff0c;会显示所有的求解器类型。 其中&#xff0c; HFSS design&…...

jenkins配置gitlab凭据

下载Credentials Binding插件&#xff08;默认是已经安装了&#xff09; 在凭据配置里添加凭据类型 点击保存 Username with password&#xff1a; 用户名和密码 SSH Username with private 在凭据管理里面添加gitlab账号和密码 点击全局 点击添加凭据&#xff08;版本不同…...

0基础学习PyFlink——用户自定义函数之UDTF

大纲 表值函数完整代码 在《0基础学习PyFlink——用户自定义函数之UDF》中&#xff0c;我们讲解了UDF。本节我们将讲解表值函数——UDTF 表值函数 我们对比下UDF和UDTF def udf(f: Union[Callable, ScalarFunction, Type] None,input_types: Union[List[DataType], DataTy…...

【Java 进阶篇】Java Request 原理详解

在网络应用开发中&#xff0c;HTTP请求是一项常见而关键的任务。当我们使用Java编写网络应用时&#xff0c;了解HTTP请求的工作原理变得至关重要。本文将详细介绍Java中HTTP请求的原理&#xff0c;包括请求的结构、发送请求的方法以及处理请求的过程。 HTTP请求的基本结构 HT…...

13 结构性模式-装饰器模式

1 装饰器模式介绍 在软件设计中,装饰器模式是一种用于替代继承的技术,它通过一种无须定义子类的方式给对象动态的增加职责,使用对象之间的关联关系取代类之间的继承关系. 2 装饰器模式原理 //抽象构件类 public abstract class Component{public abstract void operation(); }…...

支持向量机(SVM)

一. 什么是SVM 1. 简介 SVM&#xff0c;曾经是一个特别火爆的概念。它的中文名&#xff1a;支持向量机&#xff08;Support Vector Machine, 简称SVM&#xff09;。因为它红极一时&#xff0c;所以关于它的资料特别多&#xff0c;而且杂乱。虽然如此&#xff0c;只要把握住SV…...

Rabbitmq----分布式场景下的应用

服务异步通信-分布式场景下的应用 如果单机模式忘记也可以看看这个快速回顾rabbitmq,在做学习 消息队列在使用过程中&#xff0c;面临着很多实际问题需要思考&#xff1a; 1.消息可靠性 消息从发送&#xff0c;到消费者接收&#xff0c;会经理多个过程&#xff1a; 其中的每一…...

springboot + redis实现签到与统计功能

在很多项目中都会有签到与统计功能&#xff0c;最容易想到的方案是创建一个签到表来记录每个用户的签到记录&#xff0c;比如设计一个mysql数据库表&#xff1a; CREATE TABLE tb_sign id bigint(20) unsigned NOT NULL AUTOINCREMENT COMMENT 主键, user_id bigint(20) unsig…...

Redis | 数据结构(02)SDS

一、键值对数据库是怎么实现的&#xff1f; 在开始讲数据结构之前&#xff0c;先给介绍下 Redis 是怎样实现键值对&#xff08;key-value&#xff09;数据库的。 Redis 的键值对中的 key 就是字符串对象&#xff0c;而 value 可以是字符串对象&#xff0c;也可以是集合数据类型…...

Linux C语言开发-D7D8运算符

算术运算符&#xff1a;-*/%&#xff0c;浮点数可以参与除法运算&#xff0c;但不能参与取余运算 a%b&#xff1a;表示取模或取余 关系运算符&#xff1a;<,>,>,<,,! 逻辑运算符:!,&&,|| &&,||逻辑运算符是从左到右&#xff0c;依次运算&#…...

redis 配置主从复制,哨兵模式案例

哨兵(Sentinel)模式 1 . 什么是哨兵模式&#xff1f; 反客为主的自动版&#xff0c;能够自动监控master是否发生故障&#xff0c;如果故障了会根据投票数从slave中挑选一个 作为master&#xff0c;其他的slave会自动转向同步新的master&#xff0c;实现故障自动转义 2 . 原理…...

Python---练习:使用for循环实现用户名+密码认证

案例&#xff1a; 用for循环实现用户登录 ① 输入用户名和密码 ② 判断用户名和密码是否正确&#xff08;usernamelaowang&#xff0c;passwordlw123&#xff09; ③ 登录仅有三次机会&#xff0c;超过3次会报错 思考&#xff1a; 用户登陆情况有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后缀勒索病毒怎么解决,勒索病毒解密,数据恢复

近期&#xff0c;网络上的各种病毒都比较猖獗&#xff0c;而其中较为明显的就是360后缀勒索病毒&#xff0c;从这个月开始云天数据恢复中心接到很多企业的求助&#xff0c;企业的服务器遭到了360后缀勒索病毒的攻击&#xff0c;通过给用户的服务器检测与加密病毒的分析&#xf…...

使用字节流读取文件中的数据的几种方式

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.…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...

【WebSocket】SpringBoot项目中使用WebSocket

1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖&#xff0c;添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;采用DevEco Studio实现&#xff0c;包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!

今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等&#xff0c;设置经线、纬线都以10间隔显示。 2、需要插入背会归线&#xf…...