用 AI 做自动化测试半年,说说哪些真省事、哪些是坑

终端AI智能体opencode实战:配置、模型接入与自动化测试 AI编程工具正从代码补全向自主执行任务的智能体演进。opencode作为一款开源终端AI代理,凭借纯命令行、模型自由和可编程特性,成为开发者完成复杂开发任务的新选择。其底层逻辑是通过自然语言派活,智能体自主完成读代码、改文件、跑测试、提交等闭环操作。在模型接入层面,既可通过API对接顶级云端模型,也支持Ollama等本地模型,兼顾成本与隐私;配合ccswitch等配置管理工具,可灵活切换多套模型环境。实际应用中,opencode结合Playwright能自动完成前端页面的复现、定位、修复与验证,大幅提升回归 阅读详情

去年年底开始,我们组陆陆续续把 AI 塞进了测试流程。到现在半年多,中间推翻过一次方案,也确实有几块是真的省下了时间。

网上讲 AI 测试的文章大多是"五大场景、三大趋势"那种,看完还是不知道怎么下手。所以这篇我按我们实际踩过的顺序写,重点讲哪些能用、哪些别碰,顺带把能直接用的代码贴出来。

一开始我们想错了

最开始的想法很朴素:让 AI 写用例,我们省事。

跑了大概两周发现不对劲。AI 生成的用例,我们审核花的时间比自己写还长。

原因挺反直觉的。不是因为它写得差,恰恰是因为写得像那么回事。标题、前置条件、步骤、预期结果一应俱全,你扫一眼觉得没问题就放过了。真正出问题的全是细节。

举个例子。有个折扣计算的函数,实际返回 0.125,AI 生成的用例写的是"预期折扣 12%"。这条用例跑起来是绿的,而且一直绿下去,直到哪天有人改了那段代码才会暴露。我们后来集中清理过一次,翻出四五条这类断言,最老的一条是半年前生成的,中间跑了不知道多少次,没人发现。

反倒是那种明显的胡说八道——调了一个压根不存在的接口、引用了一个没定义的方法——跑一次就红,两分钟改完,根本不算问题。

所以现在我们有一条看着很笨的规矩:AI 生成的用例,凡是带具体数值断言的,必须人工对着代码核一遍真实返回值。这一步省下来的返工时间,远超审核花的时间。

还有一点,别裸着问。最早我们是直接把需求丢过去说"写一下测试用例",出来的基本全是正常流程,等于没用。后来改成把测试设计方法写进 prompt:等价类怎么划、边界值取哪几个点、有没有状态机、要不要覆盖并发和越权。输出格式也要求结构化,不让它自由发挥。

改完之后效果差很多。有一次一个"密码找回"的需求,AI 出了 14 条,包括邮箱格式非法、链接过期、链接已使用、密码复杂度不足这些。工程师过了一遍,留下 11 条,改了 2 条,扔了 1 条,前后 8 分钟。同样的量自己写大概要 40 多分钟。

不过说实在的,节省时间倒在其次,更有价值的是它把边界和异常场景补齐了。人写用例天然往正常流程上靠,那些"最小值减一"的用例没人愿意写,AI 不在乎。

真正省时间的是这两块

接口测试的用例生成

这块是我们目前唯一敢直接接进 CI 做门禁的。

原因也简单:接口契约是结构化的,AI 不需要猜业务。我们把 OpenAPI 里的 schema 读出来,按字段类型、枚举、最小值最大值、必填这些自动派生异常用例,AI 只负责补两件事——schema 里没有的业务组合规则(比如"优惠券不能叠加"),以及生成像那么回事的业务数据。

一个关键点是单参数缺陷注入:一次只脏化一个字段,其他字段保持合法。这样一条用例失败了,你能立刻归因到具体字段,不会出现三条错误搅在一起看不出是哪个导致的。

```python
# api_fuzz.py —— 从 OpenAPI schema 派生参数级异常用例
def _happy_value(schema: dict):
    """按 schema 生成一个合法值,作为缺陷注入的基线。"""
    t = schema.get("type")
    if "enum" in schema:
        return schema["enum"][0]
    if t == "integer":
        return schema.get("minimum", 0)
    if t == "number":
        return float(schema.get("minimum", 0))
    if t == "boolean":
        return True
    if t == "array":
        return [_happy_value(schema.get("items", {"type": "string"}))]
    return "test"


def derive_values(schema: dict) -> list[tuple[str, object]]:
    """为单个参数派生:合法值 / 越界 / 类型错 / 格式错 / 注入面。"""
    t, out = schema.get("type"), []
    fmt = schema.get("format")

    if t in ("integer", "number"):
        lo, hi = schema.get("minimum", 0), schema.get("maximum", 100)
        step = 1 if t == "integer" else 0.5
        out += [("正常值", (lo + hi) // 2),
                ("下边界-1", lo - step), ("下边界", lo), ("下边界+1", lo + step),
                ("上边界-1", hi - step), ("上边界", hi), ("上边界+1", hi + step),
                ("类型错误", "abc"), ("数值溢出", 10 ** 12)]
    elif t == "string":
        mn, mx = schema.get("minLength", 1), schema.get("maxLength", 32)
        out += [("正常值", "x" * mn), ("空字符串", ""),
                ("超长", "x" * (mx + 1)), ("类型错误", 12345),
                ("XSS 面", "<script>alert(1)</script>"),
                ("SQL 注入面", "' OR 1=1 --"),
                ("Unicode 超长", "\U0001F600" * (mx + 1))]
        if fmt == "email":
            out += [("格式错误", "not-an-email")]
        if fmt == "date-time":
            out += [("格式错误", "2026-13-45T99:99:99Z")]
        if "enum" in schema:
            out += [("枚举外值", "___not_in_enum___")]
    elif t == "boolean":
        out += [("正常值", True), ("类型错误", "true")]
    elif t == "array":
        out += [("空数组", []),
                ("超长数组", list(range(schema.get("maxItems", 10) + 1))),
                ("元素类型错误", ["not-a-number"]),
                ("类型错误", {"a": 1})]
    return out


def build_cases(spec: dict, path: str, method: str) -> list[dict]:
    op = spec["paths"][path][method]
    params = op.get("parameters", [])
    schemas = {p["name"]: p.get("schema", {}) for p in params}
    required = {p["name"] for p in params if p.get("required")}
    base = {n: _happy_value(s) for n, s in schemas.items()}

    cases = []
    for name, sch in schemas.items():
        for label, val in derive_values(sch):
            body = dict(base, **{name: val})
            bad = any(k in label for k in ("错误", "越界", "超长", "注入", "溢出", "枚举外", "空"))
            cases.append({
                "path": path, "method": method.upper(),
                "mutated": name, "label": label, "body": body,
                "expect_status": 400 if bad else 200,
            })
    for name in required:
        cases.append({
            "path": path, "method": method.upper(),
            "mutated": name, "label": "缺失必填项",
            "body": {k: v for k, v in base.items() if k != name},
            "expect_status": 400,
        })
    return cases
```

我们有个四十来个接口的微服务,这套跑下来两千多条用例。手写得两个月,脚本几分钟。更关键的是它不会漏——你让他手写,他一定跳过"上边界加一"这种。

UI 脚本的维护

UI 自动化最贵的从来不是写,是修。改个按钮文案、调一下 class,能级联挂掉几十条脚本,一周工时就没了。

我们后来给 Playwright 套了一层自愈:每个元素存一份多属性指纹(selector、标签、文本、role、aria-label、DOM 相对路径),首次定位失败就拿这些属性去当前页面做加权匹配,分数够高就自动换过去继续跑。

