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

金融项目实战 04|JMeter实现自动化脚本接口测试及持续集成

目录

一、⾃动化测试理论

二、自动化脚本

1、添加断言

1️⃣注册、登录

2️⃣认证、充值、开户、投资

2、可重复执行:清除测试数据+脚本按指定顺序执行

1️⃣如何可以做到可重复执⾏?

2️⃣清除测试数据:连接数据库+setup线程组

        ①明确清除那些数据?

        ②这些数据在那个库、那个表?

        ③分析sql语句

        ④查询sql(确认sql语句是否正确)

        ⑤删除sql

        ⑥使用jmeter连接数据库,执行sql语句

         ⑦脚本按指定顺序执行

三、持续集成

1、持续集成理论

2、脚本管理:脚本上传到gitee

1️⃣方式一:pycharm

2️⃣方式二:命令行

3、配置


一、⾃动化测试理论

🔴什么是⾃动化测试?

  • 让程序或⼯具代替⼈为执⾏测试⽤例

🔴什么样的项⽬适合做⾃动化?

  • 1、项⽬周期⻓ --多⻓算⻓?(⾃⼰公司运营项⽬)
  • 2、需求稳定(更多指具体功能/模块)
  • 3、需要回归测试(电商、⾦融、部队、对外运营的项⽬)

 🔴⾃动化测试⽤例覆盖率?

  • 上限:全部的功能⽤例执⾏⾃动化。-- 基本不可能。
    • 1、有些⽤例能去做,⽽不去做(配置功能,不常⽤)
    • 2、有些⽤例都不能做⾃动化(如:图⽚上的⽂字)
  • 公司:
    • 1、如果⾃动化⽤例只覆盖业务线,覆盖率10~20%
    • 2、好点的公司,⾃动化覆盖40%~60%

🔴 ⾃动化测试与功能测试区别--脚本执⾏层⾯?

  • 1、⾃动化脚本可重复执⾏
  • 2、功能脚本是靠⼈眼睛进⾏断⾔,⾃动化是靠⼯具或程序进⾏断⾔。

🔴⾃动化测试归属什么测试?

  • 归属:功能测试(原因:⾃动化测试使⽤的⽤例都是功能的⽤例)

🔴⾃动化测试实现⽅式?

  • 1、⼯具
  • 2、代码

🔴⾃动化测试分类

  • ui⾃动化(web、app、win32)
  • 接⼝⾃动化

二、自动化脚本

如何设置⾃动化脚本?

  • 1、使⽤程序或⼯具断⾔
  • 2、可重复运⾏

1、添加断言

 只用到了断言中 响应断言 和响应代码两个功能,对响应体和响应代码进行断言。 

1️⃣注册、登录
注册接口
登录接口,这里开发返回错别字,这里为了断言通过,只判断了部分字

提示:

        1、图⽚验证码使⽤响应断⾔→断⾔状态码

        2、其他全部使⽤响应断⾔判断响应体的描述信息,因为JSON断言会对结果的判断过于标准,健壮性差。

        3、依赖接⼝不⽤断⾔,只需断⾔被测接⼝。(如:注册接口依赖图⽚验证码、短信验证码,只需要断⾔注册即可。)

2️⃣认证、充值、开户、投资

提示:

        1、断⾔内容来源预期结果,预期结果⼀般情况与实际结果⼀致。⽂字偏差看⼤概意思是否⼀样,如果不 ⼀样,那就是缺陷。

        2、看实际结果是否有明确提示错误原因和引导信息。如果有就通过,否则就是失败。

2、可重复执行:清除测试数据+脚本按指定顺序执行

1️⃣如何可以做到可重复执⾏?
  • 1、清除测试数据(已注册数据、造借款数据(因为投资业务执行需要已经有借款的信息))
  • 2、脚本按指定顺序执⾏
