☰
AI绘画冲击UI岗位后,我转身测试岗用ComfyUI做视觉回归
2026/10/24 15:02:58 网站建设 项目流程

标题这句话,半年前打死我都不信。但当我真的签了离职单,看着AI绘画工具在十分钟内把过去需要一周才能完成的整套活动页Banner跑完时,我信了——AI绘画对UI岗位的冲击不是未来式,它已经在用最直接的方式改变这条赛道。后来我阴差阳错转入测试岗,从零开始学Appium、学自动化、学用例设计。大半年过去,我反而觉得这条路走对了。这篇文章就想认真聊聊:AI绘画到底是怎么"杀死"一批UI岗位的?幸存者又是怎么在测试岗上完成反击的?以及怎么在测试工作中把AI绘画这项新技术变成自己的武器。

如果你现在正焦虑"我的岗位会被AI替代吗",或者已经在测试岗但不知道如何突破,这篇文章应该能给你一些具体参考。我没打算把AI吹成神,也不会劝你无脑转行。我会把每个操作背后的原因、踩过的坑、和可以直接抄作业的方法都摊开说。

1. 风暴来的时候,UI岗位到底发生了什么

1.1 为什么AI绘画首先冲击的是初级UI

一个典型的UI团队,日常消耗工时最多的是什么?不是那个"改变世界的创意页面",而是运营活动页、Banner、专题页、图标、配图、标签图。这些需求的特点是:量大、迭代快、风格要统一,但单张创意含量并不高。很不幸,AI绘画最擅长的恰恰就是这类图。

Stable Diffusion、Midjourney这些生成式模型,输入提示词就能出图,配合LoRA可以稳定复刻特定画风,配合ControlNet可以控制构图。过去一个设计师从参考收集、草图、改稿到切图要两三天,现在用ComfyUI搭好工作流,一次批量生成几十张候选图,人工挑一挑、微调一下,一个下午就交付了。

我认识的一个设计团队,在没引入AI绘画之前,活动图档期排到两周之后。引入工作流之后,排期直接砍半。老板一看这个效率,接下来考虑的自然是"还需要那么多初级UI吗"。招聘网站上可以明显看到,基础执行类的UI设计需求在收缩,而"会用AI工具的设计师"和"能搭建自动化流程"的人开始吃香。

说实话,AI没有杀死"设计"这个能力,但它确实杀死了大量"只要会画图就能混饭吃"的岗位。如果你的核心竞争力只是"会PS、会切图、会照着规范拼界面",那确实很容易被替代。这也是我去测试岗的一个转折点——与其在一个被技术压缩的岗位里内耗,不如换一个技术能抬高你价值的岗位。

1.2 测试岗看起来不酷,但够稳

测试岗被很多人当成互联网鄙视链的底端,但真到裁员潮来的时候,测试反而是相对稳的。原因很简单:只要产品还在迭代,总要有人负责保证质量。AI绘画能帮你更快地产出界面,却不能替你判断这个界面在真实设备上是不是显示正常、交互是不是符合预期、回归会不会挂。

更要紧的是,AI生成的东西越多,需要验证的边界就越多。生成图版权问题、模型输出随机性、UI在不同分辨率和设备上的适配——这些恰恰都是测试的活儿。我在转岗第一周就意识到,测试这门手艺在AI时代不是被削弱,而是在被重新放大。比如:

  • 自动化测试脚本本身就是一种"程序化验证流程",AI技术改变的是执行方式和素材生产;
  • 移动端、Web端、车载、物联网,只要涉及软件交付,测试就是刚需;
  • 测试工程师如果懂一点生成式AI,会特别吃香。

另外,测试岗对新人相对友好。它不像开发那样要求立刻写出高可用代码,而更像"带着找茬思维去理解系统"。对设计师来说,这种思维几乎不用学——你过去每天在看界面哪里丑、哪里不对齐、哪里会误导用户,这不就是测试的雏形吗?

所以我把测试岗视为幸存者的基地,而不是职业生涯的退场通道。接下来要说的,就是怎么在基地里搭建反击的弹药库。

2. 复仇计划的第一阶段:把设计功底转成测试能力

2.1 设计师转测试,不是从零开始

很多人以为UI转测试是从零开始,其实不是。UI设计师手里的底牌,在测试岗上反而更有价值。

第一,你能读懂设计稿。测试用例要验证的界面元素,你一眼就能看出哪个按钮的位置、颜色、字号跟设计稿不一致。这种视觉敏感度,是纯开发背景的测试人员要额外培养很久的。

第二,你懂交互流程。做UI时你本来就要考虑用户怎么点、页面怎么跳、异常流程怎么处理、空态和加载态长什么样。把这些翻成测试场景,简直是降维打击。比如登录,普通测试可能只写"输入正确账密能登录、输入错误账密有提示",你还会想到"密码框是否支持粘贴、点击登录按钮是否有防重复提交、验证码倒计时是否准确、键盘弹出是否遮挡输入框"。

第三,你擅长沟通和描述问题。设计师平时对着开发解释视觉还原问题,语言组织能力天然就强。缺陷报告写得清楚,开发和产品看了就明白,整个团队的协作效率都会提升。

当然,短板也要认。我一开始不会写代码,看到自动化框架里的元素定位、显式等待、断言这些概念,头是大的。但后来发现,这些技术点并不难,难的是愿不愿意花时间把旧技能往新岗位上迁移。测试这个岗位,恰好给你留了这个缓冲期。

2.2 工具链选型:从Appium开始

UI测试自动化工具这么多,为什么我先选Appium?因为它的跨平台能力和社区成熟度。你在Web端玩过Selenium/WebDriver,上手Appium几乎零成本——Appium本来就是WebDriver协议在移动端的延伸。Android和iOS都能覆盖,而且支持Java、Python、JavaScript等主流语言。对刚转行的设计师来说,选Python作为入门语言最合适。

除了Appium,还要配合两样东西:

  • 截图工具或框架自带的截图能力。Appium自带save_screenshot,写完用例顺手存图,后面做视觉回归会用到。
  • 视觉对比工具。最轻量的方案是pixelmatch加PNG解析,或者直接用Pillow做像素差异统计。商业方案如Applitools也好用,但对个人学习来说成本偏高,我建议先用开源链路跑通流程。

选型时还有一个容易被忽略的点:测试对象是什么。如果你测的是纯Web,可以直接上Selenium或Playwright,没必要非套Appium;如果你测的是混合应用,其实Appium也能处理;如果公司有现成的测试平台,优先跟着平台的技术栈走,方便跟同事协作。我的建议是:别贪多,先把一条链路跑通。

2.3 一个可以直接跑的UI自动化测试小框架

下面给一个最小可跑的Appium登录测试脚本,我在本地Android模拟器上跑过,可以直接参考。主要验证点:输入正确账密能进入首页,并截图存档。

from appium import webdriver from appium.webdriver.common.appiumby import AppiumBy from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC caps = { "platformName": "Android", "deviceName": "emulator-5554", "appPackage": "com.example.demo", "appActivity": ".MainActivity", "noReset": True } driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps) wait = WebDriverWait(driver, 10) # 输入账号密码 username = wait.until( EC.presence_of_element_located((AppiumBy.ID, "com.example.demo:id/username")) ) username.send_keys("tester") driver.find_element(AppiumBy.ID, "com.example.demo:id/password").send_keys("123456") # 点击登录 driver.find_element(AppiumBy.ID, "com.example.demo:id/login_btn").click() # 断言首页标题出现 home_title = wait.until( EC.presence_of_element_located((AppiumBy.ID, "com.example.demo:id/home_title")) ) assert home_title.is_displayed(), "登录后未进入首页" # 截图,作为视觉回归基线或后续比对素材 driver.save_screenshot("screenshots/login_success.png") driver.quit()

这段代码写得很朴素,但它代表一个基本套路:定位元素、交互、等待、断言、截图。如果你原来做UI设计,现在开始写自动化,可以给自己加一条要求:每个用例都记录截图,并对照设计稿检查视觉细节。

这里有一个从设计视角出发的补充技巧:断言别只assert"元素存在",还要考虑"元素长什么样"。比如按钮的圆角、颜色、字号如果和设计稿不一致,用传统断言是发现不了的。这时候就要升级到视觉回归,也就是后面讲的用截图对比来当第二双眼睛。

3. 复仇计划的第二阶段:让AI绘画反过来当测试的武器

3.1 本地部署ComfyUI,把测试素材工厂开在自己电脑上

有了自动化测试的基础,我开始琢磨:能不能让AI绘画反过来给测试打工?毕竟我当年做UI最熟的,就是AI绘画这个工具。答案是能,而且玩起来很爽。

我在自己电脑上用ComfyUI搭了一个"测试素材工厂"。ComfyUI是节点式工作流工具,可以理解为AI绘画界的电路板:你把加载模型、输入提示词、设置采样器、保存图片这些节点连起来,它就按流程出图。和网页版生成器相比,ComfyUI更适合批量生产素材,因为它一次能跑多张图,还能通过API和外部程序集成。