```python
# heal.py —— Playwright 多属性指纹自愈定位
from __future__ import annotations
import json, time
from dataclasses import dataclass
from difflib import SequenceMatcher

from playwright.sync_api import Page, TimeoutError as PWTimeout

HEAL_LOG = "heal_events.jsonl"
THRESHOLD = 0.90   # 低于此分禁止自动改写,必须报失败


@dataclass
class FP:
    """元素指纹:单一属性失效时,用其余属性做加权匹配。"""
    selector: str = ""
    tag: str = ""
    text: str = ""
    role: str = ""
    aria_label: str = ""
    dom_path: str = ""

    def score(self, other: "FP") -> float:
        rules = [
            ("selector",   0.20, self._same),
            ("tag",        0.10, self._same),
            ("text",       0.30, self._fuzzy),
            ("aria_label", 0.20, self._fuzzy),
            ("role",       0.10, self._same),
            ("dom_path",   0.10, self._fuzzy),
        ]
        w_sum = hit = 0.0
        for name, w, fn in rules:
            a, b = getattr(self, name), getattr(other, name)
            if not a and not b:        # 双方都缺该属性 → 不计入分母
                continue
            w_sum += w
            hit += w * fn(str(a), str(b))
        return hit / w_sum if w_sum else 0.0

    @staticmethod
    def _same(a, b):
        return 1.0 if a == b else 0.0

    @staticmethod
    def _fuzzy(a, b):
        return SequenceMatcher(None, a, b).ratio()


_COLLECT_JS = """
() => Array.from(
  document.querySelectorAll('button,a,input,select,textarea,[role],[aria-label]')
).map(el => {
  const path = [];
  let cur = el;
  while (cur && cur.parentElement && path.length < 5) {
    const i = Array.from(cur.parentElement.children).indexOf(cur) + 1;
    path.unshift(`${cur.tagName.toLowerCase()}:nth-child(${i})`);
    cur = cur.parentElement;
  }
  return {
    selector: el.id ? '#' + el.id : path[path.length - 1],
    tag: el.tagName.toLowerCase(),
    text: (el.innerText || el.value || el.placeholder || '').trim().slice(0, 60),
    role: el.getAttribute('role') || '',
    aria_label: el.getAttribute('aria-label') || '',
    dom_path: path.join(' > ')
  };
})
"""


def heal_click(page: Page, baseline: FP, timeout: int = 3000):
    """
    baseline: 上一次成功运行时落库的指纹。
    1) 快路径:原 selector 直接命中,零额外开销
    2) 慢路径:指纹加权匹配,≥ 阈值才自动改写,并落审计日志
    3) 低于阈值:直接抛异常,绝不静默通过
    """
    try:
        page.locator(baseline.selector).click(timeout=timeout)
        return baseline.selector, "direct"
    except PWTimeout:
        pass

    best, best_score = None, 0.0
    for raw in page.evaluate(_COLLECT_JS):
        cand = FP(**raw)
        if not (cand.text or cand.aria_label):
            continue
        s = baseline.score(cand)
        if s > best_score:
            best, best_score = cand, s

    if best is None or best_score < THRESHOLD:
        raise AssertionError(
            f"[自愈失败] 未找到可信替代元素:期望 {baseline.text!r},"
            f"最高分 {best_score:.2f} < 阈值 {THRESHOLD}"
        )

    _audit(baseline, best, best_score)
    page.locator(best.selector).first.click(timeout=timeout)
    return best.selector, f"healed({best_score:.2f})"


def _audit(old: FP, new: FP, score: float):
    """每次自愈都必须留痕:谁改的、改成什么、为什么改。"""
    with open(HEAL_LOG, "a", encoding="utf-8") as f:
        f.write(json.dumps({
            "ts": time.time(),
            "score": round(score, 3),
            "from": old.__dict__,
            "to": new.__dict__,
        }, ensure_ascii=False) + "\n")
```

这里必须说一下我们被坑的一次。

一开始阈值设的 0.82,跑得挺顺,成功率看着也漂亮。过了三个月发现有个流程的测试一直是绿的,但那个功能其实早就坏了。查下来是自愈把"删除"按钮匹配成了"编辑"按钮——两个按钮文案相似度 0.83,刚过线,于是脚本每次都点错按钮,然后后面的断言恰好也都过了。

那次之后我们把阈值提到 0.9,并且加了黑名单:删除、支付、提交这类危险操作直接禁用自愈,失败就是失败,不许找替代。同时每次自愈都写日志,每周过一遍,哪个元素老被自愈就反过来找研发加 data-testid。

自愈这东西没有阈值和审计,会比不自愈更糟。元素其实已经错了但测试还是绿的,团队在假的安全感里一路跑下去,比每天看红色可怕多了。

几块我们没做成或者做得一般的

AI 判 AI。 就是用另一个模型给输出打分。我们试过,快是快,用来给探索性测试的结果排优先级还行,当质量门禁不行。它对边缘情况的错误明显偏乐观,人能看出来的问题它经常给高分。如果你的链路是 AI 生成用例、AI 判定结果,那这个系统正在犯的错,恰好就是它检测不到的错。

非确定性。 我们有个客服机器人,最早的断言写的是 assert "退款已受理" in response,结果 CI 时红时绿,一天重跑三四次。后来改成属性断言:输出里必须带订单号、不能出现承诺性的法律措辞、不能泄露其他用户信息,不看具体字面。同一场景跑 20 次,按通过率判。这个麻烦,但没别的办法,AI 参与的系统就是不能用单次断言。

视觉回归和性能压测。 视觉这块我们只是换了带语义模型的工具(原来像素级 diff 误报太多,字体渲染差一点就刷屏),确实清净了不少,但没往深了做。性能那边试着用生产流量日志生成负载画像,比"一千并发匀速爬坡"真实很多,能压出匀速模型压不出来的问题,不过我们也就试了一次大促,样本不够,不好下结论。

如果你也要做

别一上来就重构整个测试栈,那是给自己找事。我们的顺序是这样的:

先挑一个高频又不出事的流程,比如登录回归或者接口冒烟,让 AI 和现有测试并行跑两周,不动现有东西,只观察。这两周你会遇到大部分坑,成本低。

然后接自愈层,同时把度量看板搭起来。这里提醒一句,基线一定要在接入之前就量好,不然事后你说不清到底省了多少。我们当时就吃了这个亏,前两周没记录,后面只能靠回忆估数。

再往后才是失败聚类、变更影响分析这些。我们做了个把失败栈归一化再聚类、然后让 AI 结合当次 commit 猜根因的东西,效果还行,一次 nightly 三百条红的能归成三四个簇,比人肉看快得多。

指标上我们看这几个:用例编写耗时、每周维护工时、不稳定用例占比、无效失败率。但有一条是底线——逃逸到生产的缺陷率不能变差。前面几项难看都行,这一项不行。如果 AI 接进来之后发版快了但线上事故也多了,那就是负收益,赶紧停。

最后一条,prompt 记得进版本库,连着模型版本号、temperature、生成日期一起存。我们早期没存,后来想复现一批三个月前生成的用例,怎么都跑不出同样的结果,只能重来。

就这些

现在的状态是,写脚本和维护脚本这两块确实省了不少人力,工程师的时间更多花在判断该测什么、这条断言的意图是什么上面了。

至于网上说的"AI 替代测试工程师",半年下来我没看到这个迹象,看到的是它把重复劳动接走了,剩下的活反而更费脑子。

代码都在上面了,自愈那段和接口派生那段可以直接拿去改。

AI 加 Playwright 实现零代码 UI 自动化测试实战 UI 自动化测试常面临脚本维护成本高、元素定位不稳定等挑战。Playwright 凭借自动等待和语义化定位器提升了稳定性,而大模型可进一步将自然语言转换为可执行脚本。这种 AI 与 Playwright 结合的方式,让测试人员无需编写代码即可完成自动化,显著降低维护成本。在登录、搜索、下单等业务场景中,通过语义化定位和自动修复机制,脚本失效率大幅下降。本文以登录页面为例,完整展示从环境搭建、提示词设计到脚本生成与修复的落地过程,帮助团队快速构建稳定的零代码 UI 自动化测试方案。 阅读详情

相关推荐

Codex+Relay:移动端AI全栈开发从原型到交付的完整链路

AI编程正从单点代码生成走向全流程工程化,移动端全栈开发的核心挑战也早已不是模型能力,而是如何将设计原型、工程约束与验收标准组织成可执行的链路。本文以Relay原型图为起点,系统拆解如何借助Codex作为工程执行主体,完成前端生成、后端接口开发、联调检查,并通过质量门禁与CI/CD流水线实现可交付状态。从组件化命名、设计令牌到上下文投喂与会话策略,再到自动化测试与性能清单,这套方法论覆盖了AI驱动全栈开发的完整闭环,适用于React Native与Node.js技术栈的团队,为把AI编程从Demo推进到真实

weixin_33811539的博客 405

‌生成式AI写测试脚本:是神器还是鸡肋?

AI在测试脚本生成中展现了显著的效率提升,能将单元测试编写时间缩短80%-90%,覆盖率提高至95%。然而,AI生成的脚本存在硬编码、边界条件遗漏、并发处理缺失等六大陷阱,导致维护成本可能超过人工编写。最佳实践建议采用"AI+人工"协同流程,通过提示工程、强制审核、自愈机制和反馈闭环来优化使用。研究表明,AI应作为"测试思维的放大器"而非替代者,测试从业者需掌握人机协作技巧,建立审核标准,才能在效率与质量间取得平衡。

2501_94261392的博客 1258

AI应用开发核心技术架构:从模型接入到测试上架的全链路指南

人工智能应用开发早已不是单纯调用接口的简单任务,而是涉及模型选型、知识增强、工具调用与质量保障的系统工程。理解大模型API、RAG检索增强生成、Agent智能体等基础概念,是构建可靠AI应用的前提。通过分层架构设计,将模型接入、业务增强、服务治理与测试评测有机结合,能有效解决效果不可控、开发周期长、上线风险大等核心痛点。从Java后台助手到Python Agent场景,再到小游戏上架实战,完整的架构思路让AI能力真正落地。掌握这套方法,开发者可以在复杂业务中稳定交付AI应用,并为后续多模态、工作流编排等扩展

weixin_28678151的博客 253

智能测试自动化:AI驱动的测试脚本生成与优化

测试自动化是软件测试领域的重要发展方向,它通过自动化测试工具和技术,减少了手动测试的工作量,提高了测试效率和准确性。然而,传统的测试自动化仍然面临着诸多挑战,如测试脚本编写和维护成本高、测试覆盖率不足、测试效率低下等问题。

欢迎来到智能安全前线!这里是AI与信息安全交汇之地。我们以代码为武器,深入大模型攻防实战,破解系统漏洞。追踪OpenAI、Meta前沿动态,用红蓝对抗思维,锻造智能时代的坚盾与利矛。 1611

AI编程终端Agent opencode:从安装到实战的完整指南

AI编程工具正在从对话式辅助走向代理式执行,终端Agent成为开发者提效的新方向。这类工具通过自然语言理解项目结构,自主规划步骤、调用工具、执行命令并读取反馈,实现从需求到代码的闭环。在复杂工程中,它可自动修改代码、运行测试、定位报错,甚至借助Playwright验证前端页面,通过LSP精确分析符号引用。随着多模型接入与编辑器生态完善,终端Agent在跨平台开发、项目接手、自动化调试等场景中展现出巨大价值。本文以开源工具opencode为例,详解其安装配置、Skills机制、模型接入策略及常见问题,帮助开发

weixin_28839629的博客 285

STM32F103内部晶振配置实战:从代码修改到频率验证(附工程模板)

本文详细介绍了STM32F103内部晶振(HSI)的配置实战,从代码修改到频率验证的全流程,并附赠可直接使用的工程模板。通过对比HSI与外部晶振的优缺点,帮助开发者在成本敏感和空间受限的应用中实现稳定时钟配置,同时提供频率校准和常见问题排查方法。

weixin_29171087的博客 323

WorkBuddy避坑实战:半年踩坑总结与自动化工作流稳定指南

AI自动化工作流工具通过可视化节点编排实现跨平台任务调度,其核心原理是将重复操作抽象为可复用的Skill与指令。在工程实践中,环境配置、指令优先级、变量作用域及外部依赖管理直接影响工作流稳定性。合理运用此类工具可显著提升订单抓取、文件同步等场景的自动化效率,但需警惕安装错配、循环失控、并发竞争等典型问题。本文基于半年生产环境实践,系统梳理WorkBuddy在安装、Skill配置、工作流逻辑及报错排查中的十五个高频陷阱,并提供可落地的修复方案与运维习惯,帮助开发者构建稳定可靠的自动化流水线。