2️⃣清除测试数据:连接数据库+setup线程组
        ①明确清除那些数据?

                1、删除已注册的⼿机号(因此注册过的手机再跑注册接口会报错)

                2、造数据(因为投资业务依赖已经存在借款标)

                提示:在⼯作中找开发确认涉及那些表。

        ②这些数据在那个库、那个表?

                库:czbk_member

                表:

                        mb_member(会员主表)

                        mb_member_info(会员信息表)

                        mb_member_login_log(会员登录⽇志)
                        mb_member_register_log(会员注册⽇志)

                        提示:以上表找开发获取。

        ③分析sql语句

1、mb_member、mb_member_register_log直接使⽤phone字段进⾏过滤删除

2、mb_member_info、mb_member_login_log必须配合mb_member表的id进⾏关联查询,再删除。

【总结】删除手机号,不仅要删除有phone字段的信息,还要删除其他有主键外键关联的表信息

        ④查询sql(确认sql语句是否正确)

        ⑤删除sql
delete没有直接后面跟from的原因:联合查询时要删除记录,需要指明要删除那张表的记录

        ⑥使用jmeter连接数据库,执行sql语句

        性能测试04|JMeter:连接数据库、逻辑控制器、定时器-CSDN博客 

                 首先,添加数据库连接池并配置。

jdbc:mysql://121.43.169.97/czbk_member?allowMultiQueries=true

allowMultiQueries=true:开启批量执⾏sql语句。(因为默认只执行一条sql语句)

                然后,添加一个setup线程组,命名为“清除测试数据”,在该线程组下添加 jdbc请求执⾏sql语句。

删除已注册的手机号
构造借款数据;
具体sql语句看: 金融项目实战 03|JMeter脚本实现手工接口测试-CSDN博客中二、4

注意:

        1、因为要添加多条sql语句,所以每个sql语句结尾需要使⽤分号。如果一条则加不加分号都无所谓。

        2、Query Type:选择Callable Statement

         ⑦脚本按指定顺序执行

【总结】到此,实现了批量运行该测试计划,无需为测试数据的一次性特性而每次改数据。

三、持续集成

结合这篇文章看: 

持续集成 02|Jenkins介绍与安装、Postman集成Jenkins、代码集成Jenkins-CSDN博客 

1、持续集成理论

🔴什么持续集成?

  •  通过⼀款⼯具(jenkins)持续⾃动集成代码。

🔴持续集成(CI)⼯具最常⽤啥?

  • Jenkins

🔴通过jenkins⼯具运⾏脚本的本质什么?

  • 运⾏脚本的命令
  • jmeter -n -t 脚本.jmx -l 结果.txt -e -o ⽬录

🔴持续集成所依赖的环境是什么?

  • 1、jenkins环境:jdk、jenkin.war
  • 2、运⾏脚本本环境:newman 、jmeter、jkd、python、pytest,具体用哪个环境,要看写脚本用的什么工具或语言。

🔴持续集成运⾏脚本的⽅式有哪些?--脚本在哪⾥放?

  • 1、项⽬托管平台(github、gitee、gitlabe)
  • 2、jenkins服务器(将脚本从托管平台下载到jenkins服务器本地,调⽤命令去执⾏)

2、脚本管理:脚本上传到gitee

1️⃣方式一:pycharm
  • 通过pycharm⼯具以可视化方式将脚本上传托管平台gitee

                首先新建空项目,把脚本文件.jmx上传到该项目中。

                然后把该项目上传到gitee中。

                (实现此步骤需要先配置好账号,可查询其他博客看详细步骤)

2️⃣方式二:命令行
  • 通过命令将jmeter脚本上传到gitee仓库

 (建议看其他人写的详细博客)

3、配置

  • 执⾏脚本

配置:

        1、源码管理(将脚本下载到jenkins服务器)

        2、构建(在jenkins本地服务器执⾏脚本的命令)

                ①执⾏删除报告⽬录和结果⽬录命令 mac/linux:rm -rf re* windows: del result.txt rmdir /Q/S report

                 ②x:/xx/apache-jmeter-5.1.1/bin/jmeter.bat -n -t 02-auto_script.jmx -l resut.txt -e -o report

  • 测试报告