本地部署ComfyUI的步骤大致是:

  1. 从官方仓库下载ComfyUI的发布包,Windows可以直接用整合好的绿色版;
  2. 安装Python 3.10以上的环境,按文档安装依赖;
  3. 下载开源的Stable Diffusion模型权重(比如SD 1.5或SDXL的开放权重),放到models/checkpoints目录;
  4. 启动ComfyUI,默认会在浏览器打开一个可视化画布;
  5. 拖一个最简单的文生图工作流,确认能正常出图后,再一步步加入LoRA、ControlNet、批量生成节点。

搭好工作流之后,我可以用它批量生成测试App的商品图、用户头像、活动海报。举个例子,电商App需要一个包含100个商品的列表页数据,人工找图要一下午,AI出图只要在ComfyUI里设好批量数量,等几分钟就齐了。再把生成好的图片用脚本自动传到测试环境的静态资源目录,页面就能展示"看起来真实"的数据了。

注意一个前提:本地部署的价值不光是省钱,更重要的是数据可控。测试环境可能会涉及一些内部场景,用在线生图工具容易把数据传到外部,合规上有风险。本地部署就不存在这个问题,模型权重和素材都在自己手里。当然,模型权重和训练素材也要注意授权边界,尽量用开源协议明确的模型,不要拿未经授权的商业素材去做生成。这是作为测试从业者该有的底线。

3.2 用AI生成素材验证真实页面,再做像素级回归

用AI生成的素材把页面数据填起来之后,下一步就是验证"页面到底有没有被填坏"。这就是视觉回归测试登场的地方。

思路不复杂:先截取一张"正常状态"的截图作为基准图,之后每次版本迭代或数据替换,再截一张当前图,用像素对比工具算差异。差异超过阈值,说明页面可能出了问题。常见的异常包括:文字溢出、图片拉伸变形、组件堆叠错位、样式丢失。

我一般用Python的Pillow库做轻量对比,步骤如下:

from PIL import Image, ImageChops def compare_images(base_path, actual_path, diff_threshold=0.05): base = Image.open(base_path).convert("RGB") actual = Image.open(actual_path).convert("RGB") if base.size != actual.size: actual = actual.resize(base.size) diff = ImageChops.difference(base, actual) bbox = diff.getbbox() if not bbox: return 0.0, None # 统计差异像素占比 diff_pixels = 0 for p in diff.getdata(): if sum(p) > 10: diff_pixels += 1 ratio = diff_pixels / (base.size[0] * base.size[1]) return ratio, bbox ratio, bbox = compare_images("baseline/list_page.png", "screenshots/list_page.png") print(f"页面差异比例: {ratio:.2%}, 差异区域: {bbox}") if ratio > 0.05: raise AssertionError("页面视觉回归未通过")

这段代码只做了一件事:比较两张图,输出差异比例和差异区域。实际项目里你可以把它包成一个工具函数,在自动化测试每条用例结束后自动调用。

这里要提醒一个关键点:不是所有像素差异都算bug。比如页面上的网络请求耗时导致加载状态不同、列表里滚动位置不同、系统状态栏时间在变,这些都会被算法算作差异。我的做法是配一个"忽略区域列表",把这些动态区域先用mask盖掉;或者把页面的关键区域单独截出来对比,比如只对比顶部导航、商品卡片的固定区域。判断标准永远是"用户感知是否异常",而不是"像素是否一模一样"。

3.3 让大模型给测试报告降噪

测试做久了,另一座大山是报告整理。一次回归下来几十条失败用例,每一条都要看截图、看日志、判断严重级别,再填到缺陷管理平台里。这个环节重复性特别高,AI正好能干。

我现在的做法是:把自动化测试的结果(用例名、步骤、报错信息、截图路径)结构化导出成JSON,然后交给大模型接口,让它根据报错信息判断可能的原因,再生成一段缺陷描述和严重级别建议。我只需要最后审核一遍,改一改语气就能提交。这套流程不复杂,核心是把数据喂给AI的Prompt写好。

这里要注意两点:

  • 测试日志里如果包含用户手机号、身份证号之类的敏感信息,一定要先做脱敏,或采用本地化模型处理,不要直接把原始日志丢给外部接口;
  • AI生成的缺陷描述只能当草稿,最终结论必须人工确认。AI最擅长的是把"堆在一起的报错信息"翻译成"人话",而不是替你拍板。

