自动化测试实战:从Selenium到AI辅助的工程化进阶指南
搞了快十年自动化测试从最初只会用Selenium录制回放到现在带团队搭框架、写平台期间踩过的坑比写过的用例还多。经常有人问我自动化测试到底该怎么学、怎么落地说实话这问题太大但有一个很直接的感受光会按录制按钮和抄脚本没用真正值钱的是你面对一个具体项目时能判断哪些该自动化、哪些不该自动化以及怎么设计一套不容易挂的用例体系。这篇文章既是我的实战经验总结也是一份可以直接照着用的操作手册。本文基于软件测试领域最常见的Web端、App端、接口层三个方向展开穿插AI辅助生成脚本、物联网设备测试等热点话题最后会聊几句面试和职业路线。不管你是刚入行的测试新人还是做了几年功能测试想转自动化又或者是已经在写框架想找点进阶思路都应该能从里面捞点有用的东西。我会先讲清楚自动化测试的定位和选型逻辑再分别拆解UI自动化、接口自动化的具体做法和踩坑记录最后集中讲一讲AI Agent自动生成脚本的真实水平边界。全程用我实际跑过的代码和案例说话力求说人话、能复现。1. 自动化测试的定位与选型逻辑很多新人一上来就问我该学Selenium还是Appium其实这个问题应该放在后面第一步是先搞清楚你的项目到底适不适合做自动化。自动化不是万能的也不该为了自动化而自动化。1.1 哪些项目该引入自动化哪些不该我在不同公司见过很多次“自动化测试推进失败”的场面复盘下来原因往往不是技术不够而是选错了对象。判断一个业务适不适合自动化只需要看三个条件需求是否稳定、回归频率是否够高、环境是否可控。一个需求一个月变三次的页面脚本写完了功能也改了你维护脚本的时间比手工点几遍还长这种项目老老实实用手工测试。反过来像登录注册、订单流程、支付回调这类核心且稳定的业务每次发版都要跑一遍这就是自动化的主战场。还有一批情况是“中间态”——比如后台配置类页面改动频繁但操作固定这种情况可以只做接口自动化把UI层放掉能省一大半维护成本。另外自动化测试适合的规模也有讲究。我个人的体感是**如果一个需求的手工回归时长已经超过半天且每个月至少发两次版那么自动化投入就划算。**如果项目还在原型期、功能都定不下来那你写的每一行脚本都是将来的负债。1.2 工具选型背后的权衡Selenium、Playwright、Appium、pytest选型这件事永远是在团队技术栈、项目形态、人员技能之间找平衡不存在绝对的最好。Web端现在的主流局面是Selenium和Playwright打擂台移动端是Appium事实标准接口层pytest基本是Python测试圈的第一选择。Selenium最大的优势是老牌、资料多、生态成熟几乎所有测试团队都有人用过。但它有几个老毛病在实操中特别难受依赖WebDriver和浏览器版本匹配一升级就崩对iframe、新标签页、弹窗的处理逻辑很别扭原生等待机制不友好大多时候要靠time.sleep硬扛。Playwright是微软开源的后来者我这两年重度使用下来它最打动我的三点是自动等待内置化基本告别了sleep支持多浏览器和移动端模拟自带录制器可以快速生成稳定脚本。如果你是新项目、新团队我会直接建议从Playwright起步。之前有一些团队担心团队成员只会Selenium不会Playwright其实语法非常接近切换成本远低于预期。Appium本质上是把WebDriver协议扩展到了移动端通过XCUITest和UiAutomator来驱动iOS和Android。这个工具本身是稳的但环境的坑多到能写一本书后面第3章我会单独展开。pytest做接口自动化框架有多香它自身的fixture机制、参数化、断言、插件生态几乎覆盖了测试框架需要的全部能力。配合requests和pytest-html或allure足以支撑中小团队的接口测试体系。Java背景的团队则通常会选TestNG或JUnit5配合RestAssured但思路是相通的。1.3 自动化测试平台应该具备的能力现在很多公司都在自建自动化测试平台但有不少平台做成了“脚本收纳盒”——只有个Web页面能看报告脚本还是得各自在本地跑。真正好用的自动化测试平台我认为至少要具备这四块能力任务调度定时任务、触发执行、失败重跑。脚本不能只靠人在命令行敲否则谈不上持续回归。环境管理测试环境地址、数据状态、配置开关的集中维护。环境切换如果靠改配置文件跑一次改一次那平台价值就大打折扣。报告可视化饼图趋势图其实是次要的关键是失败用例要能快速定位到日志和截图。权限与协作谁可以改脚本、谁只能看报告团队多人协作时这很影响效率。平台不等于大而全把上面四件事做好就已经超过大多数团队了。至于是不是要上K8s跑分布式执行、要不要对接CI/CD那是后话先解决“能跑、能看、能定位问题”这三个基本盘。2. Web UI自动化从脚本到框架Web UI自动化是目前资料最多、也是新手最容易上手的方向。但正因为门槛低大部分人写出来的东西只是在“能跑”和“随时挂”之间反复横跳。这一章我会从底层逻辑到具体代码把怎么写出稳定脚本的路径讲透。2.1 Selenium基础脚本与元素定位经验Selenium最基础的脚本长这样想必大家见过很多次from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver webdriver.Chrome() driver.get(https://example.com/login) driver.find_element(By.ID, username).send_keys(test_user) driver.find_element(By.ID, password).send_keys(123456) driver.find_element(By.CSS_SELECTOR, button[typesubmit]).click() # 等待登录成功标志出现 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, .user-avatar)) ) print(登录成功) driver.quit()这段代码最值得说的不是语法而是定位策略。我见过大量脚本半天维护一次就是因为定位写得太脆。**优先级我建议是稳定的唯一ID 有业务含义的data属性 CSS选择器 XPath。**XPath尽量少用尤其不要用那种一长串的绝对路径比如/html/body/div[2]/div[3]/form/input[1]前端稍微改一个层级脚本就直接报废。更实用的做法是推动开发在关键控件上加>playwright codegen https://example.com这个命令会打开一个浏览器窗口你在页面上操作什么旁边就直接生成对应代码支持Python和JavaScript还自带选择器方案。但要注意录制生成的脚本只是“初稿”定位符通常比较啰嗦需要再手工精简。Playwright的选择器体系是我很喜欢的部分。它支持CSS、XPath、文本、角色等多种定位方式的组合还能通过get_by_role等API做语义化定位。举个实际例子from playwright.sync_api import sync_playwright with sync_playwright() as p: browser p.chromium.launch(headlessFalse) page browser.new_page() page.goto(https://example.com/login) page.get_by_label(用户名).fill(test_user) page.get_by_label(密码).fill(123456) page.get_by_role(button, name登 录).click() page.wait_for_selector(.user-avatar) print(登录成功) browser.close()代码的可读性比Selenium版本高了一大截。get_by_label会自动匹配label标签get_by_role匹配按钮文本且支持模糊匹配这种语义化定位对后期维护非常友好因为改动class名不一定会挂脚本但只要可访问性结构稳定脚本就还能跑。2.3 稳定的等待策略与测试用例组织UI自动化最容易出现的问题就是“偶发失败”也就是常说的flaky test。十个失败里至少八个和等待策略有关。很多人图省事写time.sleep(3)实测下来这种脚本跑十次能成功七次就谢天谢地了——别人网络慢一点、资源加载多一点时间到了元素还没出来直接报错。正确的做法有三个层次首选显式等待针对某个条件去等比如元素可见、文本出现、请求返回次选重试机制关键操作失败后自动重试一两次最后才是固定等待而且只用于确知需要等待而不适合轮询的场景比如等待某个动画结束。测试用例的组织我强烈建议按“一用例一业务场景”来组织而不是一个方法一个方法地细拆。UI自动化的粒度应该是“用户完整走完一条业务流程”比如登录→搜索→加购物车→下单→支付→查看订单。这样用例的断言才有业务价值而不是今天验证弹窗出现、明天验证按钮变色。再补充一个实际项目里的常见做法把“准备数据”和“操作UI”分离。比如下单用例不要每次都从注册新账号开始跑那样太慢且不稳定。可以通过接口预置一个账号和购物车数据UI层专心验证交互流程。这一点在后面的接口自动化章节还会再展开。3. 移动端App自动化实战移动端App自动化比Web端难了一个量级核心原因在于环境复杂度——设备型号、系统版本、屏幕分辨率、网络状态任何一个都可能导致脚本失效。我从Appium环境搭建讲起把最常踩的坑一次讲清楚。3.1 Appium环境搭建与真机连接Appium的环境搭建在网上教程一堆但很多人照做还是起不来。我这里给一份我总结的、改动最小能跑起来的清单第一安装Node.js和Appium Server。命令行执行npm install -g appium即可。第二根据你测的平台安装对应驱动Android是appium driver install uiautomator2iOS是appium driver install xcuitest。第三准备Java SDK和Android SDK并通过adb devices确认能识别到手机。第四安装Appium客户端库Python项目就用pip install Appium-Python-Client。环境搭好后创建一个最小会话跑通为止from appium import webdriver from appium.options.android import UiAutomator2Options options UiAutomator2Options() options.platform_name Android options.platform_version 13 options.device_name example_device options.app_package com.example.app options.app_activity .MainActivity options.no_reset True driver webdriver.Remote(http://localhost:4723, optionsoptions) driver.find_element(byAppiumBy.ID, valuecom.example.app:id/login_button).click() driver.quit()这段代码有几句需要解释一下。app_package和app_activity是指定要启动哪个应用的哪个页面这个信息可以通过adb shell pm list packages和adb shell dumpsys window | grep mCurrentFocus查。no_reset很关键——设置为True可以避免每次跑用例都重装App但缺点是用例之间的状态可能互相污染具体怎么取舍后面会讲。3.2 无线连接与批量执行手机连着USB线跑用例对于本地开发调试没问题但想并发跑多台设备就尴尬了。这时候就要用adb的无线调试能力。手机开启无线调试并连接到电脑同一网段后执行adb tcpip 5555 adb connect 192.168.1.100:5555之后adb devices能看到一个网络设备Appium连接它和USB没区别。对于iOS设备实测下来还是老老实实用有线最稳无线调试的稳定性一言难尽。我试过几次Wi-Fi环境下跑iOS真机经常出现会话中途断掉的问题排查半天往往还是物理链路的问题。多设备并发执行还有一个点**每个设备对应一个独立的Appium Server端口不能复用。**比如设备A用4723设备B就得用4725。框架层面要支持按端口和设备参数动态生成capabilities否则写脚本的人得手动改文件这种框架离“好用”还有距离。3.3 App控件定位与iOS/Android差异App控件定位方式其实和Web很像也支持ID、XPath、AccessibilityId等。Android上最常用的是resource-idiOS上则更推荐用XCUITest的accessibility identifier。实际项目里最大的坑是**同一个App两端元素属性完全不一样一套定位脚本根本没法直接复用。**所以设计App自动化框架时最好把元素定位信息做一层抽象用页面对象模式封装起来暴露给业务脚本的应该是“在登录页输入用户名”这样的动作而不是driver.find_element(...).send_keys(...)这种细节。还有屏幕尺寸的问题。不同分辨率的设备上元素的坐标位置会变化所以不要用绝对坐标。Appium的MobileBy.ANDROID_UIAUTOMATOR可以支持用UiAutomator表达式定位灵活度更高但性能上会稍慢一点。另外iOS上还有一个比较烦的问题系统权限弹窗定位、通知、相册第一次启动App时会弹出而且没法像Android那样简单地用driver.switch_to.alert处理。通常的解法是在App启动参数里预置权限配置或者用XCUITest的addUIInterruptionMonitor机制去监权弹窗并自动点击。这个问题如果不在框架层面统一处理每个脚本都会随机被弹窗拦截一波整个自动化的成功率就会被拉到惨不忍睹的程度。4. 接口自动化与测试框架搭建如果只能选择一种自动化去做我会毫不犹豫选接口自动化。它比UI自动化稳定得多、执行快得多而且产出比极高。这一章我会拿Python生态的pytest requests组合来拆解顺带讲讲Java技术栈的框架思路。4.1 pytest高效组织接口用例一个接口用例的基本结构很简单构造请求、发送请求、校验响应。但用pytest组织时有几个好习惯值得从一开始就养成。示例代码如下import pytest import requests BASE_URL https://api.example.com pytest.fixture def auth_token(): resp requests.post(f{BASE_URL}/login, json{username: admin, password: 123456}) assert resp.status_code 200 return resp.json()[token] def test_get_user_info(auth_token): headers {Authorization: fBearer {auth_token}} resp requests.get(f{BASE_URL}/user/info, headersheaders) assert resp.status_code 200 assert resp.json()[code] 0 assert resp.json()[data][username] test_user这里用到了fixture来抽取登录和token逻辑。这样每个用例就不需要重复写登录了要改token获取方式时也只改一处。这就是框架的第一个价值——减少重复代码提高脚本的维护性。在此基础上还可以做几件事用pytest.mark.parametrize做参数化把多组入参和期望结果配成一表格用conftest.py统一管理fixture和全局配置用pytest-assume做软断言一个用例可以验证多个点不会因为第一个断言失败就跳过后面的检查。4.2 数据驱动与多环境切换接口自动化里特别容易出问题的一个是数据一个是环境。数据问题我会放到第8章专门说这里先讲环境切换。实际工作中同一个接口至少有开发、测试、预发三套环境。如果每个环境都维护一份完整配置再去改代码那基本没法维护。标准做法是把环境信息独立到配置文件用pytest的--env参数动态指定pytest --envtest对应的conftest里做这样一个判断def pytest_addoption(parser): parser.addoption(--env, actionstore, defaulttest, help环境参数: dev/test/staging) pytest.fixture def base_url(request): env request.config.getoption(--env) url_map { dev: https://dev.api.example.com, test: https://test.api.example.com, staging: https://staging.api.example.com } return url_map[env]环境配置不放在代码里而是放在配置文件里这是一个基础但重要的规范。我见到不少团队把测试环境的域名、账号密码硬编码在测试脚本里跑起来像一颗定时炸弹——哪天某个环境域名变了就是一场集体扑火的灾难。4.3 Java接口自动化框架与平台化思路Java团队做接口自动化的标配一般是TestNG/RestAssured/Allure这个组合。RestAssured写断言的风格很流畅比如given() .header(Authorization, Bearer token) .param(page, 1) .when() .get(/user/list) .then() .statusCode(200) .body(code, equalTo(0));Java的框架优势在于和业务系统的技术栈一致方便复用开发那边的工具链和CI环境。劣势是写起来比Python啰嗦用例量一大代码量也随之上来。所以Java接口框架更要注意数据驱动和模板化尽量把用例收敛到Excel、YAML或数据库配置里而不是用Java代码堆用例。不管用哪种语言接口自动化的最终形态都应该是“平台化”。前面第1.3节提到的那几个能力放在接口自动化上同样成立而且实现起来比UI自动化更容易因为接口用例数据化和配置化的空间更大。一个成熟的接口测试平台可以让测试人员在不写代码的情况下维护大部分用例这才是真正的提效。5. AI辅助测试与Agent实践最近一年AI辅助测试的热度非常高什么“用LangChain读取测试用例自动生成UI自动化脚本”这类文章到处刷屏。我团队里也实际做过类似的原型把真实经验分享一下哪些能落地哪些还只是PPT。5.1 LangChain Agent读取测试用例生成脚本的设计这个需求本质上是**把自然语言描述的测试步骤转换成可执行的自动化脚本。**用LangChain做一个Agent基本流程是读取测试用例文档EXCEL、XML或者Markdown都行让大模型理解用例操作步骤结合被测系统的页面元素定义让大模型把步骤映射为Playwright/Selenium代码生成脚本后自动在测试环境执行并把日志和截图回传。一个简化的设计思路可以用代码表示from langchain.llms import OpenAI from langchain.agents import create_sql_agent # 注意实际项目里请通过公司内部网关或本地模型调用避免数据外泄大致流程是把测试用例文本切片后用提示词工程要求模型“只输出合法的Playwright Python代码”、“使用给定的data-testid定位”、“不要写死等待时间”再通过一个大模型生成骨架代码、一个小模型负责校验和修复语法错误。我在实验中发现加上“先列出你识别到的页面元素再写代码”这一句生成脚本的准确率会明显提升因为强迫模型理解了页面结构再动手。5.2 自动化测试中的AI能力边界做了几轮实验之后必须泼点冷水AI自动生成脚本在“静态稳定”的页面上效果很好碰到复杂业务逻辑就原形毕露。比如登录、增删改查这类流程只要给出足够清晰的页面元素信息生成脚本的可用性很高。但一旦涉及状态变化、条件分支、数据依赖比如“如果上一步返回的订单号不为空则继续支付否则走退款流程”模型就很容易生成逻辑混乱的代码。再叠加跨页面跳转、弹窗、异步加载这些常见场景目前的大模型还没有足够强的“测试意识”——它不理解业务上什么是对的只会机械地把自然语言翻译成代码。所以我给团队定的原则是AI生成脚本只用于“脚本初稿”必须经过有经验的测试工程师审查并且跑在测试环境验证通过后才能进入到正式的自动化用例集里。把它定位成一个“效率工具”而不是“替代者”才是正确姿势。5.3 用Prompt工程规范生成结果让AI生成脚本的质量稳定Prompt工程比模型选择更关键。我总结出几个对生成效果影响最大的Prompt要素角色设定先告诉模型“你是资深自动化测试工程师熟悉Playwright和Pytest”。约束条件明确“只能使用data-testid或get_by_role定位”、“不得使用sleep”、“所有等待必须使用wait_for_selector”。输出格式指定“输出可直接运行的Python文件不要输出解释”。元素信息提前提供被测页面的关键元素清单减少模型瞎猜。另外让模型先规划再写代码往往比直接让它写效果更好。比如可以在Prompt里要求“先列出执行步骤的序列再基于步骤列表生成代码”实测下来生成脚本的步骤遗漏率能降低不少。6. 物联网与嵌入式测试的特殊挑战“涉及物联网设备的软件测试怎么测”也是近期被问爆的问题。这里说的IoT测试和常规App、Web测试有本质区别你要测的不只是软件是软硬件一体化的系统。这也导致传统自动化方法论在其中经常失效。6.1 为什么传统自动化在IoT上经常失灵IoT项目通常包含设备端固件、移动端App、云端平台三条链路。传统自动化测试主要聚焦在App和云端Web端但真正的业务逻辑往往分布在设备端——传感器数据采集、设备状态上报、指令下发响应、异常断连恢复这些逻辑很难用UI自动化覆盖。设备端的嵌入式代码测试多数情况下要依赖硬件在环测试也就是跑在真机或模拟器上通过串口、网络协议发送指令并断言设备行为。另一个核心痛点是设备状态的不确定性。Wi-Fi信号波动、蓝牙连接中断、设备固件版本不一致、云端网络延迟这些因素导致的失败大概率不是代码bug但脚本识别不了最后只能人工去看日志。想在IoT项目里做自动化第一步就是要建好分层测试策略设备协议层用接口自动化去测App展示层用UI自动化云平台业务用常规接口测试层与层之间通过测试数据打通。6.2 常见测法与工具对纯嵌入式设备测试常用的是基于串口的自动化框架比如通过串口发送AT指令并读取返回更规范一点的会用到CANoe、TSMaster这类总线测试工具专门针对车载和工业设备。TSMaster我在一些车载项目里见过它能模拟总线节点、发送报文、检查响应并且有脚本接口可以自动化执行整套整车级测试用例。如果设备支持网络协议MQTT、CoAP、HTTP那么接口自动化那一套思路完全可以用——通过MQTT下发命令断言设备上报的数据是否一致。import paho.mqtt.client as mqtt def on_message(client, userdata, msg): print(f收到设备上报: {msg.topic} - {msg.payload.decode()}) # 校验数据格式和业务字段 assert temperature:25 in msg.payload.decode() client mqtt.Client() client.on_message on_message client.connect(192.168.1.200, 1883, 60) client.subscribe(devices/device_001/telemetry) client.loop_start() # 发送读取指令 client.publish(devices/device_001/command, {cmd: read_temp})IoT自动化真正难的不是写脚本而是搭环境和维护环境。设备动不动就掉线、固件版本五花八门、网络隔三差五抽风——这些外部因素会让自动化结果看起来一片红但实际上和代码bug毫无关系。建议每个IoT自动化项目都先建一个“环境健康检查”用例集每轮跑完先看环境检查的结果再谈业务用例是否通过。7. 面试与职业成长自动化测试的进阶路线聊完具体技术再说点更实际的——怎么拿这些经验去面试、去涨薪。软件测试面试现在热门的问题已经不只是“Selenium怎么定位”而是技术深度和项目细节我在这里梳理下准备思路。7.1 高频面试题的答题思路我在面试候选人时最常问的一个问题是“你做过自动化测试项目里面最难解决的问题是什么”**注意面试官不是真的关心那个问题而是想看你的排查思路和复盘能力。**很多人答不上来或者只会说“用time.sleep等了几秒就好了”这种答案一听就是没深入思考过。合适的回答结构是先说问题现象再说排查过程最后说解决方案和效果。比如有个面试者回答“我们有个用例在Jenkins上跑十次挂三次后来我把失败任务的截图和日志全部捞出来发现都是元素定位超时进一步排查才发现是测试环境某个接口响应变慢导致页面加载时间不稳定。后来我改成显式等待并在关键操作前加了API探活失败率降到了1%以下。”这种回答一下就能让面试官看出技术功底。其他高频题包括自动化框架怎么设计、接口测试数据怎么管理、如何保证自动化用例稳定性、如何推动研发一起做测试。这些问题每一个都可以在前面几章的内容里找到答案关键是组织成自己的项目故事而不是背八股文。7.2 简历写法与学习路线简历上写自动化测试项目经历时不要只写“负责编写自动化测试脚本”那句话没有任何区分度。更好的写法是强调你的设计能力比如“设计并搭建了基于pytest的接口自动化框架支持多环境切换、数据驱动和Allure报告覆盖核心接口300回归时间从2天缩短到30分钟”。再比如“主导Web UI自动化项目通过引入Playwright替代Selenium将用例稳定性从90%提升到98%”。学习路线的建议我从带新人经验里归纳出来的顺序是**先学接口自动化pytest requests再学Web UI自动化Playwright或Selenium最后按需学移动端App自动化Appium。**接口自动化最快见效能让你最快理解测试框架的本质逻辑UI自动化能让你理解端到端测试的复杂性App自动化属于加分项适合明确要做移动端测试的场景。AI辅助测试和Agent方向可以作为长期跟踪点但不要作为主路线——目前它还没到能帮你拿offer的程度更多是锦上添花。8. 实战中的常见问题与避坑注意事项做自动化这十年我深刻体会到踩坑才是最快的成长。这一章把高频问题集中整理出来附带我的排查思路和解决手段相当于一份速查手册。8.1 问题一用例跑着跑着就“偶发失败”这类问题最常见现象是同样的脚本这轮全过下轮挂三四个。我的排查顺序是先看失败用例的截图和日志多数情况能直接看出是不是元素没找到如果不是再去看失败那一刻测试环境是不是有接口报错或网络抖动这属于数据或环境问题需要从测试数据管理和环境稳定性上解决。**偶发失败里至少一半是测试数据冲突导致的。**比如多个用例同时用同一个账号登录一个用例改了密码另一个用例就登录失败了。解决方案是每个用例用独立数据或者执行前重置数据。8.2 问题二生产环境和测试环境页面结构不一致新项目从开发手里接过来时最容易遇到的就是测试环境和生产环境页面不一样脚本在测试环境跑得好的一上生产就挂。这个问题没有一劳永逸的解法能做的就是把环境差异显性化。在框架的配置层单独维护每个环境的选择器映射表运行用例时带上环境标签。同时推动前端团队在前端代码里统一埋点>

相关新闻

验证债务:AI编程时代如何让代码质量跟上生成速度

验证债务:AI编程时代如何让代码质量跟上生成速度

1. 验证债务:为什么代码越快,心里越没底最近跟团队复盘一个AI辅助开发的项目,有个数据让我印象很深:功能代码的交付速度比上个季度快了将近一倍,可上线前的Bug率不降反升,有一半的缺陷是在回归测试阶段才暴…

2026/10/11 19:13:18 阅读更多 →
GitHub Copilot Code Review接入CI:从网页评论到质量门禁的工程实践

GitHub Copilot Code Review接入CI:从网页评论到质量门禁的工程实践

我们团队最近做了一次不算大的调整,讨论时间却比预期长不少:把 GitHub Copilot Code Review 从"人在网页上点开看"改成"CI 里自动跑、结果进入合并门禁"。刚开始我以为这只是换一种方式调接口,真正动手才发现&#xff0c…

2026/10/11 19:13:18 阅读更多 →
GPU服务器装Windows+Ubuntu 24.04双系统:BIOS、引导与驱动全攻略

GPU服务器装Windows+Ubuntu 24.04双系统:BIOS、引导与驱动全攻略

手头这台GPU服务器,我原本一直跑Linux环境做模型训练,直到最近要对接一个只提供Windows版本的采集程序和标注工具,才被迫把“GPU服务器安装WindowsUbuntu 24.04双系统”提上日程。整套流程折腾下来,最深的体会是:GPU服…

2026/10/11 19:13:18 阅读更多 →

最新新闻

基于JavaEE的网上书店项目实战:从环境配置到核心代码解析

基于JavaEE的网上书店项目实战:从环境配置到核心代码解析

简介:一份基于JavaEE的网上书店项目,包含完整源代码与SQL初始化脚本,适合作为课程设计或毕业设计,覆盖用户注册登录、图书检索、购物车结算、订单管理、后台维护、销售统计等完整业务流程。压缩包为ZIP格式,共88个文件…

2026/10/12 7:06:07 阅读更多 →
金融AI智能体落地方法论:分层解耦、责任切片与业务可验证

金融AI智能体落地方法论:分层解耦、责任切片与业务可验证

1. 这不是又一个“AI喊口号”项目,而是一套可落地的金融智能体工程方法论“金融AI智能体”这六个字最近在行业会议、技术沙龙和内部立项材料里高频出现,但翻看多数所谓“智能体”方案,本质还是把原有规则引擎换个壳,加个Chat界面&…

2026/10/12 7:06:07 阅读更多 →
小区充电桩博弈困局:从博弈论模型到有序充电落地实践

小区充电桩博弈困局:从博弈论模型到有序充电落地实践

如果你以为小区充电桩落地最难的是电缆怎么走、变压器容量够不够,那你大概率还没和物业正面交锋过。过去一年,我同时以业主和技术顾问的双重身份,参与协调了三个小区的充电桩建设,两个谈成,一个至今搁浅。回头看&#…

2026/10/12 7:06:07 阅读更多 →
Java实现WITSML客户端:绕过协议坑的实战指南

Java实现WITSML客户端:绕过协议坑的实战指南

简介:本资源是一份面向油气行业软件开发者与Java后端工程师的WITSML标准实践源码包,聚焦井下数据交互场景,提供可学习、可调试、可扩展的Java WITSML客户端实现。资源完整覆盖WITSML 1.3.1与1.4.1双版本协议,支持数据查询、上传、…

2026/10/12 7:06:07 阅读更多 →
全屋定制AI智能体:解决改图拆单痛点的全链路落地方案

全屋定制AI智能体:解决改图拆单痛点的全链路落地方案

做全屋定制的朋友应该都有过这种体验:客户在手机那头轻描淡写一句“阳台柜缩短一点”,订单这边设计、改图、拆单、审单全部推倒重来,设计师深夜对着CAD改板件尺寸,拆单员对着密密麻麻的孔位图反复核对五金件位置。改图改到吐&…

2026/10/12 7:06:07 阅读更多 →
七要素一体式超声波气象站选型、安装与排障实战指南

七要素一体式超声波气象站选型、安装与排障实战指南

干气象设备这行这么多年,我越来越觉得“七要素一体式气象站”和“超声波气象站”这两个词,已经被很多人混着用了。本质上说的是同一类产品:把温度、湿度、气压、风速、风向、雨量、还有额外一个环境要素,集成到一台没有转动部件的…

2026/10/12 7:05:07 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →