news 2026/10/17 19:00:10

DeepSeek赋能自动化测试:从pytest到Appium/Selenium的实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DeepSeek赋能自动化测试:从pytest到Appium/Selenium的实战指南

最近老有人问我,说现在 AI 这么火,DeepSeek 到处都在聊,那它到底能不能用在自动化测试上?是不是真的能帮人少加班?我的答案是:能,而且用对了地方,效果非常明显。但前提是你得搞清楚 AI 的边界,把它放在合适的环节里,而不是指望它一巴掌帮你把整个测试体系都重写了。这篇就把我过去一段时间用 DeepSeek 配合 pytest、Appium、Selenium 这些主流框架做自动化测试的完整思路、实操过程、踩过的坑和最终沉淀下来的方法,一次性说清楚。

1. 先搞清楚:AI 到底在自动化测试里替你干了哪些活

1.1 传统自动化测试的效率瓶颈在哪

聊 AI 之前,咱们得先坦诚面对一个问题:自动化测试发展这么多年,框架已经很成熟了,selenium 也好、pytest 也好,为什么实际落地时效率还是上不去?说白了,卡点从来不在"执行"这一环,而在写用例、维护数据和排查失败这三个环节。

我在好几家团队里都看到过同样的场景:自动化用例写了一两千条,但每次版本迭代,光是修 locator、改接口字段、补测试数据就要花掉一大半时间。写用例本身倒不慢,真正吃时间的是"跟着需求变化反复改"。而且很多测试同学写用例的姿势还是"手敲",遇到新的接口文档、新的页面原型,得一点一点翻译成代码。这种活儿重复性极高,正好是 AI 最擅长消化的部分。

1.2 AI 能切入的四个核心环节

我实操下来,DeepSeek 这类大模型在自动化测试里真正能稳定提效的,主要是四个环节:

第一是测试用例代码的生成。你给它一个接口文档、一个页面需求描述,它能直接产出 pytest 函数、selenium click 操作、appium 滑动操作这类基础代码。第二是测试数据的构造。不管是接口的字段组合、边界值,还是数据库里需要预置的数据,AI 可以根据你给的规则批量生成。第三是脚本维护。页面改了、接口字段重命名了,你把新代码和报错丢给它,它能非常快地定位差异并给出修改建议。第四是问题定位。用例跑了失败,把日志贴过去,它能辅助判断是环境问题、数据问题还是代码本身的问题。

这四个环节覆盖了我日常大概百分之七十的工作量。剩下的百分之三十,比如复杂的业务逻辑编排、跨系统状态校验、架构层面的设计,还是得靠人的脑子。

1.3 什么样的团队和项目最适合引入 AI

也不是所有项目都适合一上来就上 AI。我个人的判断标准很简单:业务规则清晰、输入输出明确的场景优先。像接口测试、表单流程测试、数据校验这种,AI 很容易理解和生成;像涉及大量人工主观判断的视觉还原测试、音频视频测试,AI 虽然能做,但现阶段更适合做一些辅助性的图像比对和异常帧识别,别指望它全自动。

如果你所在的团队已经有比较成熟的自动化用例沉淀,那引入 AI 是在现有资产上升级;如果你们还在从零搭建框架,AI 也能帮你省掉很多脚手架的时间,但对团队核心人员的要求反而更高,因为你需要有能力判断 AI 生成的东西到底对不对。

2. 实战第一步:用 DeepSeek 生成高质量的 pytest 测试代码

2.1 写好提示词的四个关键要素

很多人觉得 AI 生成代码不好用,直接用 DeepSeek 官网聊天窗口也行,很快。但我试过之后发现,大部分说"AI 写的代码没法用"的同事,问题不在 AI,在提示词写得太模糊。你给一句"写一个登录测试",它当然只能给你一个过家家级别的脚本。要让 AI 输出能直接跑的代码,提示词里至少得有四个要素:测试目标的业务背景、被测对象的技术栈、明确的输入输出示例、以及你对代码风格或框架结构的要求。

给你看个我常用的模板参考:

你是资深测试开发。我在用 pytest + requests 做接口自动化测试。 被测接口是用户登录接口,POST /api/v1/login,入参为 username、password, 正常返回 code=200、token 字段;密码错误时返回 code=4001。 请帮我生成完整测试用例,包含: 1. 正确用户名密码登录成功 2. 密码错误时断言返回值 3. 缺少必填参数时的异常处理 要求:使用 fixture 管理 base_url,断言要精确到具体字段,代码要符合 pytest 风格。

在这个例子里,我的四个要素分别是:技术栈(pytest + requests)、业务背景(登录接口)、输入输出(路径、参数、返回字段)、代码要求(fixture、断言精度)。信息越具体,生成结果就越接近可用状态。这是一条我以为值得反复强调的经验:AI 生成代码不是魔法,它的输出质量上限,大概率等于你的提问下限。

2.2 从需求描述到可运行用例的一次完整示例

我拿一个真实项目里的例子给你拆一遍。当时要测一个优惠券系统的发券接口,需求描述就一句:"用户满足条件后领取优惠券,同一用户只能领一次"。这种描述给 AI,它大概率只能生成一个"只调接口看是否返回成功"的用例。这不叫自动化测试,这叫接口连通性检查。合格的用例应该覆盖参数边界、状态幂等、并发重复请求、优惠券库存扣减是否准确,等等。

我是这么给 DeepSeek 下需求的:

优惠券领取接口 POST /v1/coupon/receive,入参:userId、couponId、channel。 业务规则: 1. 用户必须满足会员等级≥2 才能领取; 2. 同一用户同一批次活动只能领取一次,重复领取返回 code=5001; 3. 每个批次优惠券数量有限,库存不足返回 code=5002; 4. 信道只允许 app 和 h5,其他渠道返回 code=4000。 请生成 pytest 用例,覆盖以上规则,并考虑并发场景下单测,使用 pytest 的 parametrize 实现参数化。

它生成出来的代码骨架基本是可用的,有 parametrize 参数化表、有独立 test 函数,还自动加了多线程并发测试的雏形。我拿到手大概只改了百分之十的代码,主要是一些自定义断言函数的调用方式、项目里统一的响应封装类名。桐下省掉我大把从网上翻资料找格式化写法的时间。

2.3 代码生成后的审查与打磨清单

AI 生成的代码不代表可以无脑合并到主干,尤其是测试代码,它的目标不只是"跑通",还要"能发现 bug"。所以我在提交前会过一遍自己的审查清单,一般固定看五点:

第一看断言的强度,AI 很容易生成只断言状态码 200 的用例,这种用例遇到业务逻辑错误时根本拦不住,要在关键位置断言业务码、数据库落库状态或响应体里的具体字段。第二看测试独立性,AI 生成的用例经常会假设前置数据存在,但真实项目里你需要通过 fixture 去构造环境,否则用例换个环境就挂。第三看参数化是否覆盖边界值,AI 默认只覆盖它理解到的"正常 + 一个异常",你要自己补空值、超长值、特殊字符。第四看是否保留了日志与现场信息,用例失败时如果什么上下文都没有,排查成本会很高,我一般要求 AI 生成的代码里带 run_id、请求参数快照、响应体快照。第五看有没有"假通过"陷阱,也就是 try except 把异常吞掉、只在测试里打印日志而不加断言这类写法,必须删掉。

这份清单看起来麻烦,但它本质上是把人工测试设计经验前置进 AI 协作流程,坚持做下来,你和 AI 的配合会越来越顺。

3. 进阶玩法:AI 辅助接口自动化测试与测试数据构造

3.1 接口自动化框架怎么和 AI 结合

接口自动化是在我看来 AI 落地效果最好的一个测试领域,没有之一。因为它输入输出结构清晰,断言规则明确,大模型理解起来几乎零门槛。我在项目里用的是 pytest + requests 的结构,配合一套自研的断言封装,大概像这样组织:

import requests import pytest def _request(method, url, **kwargs): resp = requests.request(method, url, timeout=10, **kwargs) return resp

这个最基础的封装,适合直接丢给 DeepSeek 作为上下文参考。然后你让它生成测试用例时,它会基于你已有的请求封装来组织代码,而不是另起炉灶生成一堆独立请求的脚本。这一点对后续维护非常重要:一旦项目里改了统一鉴权逻辑,你只需要改一个封装,几百个用例跟着生效。如果让 AI 各自为战写散装代码,改起来就等着哭吧。

实际项目中我发现,AI 最强的不是"从零写一个框架",而是"基于你现有的代码风格去补全用例"。所以正确的用法是先给它看两三个你手写的典型用例,再让它生成同风格的新用例。它会模仿得又快又像,几乎不用调整。

3.2 测试数据构造的高效姿势

做接口自动化最烦人的工作之一,就是造数据。你要测用户领券,就得先有一个等级满足条件、信用分正常、没有风控标记的用户;你想测退货,就得先有订单、支付流水、物流单号,还得让订单状态走到指定节点。以前我的做法是写一堆 SQL 脚本和造数接口的调用脚本,每次跑测试前手工触发。现在我用 DeepSeek 来干两件事,效率提升特别明显。

第一件事是让它根据数据库表结构生成测试数据的 SQL 脚本。你只需要把 create table 语句贴给它,说清楚要造什么样的数据,它会直接生成带外键关联的 insert 语句。需要注意的是,AI 生成的 SQL 可能存在外键依赖顺序问题、字符集问题,我一般会提醒它注意表之间的依赖顺序,并用事务包裹,这样造数失败时可以整体回滚。第二件事是让它生成通过接口链路造数的脚本,比如先注册、再登录、再下单、再支付,一连串串起来。这种链路脚本早期我手写得花半天,现在 AI 一次性生成后我只要调一下业务差异部分。

3.3 怎么让 AI 帮你跑通参数化与断言覆盖

接口测试有一个很核心的思路叫参数化:同一接口,不同参数组合,跑到各个分支里去。以前大家要么手写大量的 parametrize 列表,要么去业务代码里找枚举值,维护成本极高。DeepSeek 在这里能帮上大忙,原因是它很擅长根据你对业务规则的文字描述,推断出参数组合矩阵。

我试过一个比较经典的场景,订单查询接口有分页参数、状态参数、排序参数,混合起来有几十种组合。我把接口文档和业务规则描述贴给它,它在两分钟内生成了一份带 pytest.mark.parametrize 装饰器的完整用例文件,还自己给每个组合起了有业务含义的 test id,失败用例一眼就能看懂是哪种参数场景出了问题。你只需要在生成后抽查几组数据是否符合业务规则,剩下的大胆交给 CI 去跑。

不过这里要提醒一个坑:AI 在推断参数组合时,偶尔会遗漏一些"不可能出现"的组合,比如它可能不知道某个渠道和某个支付方式根本不会同时出现。这种隐性业务知识它接触不到。所以我的习惯是,拿到 AI 生成的参数化矩阵后,先让最熟悉业务的产品或资深测试过一眼,把不可能场景剔除,再进版本库。

4. UI 自动化场景:AI 如何加速 Appium 与 Selenium 的落地

4.1 定位器生成与维护的痛点转化

UI 自动化里最让人崩溃的就是定位器维护。用 Selenium 写 web 端,用 Appium 写移动端,动不动就因为前端改了 class 名、加了层 dom 结构,一整批用例瞬间变红。以前定位器基本靠手写和猜,现在 AI 成了我处理这个问题的第一工具,但没有那么神秘,只是一个"转译"过程。