weixin_30512965的博客 341

PC微信(3.9.2.23)逆向实战:定位并Hook消息接收函数

本文详细介绍了PC微信(3.9.2.23)逆向分析中定位并Hook消息接收函数的完整实战流程。通过Cheat Engine动态定位未读消息数内存地址,结合OllyDbg分析代码上下文,最终找到稳定的Hook点,并分享了实战中的关键注意事项与踩坑经验。

lll78的博客 473

AI测试开发实战:用Claude Code与Skill机制重塑自动化测试工作流

大模型技术正在重塑软件测试的底层逻辑,从自动化脚本生成到缺陷分析,AI工具链逐步替代重复劳动。以Claude Code、DeepSeek为代表的智能体技术,配合TRAE这类AI IDE,将测试开发从“手写穷举脚本”转变为“训练智能体执行测试任务”。通过Skill机制固化测试专家的经验,可以让模型按标准流程完成用例生成、日志分析与性能压测,显著提升Python自动化测试与性能测试的效率。在车载测试、嵌入式测试等专业领域,AI还能辅助解析CAN总线数据、审查C代码、分析串口日志。本文将从工具选型、环境搭建到智能

weixin_29800471的博客 88

Android malloc_debug实现原理及使用

2)设置 __libc_globals 对象中的 libc_globals.default_dispatch_table 和 current_dispatch_table 指向 malloc_dispatch_table,以后在 malloc 库函数里都会通过 GetDispatchTable(),这个函数就是返回的 current_dispatch_table 指针;MAX_FRAMES 表示被抓取的 frames 的数量,如果设为0, 表示在分配空间被释放时,不会抓取任何调用栈。

专注于系统快稳省领域 3743

深入RK3588嵌入式Linux开发:uboot源码定制化移植实战

本文详细介绍了RK3588嵌入式Linux开发中,如何绕过庞大的官方SDK,从官方仓库获取纯净U-Boot源码并进行定制化移植的完整实战流程。内容包括编译环境搭建、交叉工具链配置、源码结构解析、设备树(Device Tree)修改、环境变量定制、编译脚本编写以及常见问题调试技巧,旨在帮助开发者深入理解系统引导过程,掌握为定制硬件适配U-Boot的核心技能。

weixin_29169505的博客 424

示波器与高速采集卡:自动化测试中的数据流选择与分工

在硬件测试与产线验收场景中,数据获取方式直接决定测试效率与故障定位能力。示波器作为经典的信号观察工具,核心价值在于触发捕捉与人眼判读,适合调试阶段快速验证波形特征;而高速采集卡则以连续采流式存储、程序可直接消费的原始ADC数据为核心,满足自动化测试对批量、长时间、可回放数据的需求。理解两者在采样率、带宽、存储与传输链路上的差异,是选择设备的前提。当测试用例需要统计过冲、捕捉偶发故障或端到端回放复现时,高速采集卡便成为自动化闭环的关键。本文从示波器局限与采集卡优势切入,结合SCPI控制、pytest用例编排、

weixin_34121304的博客 450

在MacBook M1/M2上,手把手教你打包包含嵌入模型的RagFlow Docker镜像(避坑指南)

本文详细指导如何在MacBook M1/M2上构建ARM64架构的RagFlow Docker镜像,涵盖环境准备、依赖处理、镜像构建及性能优化全流程。特别针对Apple Silicon芯片的兼容性问题提供解决方案,帮助开发者高效完成本地开发环境搭建。

weixin_26908317的博客 242

AI原生超级全栈训练营:从写代码到编排AI的工程实践

全栈开发正从手写代码转向编排AI能力,核心在于将需求拆解为AI可执行的任务,并通过多模型组合与自动化检查确保产出质量。这一范式以任务拆解、提示词工程、代码集成和质量把关为关键环节,将AI定位为需要明确指令和验收标准的初级工程师。在电商后台、待办API等场景中,开发者通过分层隔离和沙箱环境,让AI生成代码与人工代码安全共存。AI原生超级全栈训练营正是围绕这套工程纪律展开,帮助中级工程师、技术负责人和独立开发者系统掌握AI协作方法,实现从编码者到编排者的角色转变。

weixin_30607125的博客 128

Windows 11 WSL2环境下OpenClaw部署的兼容性问题分析与解决方案研究

本文研究了OpenClaw在Windows 11 WSL2环境下的部署方案。WSL2通过无缝集成Linux与Windows系统,为OpenClaw提供了良好的运行环境,支持GPU加速和跨平台开发。文章详细分析了硬件配置要求(推荐8核CPU/16GB内存/NVMe SSD)、系统选择(Windows 11 Pro+Ubuntu 22.04)以及部署步骤,包括WSL2启用、Linux发行版安装、Python/Node.js/Redis等依赖配置。通过优化.wslconfig文件参数(如内存分

博客 2281

YOLOv8 架构改造实战:添加 P2 小目标检测头与 P6 超大目标检测头

上采样是指将特征图的空间尺寸变大(例如从 20×20 → 80×80),用来提升图像的分辨率。常见于解码器结构或特征融合中。下采样是指将特征图的空间尺寸缩小(例如从 256×256 → 128×128),通常用于减少计算量、提取更高级语义特征。操作目的方法尺寸变化上采样放大特征图插值算法变大(如2×)下采样压缩特征图、提取语义stride卷积等变小(如1/2)

FJN110的博客 575

Playwright MCP:AI自动化测试,告别传统脚本编写

Playwright MCP 把浏览器操作封装成工具,让大模型用自然语言驱动 AI 自动化测试,告别手写选择器。本文从 Node 环境、TaoToken 模型接入、MCP Server 与客户端 settings 配置,到登录流程验证与 401、local proxy failed 等常见报错排查,给出可复制步骤。官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end

weixin_35414484的博客 11

12、知识图谱数据处理与推理全解析

本文深入解析了知识图谱中的数据处理与推理技术,涵盖SHACL的多种约束类型(如值约束、范围约束、字符串约束、逻辑约束等)及其在数据质量控制中的应用,并介绍了常用的SHACL工具与实际案例。文章对比了SPARQL与SHACL的特点,探讨了RDF(S)的局限性,引出表达能力更强的OWL和OWL2语言及其在语义网和生物医学等领域的应用。此外,还阐述了规则在知识表示中的作用,包括产生式规则和Datalog规则,并总结了知识图谱中推理的重要性与典型流程,为构建高质量、可推理的知识图谱提供了全面的技术指导。

zz67890的博客 136

BrowserAct,给AI Agent配一个真实浏览器,从安装到实战

大家好,我是狂师。事情是这样的,最近群里在聊一个老话题,Agent 什么都行,一到「去网站上帮我看看」就歇菜。页面是动态渲染的,curl 拿到一坨壳。数据要登录才能看,无头浏览器里 session 又不延续。好不容易进去了,Cloudflare 一个挑战页甩脸上。Static page还好,现在稍微像样点的网站,反爬、验证码、登录态,三道墙至少撞上一道。Agent 缺的其实就一样东西,一个能感知真实在跑的浏览器。

测试开发技术 417

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

2026年AI原生低代码选型指南:从趋势分析到落地避坑

低代码开发平台正在经历从可视化拖拽到AI原生生成的范式跃迁,其本质是从降低“表达”门槛转向降低“思考”门槛。传统低代码擅长固化结构化流程,却在处理不确定需求和全生命周期治理上存在天花板。AI原生低代码通过开发期对话生成模型、运行期智能决策辅助、治理期AIOps自动修复三层能力,正演变为“AI驱动的软件工厂”,并与云原生、自动化交付深度融合。在制造业、能源、金融等行业中,对话式开发、模型驱动架构和复合型应用已成为主流趋势。面对琳琅满目的平台,企业该如何穿透厂商演示看到真实水平?本文梳理了基础表单型、企业流程型

weixin_34050519的博客 410

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

生成式AI辅助开发实战指南:从选型到质量保障的完整落地手册

在软件开发流程中,如何引入AI工具并确保代码质量与安全性,是当前开发者关注的核心议题。从需求澄清、方案设计到编码实现、测试评审,生成式AI正在重塑传统开发工作流。本文从工具选型与角色定位谈起,重点介绍结构化提示词方法、上下文管理技巧,以及结合静态检查、自动化测试与人工评审的多层质量保障机制。同时分享真实项目中的避坑经验:如何拦截AI“幻觉”、避免过度重构、防范依赖投毒,并建立可审计、可回退的代码资产体系。无论是个人开发者还是团队协作,都能从中获得一套可落地的AI辅助开发实践框架。

weixin_42683392的博客 132

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

opencode实战:终端里的模型中立AI编程代理,从安装到深度定制

AI编程工具正从代码补全走向自主执行的智能代理时代。Coding Agent作为能理解项目、自主修改代码并执行命令的新型开发辅助,正在重塑开发者工作流。其核心原理在于通过工具调用与语言模型结合,让AI不仅会生成代码,更能定位文件、运行测试、自动复现问题。这类技术带来了开发效率的质变,尤其适合复杂项目重构、陌生代码库探索与自动化Bug复现场景。在众多实现中,开源终端AI编程代理opencode凭借模型中立架构与高度可定制性脱颖而出,它不绑定特定厂商,支持灵活切换多家模型API,同时具备LSP语言服务集成与Sk

weixin_28520495的博客 292

自动化测试框架选型与工程化实践:从pytest到Hypium

在软件质量保障体系中,自动化测试框架是连接测试用例与持续交付的核心设施。它不仅要解决用例组织、数据管理、执行调度等基础问题,更需要通过合理的架构设计降低维护成本。本文从框架与工具库的本质区别切入,梳理pytest、TestNG等主流框架的核心机制,分析Selenium、Playwright等UI自动化工具的适用场景,并结合接口自动化中的Requests封装、fixture依赖注入、数据驱动等工程实践,提供一套可落地的框架搭建路径。同时也关注Hypium等新兴平台框架及AI辅助测试的演进趋势,帮助测试团队建立

weixin_26850069的博客 258

AI原生超级全栈训练营拆解:从写代码到编排AI代理的工程实践

AI原生开发正在重新定义全栈工程师的工作方式,其核心在于通过任务分解与代理编排,让开发者从编码执行者转变为系统设计者。这一模式基于大语言模型的推理与生成能力,将工程交付拆解为需求分析、接口定义、质量审查等原子任务,由AI代理并行或串行执行。其技术价值在于提升交付效率与代码一致性,同时降低重复劳动。典型应用场景包括多代理协作的内容管理系统、自动化测试与部署流水线等。AI原生超级全栈训练营正是围绕这一能力体系,训练开发者掌握任务粒度控制、代理通信协议与集成验证等关键技能。

weixin_31499265的博客 152

Prompt工程是刀法,Loop工程是阵法——TaoToken下AI Coding两种哲学的实战选择指南

React + Agent 场景下,Prompt 工程与 Loop 工程如何选?本文用 TaoToken 统一接入 AI Coding 工具,给出可复制的 Prompt 模板与 Loop 配置片段,并附 401、local proxy failed 等报错排查。官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end

weixin_36427956的博客 220

2026年AI编程工具实测:33款主流工具选型指南

人工智能正重塑软件开发的每一个环节,AI编程工具从简单的代码补全进化为能理解项目上下文的智能体。其核心原理是借助大语言模型对海量代码语料的学习,实现代码生成、跨文件重构、自动化测试等复杂任务。这类工具的技术价值在于将开发者从重复的样板代码和繁琐调试中解放出来,让人专注于系统设计与业务创新。在实际应用中,无论是个人开发者提升编码效率,还是企业团队保障代码质量、控制数据合规风险,都能找到适配的方案。面对市场上纷繁的选择,本文基于2026年实测的33款主流工具,按场景拆解其核心能力与适用人群,并提供选型建议,帮助

weixin_32285357的博客 337
上一篇: AI 测试全体系详解(自动化测试框架 + 智能缺陷检测 + A/B 测试优化)
程序员老V
博客等级 码龄2年 2573粉丝 729原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值