关于SpringBoot开发的更多细节

在上篇文章《开发你的第一个SpringBoot应用》已经对SpringBoot基本开发流程有了大体了解,本文将继续对SpringBoot官网进行学习,发现关于SpringBoot开发的更多细节。

基于HAR包的流量录制回放

本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 什么是HAR包? HAR(HTTP Archive format),是一种JSON格式的存档格式文件,通用扩展名为 .har。 HAR包是JSON格式的,打开后,重点关注entries里面的request和response,包含了请求和响应信息。 流量录制 怎么获取HAR包呢?可以网上搜索方法,浏览器F12、抓包工具(Charles、Proxyman等)都可以将HTTP请求导出为HAR包。 生产级别的流量录制很复杂,想要了解的话可以参考阿里开源项目:https://github.com/alibaba/jvm-sandbox-repeater 回放对比 本文重点介绍在导出HAR包后,怎么通过Python来实现回放对比。 使用介绍 一、将HAR包转换为pytest用例 har_file为har包路径,profile配置开启回放,调用Har.har2case()方法将HAR包转换为pytest用例。 转换后会生成: demo_test.py 与HAR同名的pytest用例文件 demo-replay-diff 对比结果目录,暂时为空 sqlite.db 存储HAR包响应数据,标记为expect 二、执行pytest用例 from tep.libraries.Diff import Diff from tep.libraries.Sqlite import Sqlite def test(HTTPRequestKeyword, BodyKeyword): var = {'caseId': '023f387db398504889e0afb8dd1bc99d', 'requestOrder': 1, 'diffDir': '/Users/wanggang424/Desktop/PycharmProjects/tep/tests/demo/case/har/demo-replay-diff'} url = "https://postman-echo.com/get?foo1=HDnY8&foo2=34.5" headers = {'Host': 'postman-echo.com', 'User-Agent': 'HttpRunnerPlus', 'Accept-Encoding': 'gzip'} ro = HTTPRequestKeyword("get", url=url, headers=headers) # user_defined_var = ro.response.jsonpath("$.jsonpath") assert ro.response.status_code < 400 Sqlite.record_actual((ro.response.text, var["caseId"], var["requestOrder"], "GET", "https://postman-echo.com/get?foo1=HDnY8&foo2=34.5"), var) url = "https://postman-echo.com/post" headers = {'Host': 'postman-echo.com', 'User-Agent': 'Go-http-client/1.1', 'Content-Length': '28', 'Content-Type': 'application/json; charset=UTF-8', 'Cookie': 'sails.sid=s%3Az_LpglkKxTvJ_eHVUH6V67drKp0AGWW-.PidabaXOnatLRP47hVyqqepl6BdrpEQzRlJQXtbIiwk', 'Accept-Encoding': 'gzip', 'sails.sid': 's%3Az_LpglkKxTvJ_eHVUH6V67drKp0AGWW-.PidabaXOnatLRP47hVyqqepl6BdrpEQzRlJQXtbIiwk'} body = r"""{"foo1":"HDnY8","foo2":12.3}""" ro = BodyKeyword(body) # ro = BodyKeyword(body, {"$.jsonpath": "value"}) body = ro.data ro = HTTPRequestKeyword("post", url=url, headers=headers, json=body) # user_defined_var = ro.response.jsonpath("$.jsonpath") assert ro.response.status_code < 400 Sqlite.record_actual((ro.response.text, var["caseId"], var["requestOrder"], "POST", "https://postman-echo.com/post"), var) url = "https://postman-echo.com/post" headers = {'Host': 'postman-echo.com', 'User-Agent': 'Go-http-client/1.1', 'Content-Length': '20', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Cookie': 'sails.sid=s%3AS5e7w0zQ0xAsCwh9L8T6R7QLYCO7_gtD.r8%2B2w9IWqEIfuVkrZjnxzm2xADIk34zKAWXRPapr%2FAw', 'Accept-Encoding': 'gzip', 'sails.sid': 's%3AS5e7w0zQ0xAsCwh9L8T6R7QLYCO7_gtD.r8%2B2w9IWqEIfuVkrZjnxzm2xADIk34zKAWXRPapr%2FAw'} ro = HTTPRequestKeyword("post", url=url, headers=headers, data=body) # user_defined_var = ro.response.jsonpath("$.jsonpath") assert ro.response.status_code < 400 Sqlite.record_actual((ro.response.text, var["caseId"], var["requestOrder"], "POST", "https://postman-echo.com/post"), var) Diff.make(var["caseId"], var["diffDir"]) 执行时会记录实际请求响应,存入sqlite数据库,标记为actual。 ...

接口自动化框架设计漫谈V1.0

针对“pytest搭建接口自动化框架”,谈谈对框架设计的当前认知。

开源测试平台开发期待你的加入

本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 背景 在2022年7月6日我曾组织过一次开源测试平台开发报名,有50+人报名,到2023年1月28日项目暂停,如大家在Gittee看到的,除我以外,只有1个人真正提交了代码:奉孝。 原因如其中一位同学所说:“感觉我们大部份还是缺少从0到1的经验,负责的内容有时候不要知道从哪下手,又少了点积极性”。描述得很贴切,可能刚开始动力很足,但因为缺少经验,不够积极,最后实践不了。说的很好,就是做不到。也很无奈。 二次启动,分为2个阶段,第一个阶段是学习阶段,我带着大家一起把teprunner平台从0到1开发一遍,把需要掌握的知识先学一遍,保证有一定基础,挑战能够独立完成模块开发。第二个阶段是开发阶段,共同完成EasyPytest测试平台开发,学以致用,加深对前后端分离项目开发的理解,具有真实的平台开发实践。 学习阶段 你都不维护了,我为什么还要学teprunner?Django没意思?我想学FastAPI? teprunner有一套完整教程,包括前后端源码、11篇电子书教程、2小时视频讲解,虽然我因为工作原因没有继续维护teprunner,但是它仍然非常适合初学者入门学习测试开发,掌握里面的知识,对于后续学习其他技术,都有很大帮助。我的技术提升除了二刷《流畅的Python》和编写了tep开源工具,最大的提升就是完成了teprunner测试平台开发,如果你也能自己动手完成一遍,一定有极大提升。 Django、Flask、FastAPI、SpringBoot,我认为从入门者角度来说,Django是最适合的,它属于开箱即用的框架,很多东西都给你准备好了,你用就行,避免刚开始就陷入环境搭建,三方库拼装、数据库维护的麻烦中,降低理解门槛和操作难度。学会了Django,再学其他的,也很简单,一通百通。刚开始学习,学哪个不是最重要的,最重要的是先学会一个,迈出第一步。以我的经验来说,学习成熟框架Django是个正确选择。 开发阶段 EasyPytest的后端把Django切换为了FastAPI,掌握了Django,再对比FastAPI,就能对后端开发框架有更深入的理解。就像我学Python和Java一样,只学一门百思不得其解,对比一看,豁然开朗。目前已经完成了登录、首页、用户管理的开发,Gitee也有相应源码。未来的规划,是做teprunner的升级版,实现pytest平台化,80%工作本地开发脚本,20%工作交给平台编排运行。 报名方式 添加微信cekaigang,备注参加平台开发,进群。 现开启学习阶段报名: 按需选择,10元/节,录播+直播集中答疑。报名后会获得一份录播+一次集中答疑直播+一个每节课源码。每节课源码跟GitHub上源码不同,只会包含当前这节课进度的源码,一步一步的看到测试平台是如何开发出来的。 课表链接: https://eqgvpqzl6c.feishu.cn/mindnotes/bmncndM8oei2B0MIFE1RMrGuKjd 开发阶段报名需至少参与一节学习课程,从优秀学员或积极学员中选择,时间另行通知。 当然,如果你已经具备奉孝这样的技术能力和积极性,欢迎直接与我联系,请提供你的开源项目地址或在Gitee提交Pull Requests,以证明能够独立完成模块开发,直接参与EP平台共建。

2026-01-03 · 1 分钟 · 20 字 · 测试开发刚哥 · 原创项目 · #Japi

框架V2.0.0开发指南

温馨提示:开发指南,根据V2.0.0编写,不随版本更新维护,仅供入门参考。最新实现请结合教程和源码阅读,教程会在版本发布后维护。

幂等测试

连续调用两次,第一次提交成功,第二次会被驳回——串行重复,系统是防住了的。

刷完3个Java教程后不再犹豫

成年人最大的底气是你拥有一技之长,人生才不会被动。从事测试开发岗位,需要精通一门编程语言,是核心,是大招,是招牌技能。我内心一直在Java和Python之间选择,反复横跳。

我3个月没手写测试用例了,但我的用例采纳率是80%

编写测试用例,是我做测试工作最痛苦的一件事情,没有之一。最难受的是把测试点写成“标准”用例。先要写一个让人一目了然的用例标题,还要讲究什么主谓宾造句,曾经为了让标题好看,我还硬加“验证”2个字前缀。前提条件要把账号数据这些罗列出来。步骤要写清楚每一步干啥,预期也要具体化和量化,不能只写正确。文字写起来啰里啰嗦,写多了头都炸了。

2026-01-03 · 1 分钟 · 13 字 · 测试开发刚哥 · AI技术 · #AI测试

一次全量数据对比工具发现问题的过程与思考

如果没有这次全量数据对比工具,那么也许这个历史问题会继续隐藏着,直到发生线上事故才暴露出来,毕竟人工抽样验证发现的概率只有5.8%。

用PyCharm打个专业的招呼

本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 PyCharm 是什么 PyCharm(读作“拍恰姆”)是 JetBrains 全家桶中的一员,专门用来写 Python 的: 官方网址是: https://www.jetbrains.com/pycharm/ for Professional Developers,顾名思义,它是为专业开发者而生的。 版本选择 PyCharm 有 2 个版本: 左边的 Professional 是专业版,需要付( po )费( jie )。右边的 Community 是社区版,永久免费。一般社区版够用了。我用的是专业版,看着齐全。 打开 PyCharm 安装完成后,打开: 不需要导入配置,点击 OK 按钮: 有 2 个主题,个人偏好左边这种,酷酷的。点击左下角 Skip Remaining and Set Defaults 跳过插件安装,进入主界面(专业版破解后才能看到这个界面,具体破解方法网上贼多): 首次打开,还没有创建项目,会出现引导页。选择 New Project: 这是专业版的界面,社区版会简略一点。选择好存放目录后,还需要配置解释器。点击解释器右边的 ... ,切换到 System Interpreter,选择已经安装好的 Python: OK 后再点击 Create,来了: 老手可以勾选 Tip of the Day 左小角 Don't show tips。 ...