我在 chrome 的 devtools 里复制一段元素对应的 HTML,或者 Appium dump 出来的 xml 片段,贴给 DeepSeek,让它在原来的定位策略基础上给出更稳的方案。它能提出的思路包括:换成相对定位、用 xpath 基于文本匹配、用>tools = { "call_api": call_api, "assert_db": assert_db, "read_case_data": read_case_data } def run_agent(task): messages = [ {"role": "system", "content": "你是测试执行助手,以下是你可以调用的工具:..."}, {"role": "user", "content": task} ] for step in range(10): response = call_deepseek(messages, tools=tools) action = parse_action(response) if action["type"] == "finish": return action["summary"] result = execute_tool(action) messages.append(...)

跑起来之后效果还是挺有趣的,你给它一句"跑一遍登录全链路并校验优惠券数量变化",它真的会自己编排调用、登录、领券、查库,最后返回一份结果。这里面最值得警惕的是要让 AI 每一步行动都有日志输出,方便出问题时回放追踪,否则它自己玩岔了都很难通过最后的结论判断是哪一步出的问题。

5.3 实施时的注意事项

Agent 虽然能提升自动化程度,但现阶段还是有不少限制。我的核心建议是循序渐进,别一上来就让它全权负责所有回归测试。先在一个风险较低的冒烟场景里试用,将它的执行范围限定在只读接口和查询类数据库操作上,不要让它随意执行写操作或删除操作,否则一旦推理出错,影响的数据可能就是线上环境。AI 的推理不是百分百稳定,你要给 Agent 加护栏,比如限制请求域名、限制数据库用户只读权限、限定最大执行步数。这个思路跟给实习生交代任务是差不多的,边界划清楚,活儿才能放心交给它。

另外一个容易被忽视的问题是提示词可靠性。真实环境里 AI 的每次输出都有细微差异,你不能假设它每次生成的 JSON 格式完全一致,所以解析层要写得足够健壮,缺失字段要有默认值。我在早期原型里就因为 AI 一次少了个中括号导致整个解析崩溃,排查了很久才发现是输出格式抖动问题。

6. 常见问题与排查技巧实录

6.1 五个高频问题及排查思路

跟 AI 协作做测试时间长了,总会遇到一些反复出现的问题。我从自己实践里挑五个典型的,整理成了下面的速查表,方便你直接对照:

AI 生成的用例在本地运行报错。大部分情况是因为缺少上下文:依赖没安装、环境变量没设置、测试数据不存在。排查时先看报错栈的前三段,基本能定位是 import 问题还是运行时数据问题。你把完整报错栈回贴给 AI,让它修正,通常一轮就能解决。如果二轮还是不对,别再死磕,自己看一眼代码,大概率是 AI 对你们项目特有的封装理解有偏差。

测试代码风格和项目现有代码不一致。这是最常见的问题,不是 bug 但影响维护。解决方法是在提示词里加上"请严格遵循项目代码风格:使用 pytest fixture、禁止使用 unittest 类、断言必须使用自定义的 assert_custom 方法"这类约束,会比事后人工改快得多。

AI 生成的定位器跑了几天就开始不稳定。前端改了样式或者 dom 层级变动,建议在设计案例时主动让 AI 生成多套定位策略,把稳定性最高的作为首选,其余作为备选。如果已经出现不稳定,直接把新旧 dom 结构都给 AI 重新生成即可。

AI 在生成用例时漏掉了异常场景。我在提示词后追加一句"请补充边界值与异常入参场景,例如空值、超长字符串、特殊字符",效果比让它自由发挥好得多。但依旧会漏,所以一旦业务上有新增的异常路径,你要主动在提示词里点名,AI 才会持续关注。

Agent 执行时中途跑偏。这个我碰到过好多次,AI 在执行过程中突然开始猜测数据而不是调用工具查证。解决思路是加一条系统级约束:"你没有权限假设任何值,所有数据必须通过工具获取",并且在每轮循环后做中断检查,发现它在编数据就立刻终止。

6.2 关于 AI 幻觉的应对策略

AI 幻觉在测试领域的影响被很多人低估了。它生成一段看起来非常合理的 pytest 代码,里面的断言、mock、业务逻辑都对,但有个致命问题:某个接口路径是它编出来的。这种代码第一次能跑通还好,跑不通的时候你又没看仔细,就会浪费时间在无效排查上。