我还试过让AI直接分析两张对比图之间的"差异描述",效果比单纯跑像素差异更好。思路是先把两张图缩小到合理尺寸,用脚本找出差异明显的区域坐标,再让AI看图给文字描述:"底部Tab栏图标发生偏移,建议检查布局约束"。这块属于"AI测试"比较前沿的玩法,但它不是魔法,本质上仍然是"人的判断 + 工具的放大"。

4. 实战现场:踩过的坑和排查实录

4.1 自动化脚本第一轮跑挂的真实原因

第一次把我写的Appium脚本放到完整测试环境上跑,挂得很惨。挂的原因不是定位写错,而是我没考虑环境差异。

比如在模拟器上跑得好好的login用例,换到真机上就找不到元素。后来发现是Android系统版本不同,某些控件在页面上的层级不一样。解决办法是不要在代码里写死绝对路径的xpath,尽量用resource-id这种相对稳定的属性定位,再不行就用文本内容或accessibility id兜底。

另一个坑是等待。早期我习惯执行前sleep 5秒,结果网络一波动照样报超时。后来统一改成WebDriverWait加expected_conditions,等待元素可见或可点击,稳定性提升非常明显。记住一个原则:能用显式等待,就不要用固定sleep;能等元素状态,就不要等固定时间。

还有测试数据污染。因为不同用例共用一套登录账号,先跑完的用例改了用户信息,后面用例全挂。后来每个用例都新建独立测试数据,并在teardown里清理现场,这才恢复稳定。这个经验对任何自动化测试都适用:用例之间必须隔离,不能有执行顺序依赖。

4.2 AI画图当测试素材,我踩过的坑

AI生成素材这块,我也踩了不少坑。第一次批量生成100张商品图,导入测试环境后发现页面卡成PPT——因为原图分辨率太高,没有压缩。真实运营场景里的图片都是经过CDN压缩的,测试环境没有走这条链路,所以页面加载特别慢。后来我写了个批处理脚本,统一把图缩放、压到适合移动端展示的尺寸,问题就解决了。

第二个坑是出图风格不稳定。同一个提示词,ComfyUI每次生成的图都有一点差异。这个在纯设计场景可能无所谓,但作为测试素材,我不希望列表页里突然出现一张风格完全不对的图干扰视觉判断。解决办法是固定seed,并把整套工作流保存成模板,后续只改数量。

第三个坑是生成图里经常有伪影。比如商品图上多出一根手指、文字乱码,这会让页面看起来非常不专业,也会干扰视觉回归的判断。我的做法是生成10张里人工初筛掉明显有问题的,再通过一个简单的清晰度过滤脚本辅助排查。别指望AI出图100%可用,人机结合才是效率最高的。

第四个坑是合规红线。千万不要用未经授权的真实人物照片、品牌Logo、商业素材丢进模型里生成测试图。做测试也一样要讲版权,否则脚本没上线,法务先上线了。

4.3 常见问题速查表

整理一个速查表,可以直接当成团队内部参考,遇到问题先对号入座:

问题可能原因解决办法
Appium找不到元素控件层级/属性不稳定改用resource-id或accessibility id定位;避免绝对xpath
脚本偶发超时页面加载慢,固定sleep不合理使用WebDriverWait显式等待;检查网络和测试环境
用例之间有依赖测试数据未隔离每个用例独立数据,teardown清理
视觉回归误报动态区域(时间/异步列表)被计算进差异配置mask忽略区域,或锁定基准设备/环境
ComfyUI出图风格不稳定seed未固定、工作流未模板化固定seed,保存workflow模板
生成图分辨率过大原图未压缩写批处理脚本统一缩放
生成图有伪影模型能力/提示词问题人工初筛加清晰度过滤
缺陷报告表述不清日志堆叠、缺少上下文用大模型辅助生成草稿,人工审核

5. 这不是复仇,是转守为攻

5.1 别和AI比画图,要和AI比组装

走到这一步,我不太想用"复仇"这个词了,因为回头发现,AI绘画并没有杀死我,它只是把"只会画图"这条捷径堵死了,逼我换了一条更难但更宽的路。

在测试岗上,我的核心竞争力不再是"画得比AI快",而是:

  • 理解业务和用户,能把模糊需求转化为精确的验证点;
  • 能写自动化代码,让重复劳动交给人以外的程序去跑;
  • 能搭AI绘画工作流,让素材生产变成工厂流水线;
  • 能看懂模型输出并做判断,

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询