<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[PFFstronger的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/PFFstronger</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; PFFstronger]]></copyright><item><title><![CDATA[从 0 到 1 搭建接口自动化测试框架：分层架构 + 数据驱动 + 接口依赖编排]]></title><link>https://blog.youkuaiyun.com/PFFstronger/article/details/164616340</link><guid>https://blog.youkuaiyun.com/PFFstronger/article/details/164616340</guid><author>PFFstronger</author><pubDate>Tue, 08 Sep 2026 14:38:12 +0800</pubDate><description><![CDATA[分层解耦、数据驱动、多协议统一、接口依赖编排。分层架构：配置层→工具层→协议适配层→业务层→用例层，每层职责清晰数据驱动：YAML 管理测试数据，新增用例只加数据不改代码多协议适配：适配器模式统一 HTTP/RPC/MQ 调用Flow 编排：链式调用 + 自动依赖解析，管理接口间的数据依赖分级执行：P0-P3 四级，按需选择运行范围，回归时间从 4h → 15min。]]></description><category></category></item><item><title><![CDATA[Playwright + AI 自动化测试实战：从传统定位器到自然语言驱动]]></title><link>https://blog.youkuaiyun.com/PFFstronger/article/details/164471631</link><guid>https://blog.youkuaiyun.com/PFFstronger/article/details/164471631</guid><author>PFFstronger</author><pubDate>Mon, 07 Sep 2026 16:35:10 +0800</pubDate><description><![CDATA[维度传统定位器AI 自愈定位器MCP 自然语言改造成本无低（+2 行 import）中（配置 MCP）定位器失效测试挂掉自动修复不适用编写测试速度慢（手写 selector）中（可写描述）快（说话就行）依赖无Ollama 可选Trae/MCP 环境适用场景稳定的 UI频繁变动的 UI快速原型/探索测试生产推荐度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐阶段模式核心能力1.0手写定位器稳定但脆弱，UI 一变就挂2.0AI 自愈定位器定位器失效时 AI 自动修复，改造成本极低3.0。]]></description><category></category></item><item><title><![CDATA[从 Swagger 到自动化测试脚本，一个工具全搞定 —— API 流式测试编排工具实战]]></title><link>https://blog.youkuaiyun.com/PFFstronger/article/details/164432173</link><guid>https://blog.youkuaiyun.com/PFFstronger/article/details/164432173</guid><author>PFFstronger</author><pubDate>Mon, 07 Sep 2026 00:20:19 +0800</pubDate><description><![CDATA["""生成 API 摘要文本，方便 LLM 理解所有接口"""lines = []def summary(self , swagger_doc : SwaggerDoc) - > str : """生成 API 摘要文本，方便 LLM 理解所有接口""" lines = [ ] lines . append(f"# {]]></description><category></category></item><item><title><![CDATA[Code Diff 测试覆盖分析工具 — 开发提测后，自动发现遗漏的测试点]]></title><link>https://blog.youkuaiyun.com/PFFstronger/article/details/164431173</link><guid>https://blog.youkuaiyun.com/PFFstronger/article/details/164431173</guid><author>PFFstronger</author><pubDate>Sun, 06 Sep 2026 22:06:16 +0800</pubDate><description><![CDATA[把"代码变更"和"测试覆盖"之间的鸿沟自动化填补。以前，测试同学需要手动看 Code Diff，凭经验判断哪些功能需要测试。现在，工具自动分析变更影响域，与测试用例智能比对，精准定位遗漏的测试场景。以前，评审通过的用例是静态的，代码变了也不会有任何提示。现在，工具会自动检测哪些用例需要更新，给出具体的修改建议。整个工具基于 Python 开发，轻量易用，可以灵活集成到现有的 CI/CD 流水线中。本文配合 Ollama 本地大模型，如果其他同学公司有采购的大模型也可以接入。]]></description><category></category></item><item><title><![CDATA[基于 Dify 知识库 + Ollama 大模型，自动生成测试用例并导出 XMind 的完整方案]]></title><link>https://blog.youkuaiyun.com/PFFstronger/article/details/164430471</link><guid>https://blog.youkuaiyun.com/PFFstronger/article/details/164430471</guid><author>PFFstronger</author><pubDate>Sun, 06 Sep 2026 20:38:47 +0800</pubDate><description><![CDATA[property"""Skill 唯一标识"""@property"""Skill 描述""""""构建该 Skill 对应的 Prompt 片段"""✅ 自动检索 Dify 知识库，获取业务文档上下文✅ 5 种测试设计方法（等价类、场景法、正交实验法、异常测试、接口测试）✅ Skill 插件机制，可自由组合和扩展✅ 流式输出，实时显示生成进度✅ 表格解析容错（列头自动映射、多行合并）✅ 用例去重 + 质量过滤✅ 同时输出 XMind 思维导图 + Excel 表格。]]></description><category></category></item><item><title><![CDATA[测试必看：AI 核心名词一文搞懂（LLM/RAG/Agent/ 微调）]]></title><link>https://blog.youkuaiyun.com/PFFstronger/article/details/164376483</link><guid>https://blog.youkuaiyun.com/PFFstronger/article/details/164376483</guid><author>PFFstronger</author><pubDate>Fri, 04 Sep 2026 22:17:20 +0800</pubDate><description><![CDATA[大模型不知道你公司内部的业务知识怎么办？答案是：不给模型重新训练，而是给它外挂一份知识库。Agent（智能体）不只是单次问答，它具备自主思考、任务拆解、工具调用、循环执行的能力。Agent = LLM + 思考规划能力 + 外部工具调用在已经训练完成的基础大模型上，使用自己的业务数据集继续二次训练，修改模型本身的权重参数，让模型适配特定的业务格式与话术。对于测试开发工程师来说，不用一开始就钻研底层神经网络原理。优先掌握Prompt 编写、RAG 实现、Agent 编排。]]></description><category></category></item><item><title><![CDATA[测试工程师的职业价值]]></title><link>https://blog.youkuaiyun.com/PFFstronger/article/details/164376140</link><guid>https://blog.youkuaiyun.com/PFFstronger/article/details/164376140</guid><author>PFFstronger</author><pubDate>Fri, 04 Sep 2026 21:39:08 +0800</pubDate><description><![CDATA[对于测试从业者来说，职业瓶颈从来不是岗位本身带来的，而是我们长期固化的工作模式限制了成长。迷茫不是坏事，愿意停下来复盘自我，恰恰是职业转型最好的起点。测试赋予我们的风险思维与全局视野，本身就拥有非常广阔的延伸空间。打破日复一日的循环，找到属于自己的那条成长赛道，才是接下来最重要的课题。本文仅为个人工作感悟，欢迎各位测试同行在评论区交流自己的职业思考。]]></description><category></category></item><item><title><![CDATA[AI到底如何生成测试用例]]></title><link>https://blog.youkuaiyun.com/PFFstronger/article/details/163883908</link><guid>https://blog.youkuaiyun.com/PFFstronger/article/details/163883908</guid><author>PFFstronger</author><pubDate>Wed, 19 Aug 2026 12:13:18 +0800</pubDate><description><![CDATA[*这个工具本质上是一套 AI 驱动的测试用例生产流水线。围绕“**从需求到用例集**”这一主线，这个工具并不是简单调用大模型生成测试用例，而是将**代码扫描、需求理解、策略设计、用例生成、人工审阅和平台导入**串成了一套完整的 AI 测试用例生产流水线。- **增量识别**：结合 `git log --since=<baseline>` 和文件 `mtime` 双依据识别变更，避免每次全量扫描。- **审计留痕**：完整保留 `payload` 和 `response`，导入失败可直接回溯和重放。]]></description><category></category></item><item><title><![CDATA[学生表（大家最喜欢的面试题）]]></title><link>https://blog.youkuaiyun.com/PFFstronger/article/details/117520458</link><guid>https://blog.youkuaiyun.com/PFFstronger/article/details/117520458</guid><author>PFFstronger</author><pubDate>Thu, 03 Jun 2021 15:14:17 +0800</pubDate><description><![CDATA[背景
面试过程中发现，面试官最喜欢出学生成绩表，当然我曾经也出现过，写的慢，被面试官吐槽，你这SQL不熟悉啊，当然是做题的打开方式不对。面对多表查询，要至少在纸上画出关系图，写起来游刃有余，面试的心理确实也需要克服一下，我承认我确实也不喜欢面试官在对面看着我做题，需要克服一下，话不多说，每个题目要自己去写。
涉及的数据库
请书写下面的SQL语句如下表：
Student(Stid,Sname,Sage,Ssex) 学生表 Stid:学号 Sname:学生姓名 Sage:学生年龄 Ssex:学生性别
Cours]]></description><category></category></item><item><title><![CDATA[python 笔试题目]]></title><link>https://blog.youkuaiyun.com/PFFstronger/article/details/117515718</link><guid>https://blog.youkuaiyun.com/PFFstronger/article/details/117515718</guid><author>PFFstronger</author><pubDate>Thu, 03 Jun 2021 13:10:21 +0800</pubDate><description><![CDATA[背景
记录下最近遇见的笔试题，记录一下，可供大家可以参考，提醒我平时没事可以看看算法的题目，题目如下
题目
1.功能：输入任意一个整数数组，得到想要的数组输出；
（如下是两个case）：
1）输入数组：[1,2,3,4,5,7,8]  ==&gt;输出数组：[“1-&gt;5”,”7-&gt;8”]
2）输入数组：[1,4,5,6,9,10]==&gt;输出数组：[“1”,”4-&gt;6”,”9-&gt;10”]
请理解case中的输出规则，写一个函数实现如上功能；
解析：先理解题目，其实就是数组内的连续]]></description><category></category></item><item><title><![CDATA[python 几种读写的用法]]></title><link>https://blog.youkuaiyun.com/PFFstronger/article/details/117257708</link><guid>https://blog.youkuaiyun.com/PFFstronger/article/details/117257708</guid><author>PFFstronger</author><pubDate>Tue, 25 May 2021 16:22:31 +0800</pubDate><description><![CDATA[背景
python读写文件，是最基本的文件操作，熟悉每种读写方法，大大加快工作效率。使用场景不用多说，可以作为数据参数化的开端，也可以作为数据生成的末端。
read()  readline()  readlines() 的区别和用法
&lt;1&gt;read()  读取整个文件，将文件内容放到一个字符串变量中， 不适用于读取大文件
f = open('C:\\Users\\pengfei\\Desktop\\000', 'r+', encoding='utf-8', errors='ignore')
li]]></description><category></category></item><item><title><![CDATA[如何python批量往mysql中插入测试数据]]></title><link>https://blog.youkuaiyun.com/PFFstronger/article/details/117255315</link><guid>https://blog.youkuaiyun.com/PFFstronger/article/details/117255315</guid><author>PFFstronger</author><pubDate>Tue, 25 May 2021 14:36:15 +0800</pubDate><description><![CDATA[背景
大家总会遇到一种情况。测试数据产品，当前没有数据或者数仓的数据没有同步过来。是不是纠结的很，如何高效的在mysql中生成测试数据，辅助测试尤其重要
pymysql相关知识
pymysql.Connect()参数说明
host(str):      MySQL服务器地址
port(int):      MySQL服务器端口号
user(str):      用户名
passwd(str):    密码
db(str):        数据库名称
charset(str):   连接编码
connecti]]></description><category></category></item><item><title><![CDATA[type、object、class 之间的关系]]></title><link>https://blog.youkuaiyun.com/PFFstronger/article/details/107487597</link><guid>https://blog.youkuaiyun.com/PFFstronger/article/details/107487597</guid><author>PFFstronger</author><pubDate>Tue, 21 Jul 2020 14:42:06 +0800</pubDate><description><![CDATA[背景
虽然写代码自己感觉无痛无痒，但是时常我看不懂源码，因为近期我打算深入学习一下OOP相关的知识
python中一切皆对象
查看一个类(class)的父类，可以使用class_name.__bases__的形式来查看
如果想要查看一个对象是由哪个类实例化而来，可以使用type() 或 object_name.__class__来查看。表示对象属于什么类型。
class People:
    def __init__(self,title):
        self.title = title


cl]]></description><category></category></item><item><title><![CDATA[CPU性能分析01]]></title><link>https://blog.youkuaiyun.com/PFFstronger/article/details/107376625</link><guid>https://blog.youkuaiyun.com/PFFstronger/article/details/107376625</guid><author>PFFstronger</author><pubDate>Thu, 16 Jul 2020 15:47:54 +0800</pubDate><description><![CDATA[简介
CPU性能分析是做好性能测试的关键，学会查看CPU的处理能力，分析性能瓶颈
查看CPU相关信息命令
#查看CPU的信息
cat /proc/cpuinfo

重要参数：
physical id：CPU的物理封装的编号，从0开始依次编码；
siblings：  每个物理封装上的逻辑核心数目；
cpu cores： 每个物理封装上的物理核心数目；
core id：   当前物理核心在物理封装上的编号
processor： 逻辑CPU核心编号，从0开始依次编码；
总核数 =  物理CPU的个数 * 每颗物理]]></description><category></category></item><item><title><![CDATA[Grafana+Jmeter+Influxdb性能监控平台]]></title><link>https://blog.youkuaiyun.com/PFFstronger/article/details/107336358</link><guid>https://blog.youkuaiyun.com/PFFstronger/article/details/107336358</guid><author>PFFstronger</author><pubDate>Thu, 16 Jul 2020 02:41:26 +0800</pubDate><description><![CDATA[简介
数据可视化，数据直观，筛选功能强大，拓展能力强，更加高大上，可以屏幕展示
InfluxDB    Go 语言开发的一个开源分布式时序数据库，非常适合存储指标、事件、分析等数据
Grafana    纯 Javascript 开发的前端工具，用于访问 InfluxDB，自定义报表、显示图表等
过程如下图

我是在虚拟机上安装的，我这里有InfluxDB，Grafana包
将文件进行解压
安装InfluxDB
安装完成后，修改InfluxDB的配置，主要配置jmeter存储的数据库与端口号
vim /et]]></description><category></category></item><item><title><![CDATA[jmeter CLI无界面运行方式]]></title><link>https://blog.youkuaiyun.com/PFFstronger/article/details/107334136</link><guid>https://blog.youkuaiyun.com/PFFstronger/article/details/107334136</guid><author>PFFstronger</author><pubDate>Tue, 14 Jul 2020 11:26:26 +0800</pubDate><description><![CDATA[简介
CLI = Common Line，命令行模式，无界面模式，真正做负载测试时，应该使用 CLI 模式运行，而不是 GUI，而且在服务器上运行脚本都是CLI模式，无界面模式运行方式可以大大减少资源的开支，也就是说压力或负载测试更准确。
运行命令介绍
当我们运行jmeter时候，界面显示了运行命令

jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
下面介绍相关参数
字段	含义
-n	    指定 JMe]]></description><category></category></item><item><title><![CDATA[jmeter  分布式的搭建和应用]]></title><link>https://blog.youkuaiyun.com/PFFstronger/article/details/107294235</link><guid>https://blog.youkuaiyun.com/PFFstronger/article/details/107294235</guid><author>PFFstronger</author><pubDate>Tue, 14 Jul 2020 10:51:34 +0800</pubDate><description><![CDATA[背景
想要知道分布式，必须谈一谈企业中服务器使用的集群的概念，简单说，就是企业采用集群，使用一个ip由多台服务器进行提供服务。那么咱们压力测试本身一台机器的压力有限，那么就需要多台机器并发的向服务器发送请求，分摊压力。
分布式条件
主机和助攻机的jmeter要一致
1、jmeter的版本一致
2、jdk的主版本一致
3、jmeter脚本的csv文件要一致（特别要注意csv的路径要一致）
4、jmeter的插件要一致
注意：同一局域网，防火墙可以开放的端口，保证一致性的简单方法，直接压缩本地的jmeter包
]]></description><category></category></item><item><title><![CDATA[jmeter持续集成 jenkins+ant+jmeter]]></title><link>https://blog.youkuaiyun.com/PFFstronger/article/details/107315539</link><guid>https://blog.youkuaiyun.com/PFFstronger/article/details/107315539</guid><author>PFFstronger</author><pubDate>Mon, 13 Jul 2020 17:21:52 +0800</pubDate><description><![CDATA[前言
企业中使用持续化集成交付的案例越来越多，开源的CI/CD软件也越来越多，CI持续集成，CD持续交付，本文讲jmeter+jenkins+ant的应用
环境的准备工作
jenkins的安装有两种方式
1.war 包放 Tomcat 下
2.直接安装 jenkins.msi
我采用的第1种方式
Tomcat下载地址：https://tomcat.apache.org/download-90.cgi

