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最新版)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

修复VS2015没有代码提示的问题【已解决】

问题描述 在Visual Studio 中编写代码时&#xff0c;发现使用库函数的时候&#xff0c;在类对象后输入点后&#xff0c;并没有出现类对应的成员信息的提示。 解决过程 1&#xff09;方法1&#xff1a; 百度“vs 没有代码提示”&#xff0c;搜索解决方案。 方案1&#xff1…

lossBN

still tips for learning classification and regression关于softmax的引入和作用分类问题损失函数 - MSE & Cross-entropy⭐Batch Normalization&#xff08;BN&#xff09;⭐想法&#xff1a;直接改error surface的landscape&#xff0c;把山铲平feature normalization那…

Hive分区表和分桶表

1.分区表 1.1 概念 Hive 中的表对应为 HDFS 上的指定目录,在查询数据时候,默认会对全表进行扫描,这样时间和性能的消耗都非常大。 分区为 HDFS 上表目录的子目录,数据按照分区存储在子目录中。如果查询的 `where` 字句的中包含分区条件,则直接从该分区去查找,而不是扫描整…

python实现PDF表格与文本分别导出EXCEL

现需将pdf 转换至Excel &#xff0c; 目前实现方式&#xff1a;将PDF的TABLE部分与 非 TABLE部分分别导出至Excel两个sheet中 1&#xff09;、识别PDF中的表格块 2&#xff09;、将PDF转换为Word格式 3&#xff09;、提取Word中非表格的文本数据 4&#xff09;、对文本与表格重…

Qt 实现侧边栏滑出菜单效果

1.效果图 2.实现原理 这里做了两个widget&#xff0c;一个是 展示底图widget&#xff0c;一个是 展示动画widget。 这两个widget需要重合。动画widget需要设置属性叠加到底图widget上面&#xff0c;设置如下属性&#xff1a; setWindowFlags(Qt::FramelessWindowHint | Qt::…

Java提升技术,进阶为高级开发和架构师的路线

原文网址&#xff1a;Java提升技术&#xff0c;进阶为高级开发和架构师的路线-CSDN博客 简介 Java怎样提升技术&#xff1f;怎样进阶为高级开发和架构师&#xff1f;本文介绍靠谱的成长路线。 首先点明&#xff0c;只写业务代码是无法成长技术的。提升技术的两个方法是&…

【Docker】Docker-Compose内置DNS负载均衡失效问题

Docker Compose实现负载均衡 还是对前面的例子docker-compose.yml稍微修改&#xff1a; version: "3.8"services:flask-demo:build:context: .dockerfile: Dockerfileimage: flask-demo:latestenvironment:- REDIS_HOSTredis-server- REDIS_PASS${REDIS_PASS}healt…

软考-入侵检测技术原理与应用

本文为作者学习文章&#xff0c;按作者习惯写成&#xff0c;如有错误或需要追加内容请留言&#xff08;不喜勿喷&#xff09; 本文为追加文章&#xff0c;后期慢慢追加 by 2023年10月 入侵检测技术概念 入侵检测技术是指一种计算机安全技术&#xff0c;旨在监测计算机系统、…

回溯法:雀魂启动!

题目链接&#xff1a;雀魂启动&#xff01;_牛客题霸_牛客网 题解&#xff1a; 回溯法 1、用哈希思想构建映射表&#xff0c;标记已有的卡的种类和个数 2、遍历卡池&#xff0c;先从卡池中抽一张卡&#xff0c;因为只能抽一张卡&#xff0c;所以一种卡只判断一次 3、抽到卡后找…

行为型模式-状态模式

在状态模式中&#xff0c;类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 在状态模式中&#xff0c;我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。 意图&#xff1a;允许对象在内部状态发生改变时改变它的行为&#xff0…

jmeter报Java.NET.BindException: Address already in use: connect

1、windows10和window11上&#xff1a; 修改注册表的内容&#xff1a; HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters&#xff1a; 新建dword&#xff08;值&#xff09;的类型&#xff1a; MaxUserPort 65334 TcpTimedWaitDelay 30window

Android Glide限定onlyRetrieveFromCache取内存缓存submit超时阻塞方式,Kotlin

Android Glide限定onlyRetrieveFromCache取内存缓存submit超时阻塞方式,Kotlin import android.os.Bundle import android.util.Log import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope import com.b…

Chimera:混合的 RLWE-FHE 方案

参考文献&#xff1a; [HS14] S. Halevi and V. Shoup. Algorithms in HElib. In Advances in Cryptology–CRYPTO 2014, pages 554–571. Springer, 2014.[HS15] S. Halevi and V. Shoup. Bootstrapping for HElib. In Advances in Cryptology–EUROCRYPT 2015, pages 641–6…

K8s概念汇总-笔记

目录 1.Master 1.1在Master上运⾏着以下关键进程 2.什么是Node? 1.2在每个Node上都运⾏着以下关键进程 3.什么是 Pod ? 4. 什么是Label &#xff1f; 5.Replication Controller 6.Deployment 6.1Deployment的典型场景&#xff1a; 7.Horizontal Pod Autoscaler TODO…

【MATLAB源码-第57期】基于matlab的IS95前向链路仿真,输出误码率曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 IS-95&#xff0c;也被称为cdmaOne&#xff0c;是第一代的CDMA&#xff08;Code Division Multiple Access&#xff0c;码分多址&#xff09;数字蜂窝通信标准。IS-95的全称是Interim Standard-95&#xff0c;最初由Qualcomm…

春运压力如何破?V2X技术来解题

近日&#xff0c;国务院发布了2024春节放假方案。春节作为每年中国交通运输系统最繁忙的时期&#xff0c;车流的快速增长带来了道路运载压力和事故风险率。如果想拥有一个不堵车又平安的春节&#xff1f;那就不得不提V2X 技术&#xff0c;以及它在提升交通安全与交通效率、助力…

自定义一个注解,用它标记的执行并于给定值做对比(即简单的junit)

目录 程序设计 程序分析 系列文章 程序设计 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME) @Target(ElementT…

TVRNet网络PyTorch实现

文章目录 文章地址网络各层结构代码实现 文章地址 An End-to-End Traffic Visibility Regression Algorithm文章通过训练搜集得到的真实道路图像数据集&#xff08;Actual Road dense image Dataset, ARD&#xff09;&#xff0c;通过专业的能见度计和多人标注&#xff0c;获得…

10个Golang 数据库最佳实践

如果您使用 Golang 开发数据库支持的应用程序&#xff0c;则应遵循一些最佳实践&#xff0c;以确保您的代码干净、高效且可靠。 在本文中&#xff0c;我们将探讨在 Golang 中使用数据库的 10 种最佳实践。我们将涵盖连接数据库、CRUD 操作以及使用准备好的语句等主题。在本文结…

图像语义分割 pytorch复现DeepLab v1图像分割网络以及网络详解(骨干网络基于VGG16)

图像语义分割 pytorch复现DeepLab v1图像分割网络以及网络详解&#xff08;骨干网络基于VGG16&#xff09; 背景介绍2、 网络结构详解2.1 LarFOV效果分析 2.2 DeepLab v1-LargeFOV 模型架构2.3 MSc&#xff08;Multi-Scale&#xff0c;多尺度(预测)&#xff09;2.3 以VGG16为特…