报告⽆内容或⽆样式:
jenkins管理->执⾏命令

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")

  •  发送邮件

相关文章:

金融项目实战 04|JMeter实现自动化脚本接口测试及持续集成

目录 一、⾃动化测试理论 二、自动化脚本 1、添加断言 1️⃣注册、登录 2️⃣认证、充值、开户、投资 2、可重复执行:清除测试数据脚本按指定顺序执行 1️⃣如何可以做到可重复执⾏? 2️⃣清除测试数据:连接数据库setup线程组 ①明确…...

Linux网络知识——路由表

路由表 1 定义与作用 Linux路由表是一个内核数据结构,用于描述Linux主机与其他网络设备之间的路径,以及如何将数据包从源地址路由到目标地址。路由表的主要作用是指导数据包在网络中的传输路径,确保数据包能够准确、高效地到达目标地址。 …...

浅谈云计算14 | 云存储技术

云存储技术 一、云计算网络存储技术基础1.1 网络存储的基本概念1.2云存储系统结构模型1.1.1 存储层1.1.2 基础管理层1.1.3 应用接口层1.1.4 访问层 1.2 网络存储技术分类 二、云计算网络存储技术特点2.1 超大规模与高可扩展性2.1.1 存储规模优势2.1.2 动态扩展机制 2.2 高可用性…...

AI 编程工具—Cursor进阶使用 阅读开源项目

AI 编程工具—Cursor进阶使用 阅读开源项目 首先我们打开一个最近很火的项目browser-use ,直接从github 上克隆即可 索引整个代码库 这里我们使用@Codebase 这个选项会索引这个代码库,然后我们再选上这个项目的README.md 文件开始提问 @Codebase @README.md 这个项目是用…...

使用 WPF 和 C# 将纹理应用于三角形

此示例展示了如何将纹理应用于三角形,以使场景比覆盖纯色的场景更逼真。以下是为三角形添加纹理的基本步骤。 创建一个MeshGeometry3D对象。像往常一样定义三角形的点和法线。通过向网格的TextureCoordinates集合添加值来设置三角形的纹理坐标。创建一个使用想要显示的纹理的 …...

Elasticsearch搜索引擎(二)

RestClient 基础 前言一、RestAPI1. 初始化 *RestClient*2. 创建索引库3. 删除索引库4. 判断索引库是否存在 二、RestClient操作文档1.新增文档2.查询文档3. 删除文档4. 修改文档5. 批量导入文档 前言 ES官方提供了各种不同语言的客户端用来操作ES,这些客户端的本质…...

unity学习17:unity里的旋转学习,欧拉角,四元数等

目录 1 三维空间里的旋转与欧拉角,四元数 1.1 欧拉角比较符合直观 1.2 四元数 1.3 下面是欧拉角和四元数的一些参考文章 2 关于旋转的这些知识点 2.1 使用euler欧拉角旋转 2.2 使用quaternion四元数,w,x,y,z 2.3 使用quaternion四元数,类 Vector3.zero 这种…...

走出实验室的人形机器人,将复刻ChatGPT之路?

1月7日,在2025年CES电子展现场,黄仁勋不仅展示了他全新的皮衣和采用Blackwell架构的RTX 50系列显卡,更进一步展现了他对于机器人技术领域,特别是人形机器人和通用机器人技术的笃信。黄仁勋认为机器人即将迎来ChatGPT般的突破&…...

如何使用wireshark 解密TLS-SSL报文

目录 前言 原理 操作 前言 现在网站都是https 或者 很多站点都支持 http2。这些站点为了保证数据的安全都通过TLS/SSL 加密过,用wireshark 并不能很好的去解析报文,我们就需要用wireshark去解密这些报文。我主要讲解下mac 在 chrome 怎么配置的&…...

电脑有两张网卡,如何实现同时访问外网和内网?