我的应对策略是两条:一是场景尽量收窄,只给 AI 明确存在的信息,不给它的想象空间。凡是涉及接口路径、数据库表名、字段名的地方,都在提示词里给出准确值,不允许它发挥。二是所有 AI 生成的代码都必须经过一次静态检查,重点看硬编码的参数、URL、鉴权信息是否明显不合理。尤其是涉及生产环境的地址和账号,必须由人工严格核对,不能直接采用。

6.3 团队协作与流程配套

AI 提效不是一个人的事,它需要流程上的配套。我在团队里推过一段时间的 AI 辅助测试,发现最明显的效果是新人上手速度变快了。以前新人进组光写接口测试用例就要熟悉大半个月,现在借助 AI 可以快速生成基础用例,然后带着问题去问老同事,比如"为什么这个场景要额外断言库存",这种提问质量远比一无所知地上手要高。

但团队里也有个反面现象,就是有些人过度依赖 AI,生成代码不审就提交,导致一堆"能跑但测了个寂寞"的用例进了仓库。所以我把 AI 生成用例的代码评审权重提高了,凡是 AI 贡献的测试代码,提交信息里必须标注"AI generated + 人工审查",目的不是歧视 AI,而是提醒每个用例还是要有人对它负责。

7. 工具链选型:DeepSeek 接入方式与组合建议

7.1 调用 API 的几种方式与成本参考

部署方式百花齐放,从平台可视化界面、到官方的 API,再到私有本地化部署,选择空间一直不小。我个人的经验是,前期还没有太多敏感信息时,直接用官方的 API 就是最快的验证路径。它的接口格式是 OpenAI 兼容的,所以你用 requests 就能轻松调用,不需要引入复杂的 SDK。

以 Python 为例,最朴素的调用方式是用 requests 直接 POST:

import requests url = "https://api.deepseek.com/v1/chat/completions" headers = { "Authorization": "Bearer <your_api_key>", "Content-Type": "application/json" } payload = { "model": "deepseek-chat", "messages": [ {"role": "system", "content": "你是资深测试开发工程师。"}, {"role": "user", "content": "帮我生成登录接口的 pytest 用例。"} ] } resp = requests.post(url, json=payload, headers=headers, timeout=60) print(resp.json()["choices"][0]["message"]["content"])

这种方式适合快速验证和轻量脚本。如果集成到 pytest 框架里做单元级 AI 辅助,我会封装一个简单的 helper,让所有用例生成请求统一走一条路径,这样管理 key、超时、重试都方便一些。成本方面不用太担心,日常生成测试代码的请求规模在我自己项目里的消耗很小,远低于手工编写消耗的人力成本。但如果是大规模批量使用,比如团队里每个用例都要实时调 AI,那建议在中间层加缓存,相同的业务描述不要反复请求。

7.2 本地部署的取舍

说到本地部署,我周围不少同事第一反应是隐私和数据安全。确实,测试代码里经常包含业务接口路径、数据库信息、用户数据,这些信息要是全走公共 API,有些团队会觉得不放心。我有一次自己也试过在本地机器上研究部署方案,核心结论是:本地部署完全可行,但对机器配置有要求,配置不够的话推理速度会明显掉队,不少人试了几次就放弃回头用 API 了。我这里不展开具体的环境配置明细,因为不同型号的机器、不同的部署方案差异很大,但给你一个决策参考:如果团队对数据外发零容忍,那本地部署值得投入;如果只是图省事,公共 API 完全够用,没必要折腾。

另外要提醒一点,不管选哪种方式,都要在测试环境里跑通 POC,让实际写代码的人亲手验证效果再定。部署方案是手段不是目的,最终衡量标准只有一个:能不能帮你稳定地产出有效的测试用例。

7.3 与主流测试框架的组合矩阵

最后按我的实践整理了一套 AI 与主流测试框架的组合建议,方便你根据自己项目类型快速对应:

测试场景推荐框架AI 辅助切入点
接口自动化pytest + requests用例生成、参数化矩阵、断言补充、数据构造
Web UI 自动化Selenium + pytest元素定位、Page Object 生成、跨版本页面迁移
移动端自动化Appium + pytest跨端用例翻译、控件层级分析、手势与弹窗处理
接口性能测试Locust / JMeter压测脚本生成、参数关联、结果初步分析
数据校验pytest + SQLAlchemy造数脚本生成、库存/状态流转断言补全

你会发现,AI 在这些组合里扮演的不是替代框架的角色,而是框架和业务理解之间的翻译官。测试框架依然是你工程化的骨架,AI 帮你在骨架上快速长出肌肉。这套组合我实践了几个月,很明显的感受是:重复性工作确实减少了,但测试设计的能力、业务的理解深度、代码的审查能力反而变成了更稀缺的技能。想在这条路上走得远,这些能力还是得趁早练起来。

最后再分享一个小技巧。无论用哪种接入方式,我建议你在团队里建一个"AI 提示词库",把自己验证过的高质量测试相关提示词沉淀下来,比如"生成接口测试用例的万能模板"、"生成 PageObject 的标准流程"、"批量转换用例的指令"这类内容。新同事来了直接抄作业,大家产出质量就容易对齐。我自己的提示词库已经积累了几十个常用模板,每次写新用例之前先翻翻,确实比每次从零开始问 AI 要稳得多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/16 11:14:13

5G网络切片工程落地指南:从协议到现网配置的完整实践

简介&#xff1a;本资源是一份聚焦5G网络切片技术原理与落地实践的高质量教学型PPT课件&#xff0c;面向通信工程专业学生、网络规划工程师及5G技术从业者&#xff0c;系统解答‘如何在单物理网络上构建多逻辑切片’‘RAN如何感知并选择切片’‘端到端切片如何协同编排’等核心…

作者头像 李华
网站建设 2026/10/16 6:15:59

系统级通信与进程间通信的本质区别:从IPC到分布式通信的认知跃迁

1. 从“进程间通信”到“系统级通信”的认知跃迁很多人第一次看到“System-level Communication”这个说法&#xff0c;会下意识地把它等同于操作系统课里讲的那几种IPC机制——管道、消息队列、共享内存、信号量。如果你也是这么想的&#xff0c;那说明你还没有真正踩过分布式…

作者头像 李华
网站建设 2026/10/17 3:51:22

基于Hadoop的高校图书馆阅读推荐系统设计与实践

简介&#xff1a;面向计算机科学与技术、软件工程等专业的学士学位毕业论文&#xff0c;围绕基于Hadoop的高校图书馆阅读书目智慧推荐系统展开&#xff0c;适合本科专科毕业生参考&#xff0c;也适合对大数据处理与分布式计算感兴趣的学习者。论文系统梳理了HDFS、MapReduce等核…

作者头像 李华
网站建设 2026/10/15 6:34:06

TLI传输层接口编程详解:从设计原理到实战应用

1. 为什么还要聊TLI这个“老古董”第一次在《UNIX网络编程》卷1里翻到TLI那一章的时候&#xff0c;我的反应跟大多数人一样&#xff1a;这玩意儿还有人用&#xff1f;书架上那本砖头厚的书&#xff0c;讲套接字的部分被翻得起了毛边&#xff0c;TLI那几章却干净得像刚印出来。后…

作者头像 李华
网站建设 2026/10/16 13:10:20

电脑闹钟设置全方案:5种可靠提醒方法实测指南

1. 项目概述&#xff1a;为什么“电脑闹钟”不是个伪需求&#xff0c;而是被长期低估的生产力刚需&#xff1f;“电脑怎么设置闹钟提醒&#xff1f;”——这问题看着像新手提问&#xff0c;但背后藏着大量真实、高频、被现有系统忽视的使用场景。我接触过上百个实际案例&#x…

作者头像 李华