JDK环境的配置：
我需要强调的是注意检查相关配置
新建-&gt;变量名"JAVA_HOME"，变量值"C]]></description><category></category></item><item><title><![CDATA[jmeter 服务端监控工具，Nmon使用方法]]></title><link>https://blog.youkuaiyun.com/PFFstronger/article/details/107294174</link><guid>https://blog.youkuaiyun.com/PFFstronger/article/details/107294174</guid><author>PFFstronger</author><pubDate>Sun, 12 Jul 2020 01:49:17 +0800</pubDate><description><![CDATA[简介
nmon是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具，它能在系统运行过程中实时地捕捉系统资源的使用情况，记录的信息比较全面，
并且能输出结果到文件中，然后通过nmon_analyzer工具产生数据文件与图形化结果。nmon并非实时监控，它更适用于非实时监控数据的场景
如何使用
nmon的官方下载地址：http://nmon.sourceforge.net/pmwiki.php?n=Site.Download
根据我这边服务器版本，我下载的下面文件，将文件上传到服务器

新建目录： ]]></description><category></category></item><item><title><![CDATA[批量修改文件名  （python对于文件目录的操作）]]></title><link>https://blog.youkuaiyun.com/PFFstronger/article/details/107251875</link><guid>https://blog.youkuaiyun.com/PFFstronger/article/details/107251875</guid><author>PFFstronger</author><pubDate>Fri, 10 Jul 2020 17:13:32 +0800</pubDate><description><![CDATA[前言
测试总遇到各种造数据的情况，在测试文件数量不足的情况，我需要批量修改文件名，才能符合测试需求，客户只提供部分文件，这样就要批量修改文件名。
如何做
os.listdir() 可以读取文件夹中的文件，存放在列表中，os.rename()可以把文件重命名，那么我就可以写脚本了，这次简单粗暴吧。
import os

class Rename():
    '''
    重命名文件名，将文件名写入指定的txt文件中
    '''
    def __init__(self,path):
        ]]></description><category></category></item></channel></rss>