要是想让一台电脑用两张网卡,既能访问外网又能访问内网,那可以通过设置网络路由还有网卡的 IP 地址来达成。 检查一下网卡的连接 得保证电脑的两张网卡分别连到外网和内网的网络设备上,像路由器或者交换机啥的。 给网卡配上不一样的 IP 地…...

定义:除了Vue内置指令以外的其他 v-开头的指令(需要程序员自行扩展定义)作用:自己定义的指令, 可以封装一些 dom 操作, 扩展

1.自定义指令(directives) 1.用法 定义:除了Vue内置指令以外的其他 v-开头的指令(需要程序员自行扩展定义)作用:自己定义的指令, 可以封装一些 dom 操作, 扩展额外功能 语法: ① 局部注册 ●inserted:被绑…...

SpringBoot错误码国际化

先看测试效果: 文件结构 1.中文和英文的错误消息配置 package com.ldj.mybatisflex.common;import lombok.Getter;/*** User: ldj* Date: 2025/1/12* Time: 17:50* Description: 异常消息枚举*/ Getter public enum ExceptionEnum {//# code命名规则:模…...

LeetCode 3066.超过阈值的最少操作数 II:模拟 - 原地建堆O(1)空间 / 优先队列O(n)空间

【LetMeFly】3066.超过阈值的最少操作数 II:模拟 - 原地建堆O(1)空间 / 优先队列O(n)空间 力扣题目链接:https://leetcode.cn/problems/minimum-operations-to-exceed-threshold-value-ii/ 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 一次…...

深度学习中的模块复用原则(定义一次还是多次)

文章目录 1. 模块复用的核心原则(1)模块是否有**可学习参数**(2)模块是否有**内部状态**(3)模块的功能需求是否一致 2. 必须单独定义的模块(1)nn.Linear(全连接层&#x…...

Mac——Cpolar内网穿透实战

摘要 本文介绍了在Mac系统上实现内网穿透的方法,通过打开远程登录、局域网内测试SSH远程连接,以及利用cpolar工具实现公网SSH远程连接MacOS的步骤。包括安装配置homebrew、安装cpolar服务、获取SSH隧道公网地址及测试公网连接等关键环节。 1. MacOS打开…...

安全测评主要标准

大家读完觉得有帮助记得关注和点赞!!! 安全测评的主要标准‌包括多个国际和国内的标准,这些标准为信息系统和产品的安全评估提供了基础和指导。 一、安全测评的主要标准 1.1、国际标准 ‌可信计算机系统评估准则(TC…...

qBittorent访问webui时提示unauthorized解决方法

现象描述 QNAP使用Container Station运行容器,使用Docker封装qBittorrent时,访问IP:PORT的方式后无法访问到webui,而是提示unauthorized,如图: 原因分析 此时通常是由于设备IP与qBittorrent的ip地址不在同一个网段导致…...

504 Gateway Timeout:网关超时解决方法

一、什么是 504Gateway Timeout? 1. 错误定义 504 Gateway Timeout 是 HTTP 状态码的一种,表示网关或代理服务器在等待上游服务器响应时超时。通俗来说,这是服务器之间“对话失败”导致的。 2. 常见触发场景 Nginx 超时:反向代…...

Vue 实现当前页面刷新的几种方法

以下是 Vue 中实现当前页面刷新的几种方法&#xff1a; 方法一&#xff1a;使用 $router.go(0) 方法 通过Vue Router进行重新导航&#xff0c;可以实现页面的局部刷新&#xff0c;而不丢失全局状态。具体实现方式有两种&#xff1a; 实现代码&#xff1a; <template&g…...

MCP Server开发的入门教程(python和pip)

使用python技术栈开发的简单mcp server 需要安装 MCP server的需要使用python-sdk,python需要 3.10,安装如下 pip install mcpPS: MCP官方使用的是uv包管理工具,我平时使用pip比较多,所以文中以pip为主。因为mcp的一些依赖包版本并不是最新的,所以最好弄一个干净的环境…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...