接口自动化测试-Jmeter+ant+jenkins实战持续集成(详细)
目录:导读
- 前言
- 一、Python编程入门到精通
- 二、接口自动化项目实战
- 三、Web自动化项目实战
- 四、App自动化项目实战
- 五、一线大厂简历
- 六、测试开发DevOps体系
- 七、常用自动化测试工具
- 八、JMeter性能测试
- 九、总结(尾部小惊喜)
前言
1、下载安装配置Jmeter
首先下载jmeter工具,并配置好环境变量;
参考之前写过的文章:https://blog.csdn.net/shuang_waiwai/article/details/121641310
jmeter默认保存的是.jtl格式的文件,要设置一下bin/jmeter.properties,文件内容,保存jmeter.save.saveservice.output_format=xml
2、下载安装配置ant
下载ant工具,并配置好环境变量;
直接在官网下载即可:https://ant.apache.org/bindownload.cgi
3、通过ant触发jmeter脚本的配置
将JMeter所在目录下extras子目录里的ant-JMeter-1.1.1.jar复制到Ant所在目录lib子目录之下,这样Ant运行时才能找到"org.programmerplanet.ant.taskdefs. jmeter.JMeterTask"这个类,从而成功触发JMeter脚本。
jmeter中extras文件夹下;如下图:
ant工具包的lib文件下
4、自动发送邮件的jar包配置
如下图:
1、在网站上下载commons-email.jar包,然后放在 ant 的 \lib 目录下;
地址:https://commons.apache.org/proper/commons-email/download_email.cgi
2、在网站上下载activation-1.1.1.jar包,然后放在 ant 的 \lib 目录下;
地址:http://www.java2s.com/Code/Jar/a/Downloadactivation111jar.htm
3、在网站上下载javax.mail.jar包,然后放在 ant 的 \lib 目录下;
地址:https://javaee.github.io/javamail/
5、建立如下目录结构
resultlog:
html =>ant转化后的结果。
jtl=>imeter生成的结果
script:
jmeter执行的脚本
配置build.xml文件:
源码:
<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="run" basedir="."><tstamp><format property="time" pattern="yyyyMMddhhmm" /></tstamp><property environment="env"/><property name="ReportName" value="TestReport" /><!-- 需要改成自己本地的 Jmeter 目录--> <property name="jmeter.home" value="D:\B_TOOLS\apache-jmeter-2.13" /><!-- jmeter生成jtl、html格式的结果报告的路径--> <property name="jmeter.result.dir" value="${env.WORKSPACE}/results/${env.BUILD_ID}" /><!-- 生成的报告的前缀--> <property name="jmeter.result.jtlName" value="${jmeter.result.dir}/${ReportName}.jtl" /><property name="jmeter.result.htmlName" value="${jmeter.result.dir}/${ReportName}.html" /><target name="run"><echo message="start..."/><antcall target="clean" /><antcall target="test" /><antcall target="report" /></target><target name="clean"><mkdir dir="${env.WORKSPACE}/results/${env.BUILD_ID}" /></target><target name="test"><taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" /><jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}"><!-- 声明要运行的脚本"*.jmx"指包含此目录下的所有jmeter脚本--><testplans dir="D:\B_TOOLS\apache-jmeter-2.13\demo" includes="*.jmx" /><property name="jmeter.save.saveservice.output_format" value="xml"/></jmeter></target><target name="report"><xslt in="${jmeter.result.jtlName}"out="${jmeter.result.htmlName}"style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" /><!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 --> <copy todir="${jmeter.result.dir}"><fileset dir="${jmeter.home}/extras"><include name="collapse.png" /><include name="expand.png" /></fileset></copy></target>
</project>
build.xml文件要放到pc或者app的目录下;如下图:
配置build.xml文件内容的详细信息
重点:smtp的授权码;如QQ邮箱
配置完成后,打开DOS窗口进行build.xml文件所在的目录,输入ant即可生成报告并发送到指定人的邮箱中;结果如下图
6、通过jenkins进行构建并自动运行jmeter脚本
新建item任务;如下图
构建触发器,设置多久触发一次
定时任务:
分钟:小时:一月的天数:月份:一周的天数
0-59:0-23:1-31:1-12:0-7(0和7表示周天)
举例:
每天晚上20点整自动执行
0 20 * * *
一周1,3,5晚上20点整执行
0 20 * * 1,3,5
每周周1-周5晚上20点整执行
0 20 * * 1-5
一周内每2天,晚上20点整执行
0 20 * * */2
跳转到构建步骤界面,点击增加构建步骤选择Invoke Ant
再点击高级按钮
把build.xml文件的路径拷贝到下图位置
点击保存返回到主页面;点击立即构建开始执行
执行结果,查看接收人邮箱
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图 |
一、Python编程入门到精通
二、接口自动化项目实战
三、Web自动化项目实战
四、App自动化项目实战
五、一线大厂简历
六、测试开发DevOps体系
七、常用自动化测试工具
八、JMeter性能测试
九、总结(尾部小惊喜)
勇敢地面对挑战,坚定地追求梦想。努力不倦,才华绽放;奋斗不息,辉煌终现。相信自己的无限潜能,抓住机会,创造属于自己的奇迹。
不论前路多荆棘,燃起希望之火;不论身处何困境,绽放勇往直前的力量。踏遍山河,追寻心中的理想;扬起风帆,航向未来的辉煌。相信自己,奋斗不息,成就无限可能的精彩人生!
岁月如梭,奋斗不止;拥抱梦想,燃烧激情。不畏困难,勇攀高峰;用汗水浇灌,绽放辉煌。每一份努力,都值得骄傲;每一次拼搏,都离成功更近。
相关文章:

接口自动化测试-Jmeter+ant+jenkins实战持续集成(详细)
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、下载安装配置J…...

最长连续序列——力扣128
文章目录 题目描述法一 哈希表 题目描述 法一 哈希表 用一个哈希表存储数组中的数,这样查看一个数是否存在即能优化至 O(1) 的时间复杂度 每次在哈希表中检查是否存在 x−1 即能判断是否需要跳过 int longestConsecutive(vector<int>& nums){unordered_s…...

uniapp app端 echarts 设置tooltip的formatter不生效问题以及解决办法
需求一: y轴数据处理不同数据增加不同单位 需求二: 自定义图表悬浮显示的内容 需求一:实现方式 在yAxis里面添加formatter yAxis: [{//y轴显示value的设置axisLabel: {show: true,formatter (value, index) > {var valueif (value > 1…...

Spring入门-技术简介、IOC技术、Bean、DI
前言 Spring是一个开源的项目,并不是单单的一个技术,发展至今已形成一种开发生态圈。也就是说我们可以完全使用Spring技术完成整个项目的构建、设计与开发。Spring是一个基于IOC和AOP的架构多层j2ee系统的架构。 SpringFramework:Spring框架…...

深度学习之反向传播
0 特别说明 0.1 学习视频源于:b站:刘二大人《PyTorch深度学习实践》 0.2 本章内容为自主学习总结内容,若有错误欢迎指正! 1 forward(前馈运算)过程 通过输入相应的x和权重w(可能涉及bais偏置…...
网络安全 Day23-mariadb数据库数据管理和备份
mariadb数据库数据管理和备份 1. 管理数据库中的库2. 管理库中的表3. 管理表中的字段(列)4. 管理表中的数据(行)5. 数据库数据备份与恢复 1. 管理数据库中的库 进入指定数据库: use 数据库名字库的增删改查 创建数据库: create database 数据库名字指定字符及创建数据库: CREA…...

Centos7 上安装 redis-dump 和redis-load 命令
一、安装rvm 1、安装GPG keys gpg2 --keyserver keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDBcurl -sSL http://rvm.io/mpapis.asc | gpg2 --import - curl -sSL http://rvm.io/pkuczynski.asc | g…...
【NLP PyTorch】字符级RNN循环网络模型姓氏对应国家分类(项目详解)
字符级RNN模型姓氏对应国家分类 1 序言1 数据来源与加载1.1 数据来源1.2 数据加载2 数据预处理2.1 单个字符数据处理标准2.2 单词的张量构造3 模型创建4 模型训练5 模型检验6 模型预测7 模型部署1 序言 本文的任务主要来源于PyTorch的官方教程,即给定各国人名的数据集,你需要…...

C++设计模式之责任链设计模式
C责任链设计模式 什么是责任链设计模式 责任链设计模式是一种行为型设计模式,它允许多个处理请求的对象串联起来,形成一个处理请求的链。每个对象都有机会处理请求,如果该对象不能处理请求,则将请求传递给链中的下一个对象。 该…...

《Java-SE-第二十三章》之单例模式
文章目录 单例模式概述饿汉模式懒汉模式单线程版懒汉单例多线程版枚举实现单例 单例模式概述 单例模式是设计模式中的一种,其作用能保证某个类在程序中只存在唯一一份实例,而不会创建多份实例。单例模式具体的实现方式, 分成 “饿汉” 和 “懒汉” 两种.。饿汉模式中的饿不并不…...
如何快速同步第三方平台数据?
全量的数据主要是针对多个系统的历史数据,大概有几千万数据,只需要初始化一次即可。 而增量的数据,是系统后续变更的数据。 这个需求其实不简单,至少有以下难点: 不能直接访问第三方数据库。 不能将历史数据导出到excel中,有泄露数据的风险。 如何快速同步历史数据? 增…...
反射(一)
动态 VS 静态语言 动态语言:运行时,可以改变其结构。 Object-C、C#、JS、PHP、Python JS 就是动态语言。 function f() {var x "var a3; var b5; alert(ab)";eval(x); }静态语言:运行时,结构不可变。 Java、C、C J…...

29.利用fminbnd 求解 最大容积问题(matlab程序)
1.简述 用于求某个给定函数的最小值点。 使用方法是: xfminbnd(func,x1,x2) func是函数句柄,然后x1和x2就是函数的区间,得到的结果就是使func取最小值的x值 当然也可以使用[x,fv]fminbnd(func,x1,x2)的方式,这个时候fv就是函数…...

express学习笔记7 - docker跟mysql篇
安装Docker和Navicat Docker 进官⽹https://docs.docker.com/get-docker/ 选择机型安装即可。 Navicat(也可以在网上找个破解版本) 进官⽹https://www.navicat.com/en/products/navicat-premium 安装完之后连接新建⼀个数据库连接 然后再⾥⾯新建⼀个数…...
Leetcode(一):数组、链表部分经典题目详解(JavaScript版)
数组、链表部分算法题 一、数组1. 二分查找2. 移除数组元素3. 有序数组的平方4. 长度最小的子数组5. 螺旋矩阵 二、链表1. 删除链表元素2. 设计链表3.反转链表4.两两交换链表中的节点5.删除链表倒数第n个节点6.环形链表 提前声明:本博客内容均为笔者为了方便个人理解…...

内网穿透的底层原理是什么
目录 内网穿透的功能 内网穿透的底层原理 内网穿透的功能 前段时间研究了一下内网穿透,果真是一个神奇的技术,就拿企业级内网穿透-神卓互联来说,在需要在本地安装一个神卓互联客户端,简单设置一下服务应用的端口号,就…...
Bash配置文件
当Bash以登录Shell启动的时候,会首先读取并执行文件“/etc/profile”中的命令。 接着,Bash会依次查找文件“~/.bash_profile”,“~/.bash_login”,“~/.profile”,读取并执行找到的第一个文件中的命令。也就是说&…...
写Acknowledgement的时候,latex日志出现警告
用latex写论文的时候,\section{Conclusion}下面添加 \backmatter \bmhead{Acknowledgments}时报错:错误log: \bmhead Package hyperref Warning: Difference (4) between bookmark levels is greater than one, level....错误原因ÿ…...
GCC生成map文件
要生成GCC的map文件,可以使用以下指令: gcc <source_files> -Wl,-Map<output_file>.map 其中, <source_files>是要编译的源文件列表,<output_file>是生成的map文件的名称-Wl选项告诉GCC将后面的参数传…...

IOS看书最终选择|源阅读转换|开源阅读|IOS自签
环境:IOS想使用 换源阅读 问题:换新手机,源阅读下架后,没有好的APP阅读小说 解决办法:自签APP 转换源仓库书源 最终预览 :https://rc.real9.cn/ 背景:自从我换了新iPhone手机,就无法…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...