AI + 自动化测试
您需要高效学习,找工作? 点击这里 白月黑羽实战班
点击查看学员就业情况
前言
在软件测试的 自动化开发过程中,怎么样使用好AI,最大限度地提升工作效率和工作产出呢?
很多人没有系统的概念,只能东一榔头西一棒。
这里通过一个示例项目的自动化测试,给大家分享我自己摸索之后,总结出来的流程办法。
使用这套方法, 让AI在我的管理下,开发自动化测试代码,尽量减少AI的不确定性,使得结合AI的开发的 自动化测试系统,发挥稳定。让我觉得比较放心。
大家可以在这基础上进行改进。
🗝️ 预备知识: Python, Selenium, API 接口自动化, hytest
注意:
目前AI 只是帮你提高效率的工具, 我们自身仍然要掌握好自动化开发技术。
不要幻想,我自己不会写代码,就用AI就能做好自动化测试。
错误做法
❌ 发个简单的命令,让AI自己完成一切。
比如
然后让AI产生的自动化用例跑一通。就直接提交测试结果
AI 目前不能 当作独立承担项目 的人 来用。
它是只你的智能助手。
目前的编程智能体 确实具备提高我们工作效率的能力, 非常有用。
我们要做的是,了解它的能力,要把它用好。
怎么用好?就是要做好对他的 指导/检验/改进
原则是:
-
人工设定自动化流程步骤,每个步骤做什么
-
让AI 帮我们完成每个步骤中适合它的任务,然后我们验证它的结果。
AI是在我们严格的监督把控下, 一步步帮我们实现目标。
我们非常的清楚它每一步做了什么 。
这样才能减少不确定性。 并且出现问题时,我们才知道,如何指导它改进,或者我们自己手动改进。 从而最终达到目标 。
软件开发智能体
功能简介
Claude Code,Codex, Gemini Cli, Qwen Code 编程智能体 大体是如何实现自动化开发的?
它们本质上是基于大语言模型(Large Language Models, LLMs)对代码的理解与生成能力,结合工具链、上下文感知和用户交互,从而进行自动化软件开发。
下面是一种 简化版的智能体架构图
当接收到一个用户指令,比如 @cases\管理员功能.py, 根据文件里面的用例说明,完成用例自动化代码
开发智能体 可能会这样操作
- Agent核心 把
项目上下文+工具列表
+ 如下内容,发送给 LLM。
- LLM 返回结果,比如
"actions" :[
{
"type": "function_call",
"function": {
"name": "read_text_file",
"arguments": {
"file_path": "cases/管理员功能.py"
}
}
}
]
-
Agent核心 根据返回结果,发现需要执行命令,就调用工具执行器,读取
cases/管理员功能.py
文件; -
Agent核心 把
项目上下文+工具列表
+ 如下内容,发送给 LLM :
用户原始指令是:xxx 。
你刚刚调用了工具:read_text_file("cases\管理员功能.py")
工具返回结果:
<文件内容>
请一步一步思考,接下来怎么做
请输出:
- 如果需要调用工具,请输出 JSON 格式
- 否则,直接给出纯文本描述。
- LLM 返回结果,比如
"actions" :[
{
"type": "function_call",
"function": {
"name": "write_text_file",
"arguments": {
"file_path": "cases/管理员功能.py",
"content": <文件内容>
}
}
},
{
"type": "function_call",
"function": {
"name": "exec_command",
"arguments": {
"command_string": "pylint cases/管理员功能.py"
}
}
}
]
- Agent核心 根据返回结果,发现需要执行2个命令
就调用工具执行器,执行命令1,把 LLM产生的代码文件内容,写入 cases/管理员功能.py
文件;
执行后发现没有错误,执行命令2,然后 把 项目上下文+工具列表
+ 如下内容,发送给 LLM :
用户原始指令是:xxx 。
你刚刚调用了2个工具,
工具1,write_text_file("cases\管理员功能.py")
工具返回结果:
<返回值=0>
工具2,exec_command("pylint cases/管理员功能.py")
工具返回结果:
<pylint 结果>
请一步一步思考,接下来怎么做
请输出:
- 如果需要调用工具,请输出 JSON 格式
- 否则,直接给出纯文本描述。
- LLM 发现pylint 没有错误,返回结果,比如
- Agent核心 看到没有进一步的工具执行,只有文本,知道任务完成,把结果显示在界面上让用户看到。
安装
可以使用和IDE集成的智能体,比如 Cursor IDE,VSCode(Copilot)等。
也可以选择命令行界面的,比如 Claude Code,Codex, Gemini Cli, Qwen Code等
这里为了方便(省钱/省黑科技),我们选择 Qwen Code
🟢 下载安装 Qwen Code
到 nodejs.org
网站下载安装 nodejs
后,
可以执行这个命令指定国内源:
然后,
🟢 然后配置认证方式:
有2种方式: qwen.ai 账户
认证 和 OpenAI 兼容 API
认证。
参考 https://qwenlm.github.io/qwen-code-docs/zh/cli/authentication/
推荐使用 qwen.ai 账户
认证,因为有免费配额如下
警告
如果使用后者,比如阿里云百炼的 API Key 认证,可能会大量收费。
🟢 推荐和IDE集成,比如 vscode
好处和方法,参考:https://qwenlm.github.io/qwen-code-docs/zh/ide-integration/
实战项目
被测系统
我们用来演示自动化测试的系统,名为 白月SMS系统,是一个 简单的药品管理演示系统,把它当作你要测试的系统。
测试用例
请大家先认真看一遍测试用例文档,对接下来要实现哪些功能心中有数。 然后再进行后续的学习。
开发过程 - Web测试
Web UI 自动化准备
如果你要做 Web UI 自动化测试,需要准备如下2方面:
保存页面html内容,方便AI查看
AI 怎么能知道界面自动化的各种元素在哪里?自动化定位的特征是什么呢?
现在的编程智能体往往会自己生成代码, 去扫描界面,先了解界面。 但是根据我的经验, 这样会增加智能体循环步骤,增加错误可能。
推荐自己预先把需要自动化的页面html内容保存下来 。
如果使用浏览器的保存页面功能。 一些动态产生的界面元素不会被保存。
推荐可以直接使用下面的代码, 浏览到你要保存的界面,输入保存文件名,回车即可 。
先安装 beautifulsoup4
库,为了格式美化要下载的 HTML 内容。
然后运行下面的代码
save_dir = "ai/webpages" # 页面保存目录,改为你的目录
from selenium import webdriver
from bs4 import BeautifulSoup
import os
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = webdriver.Edge(options=options)
os.makedirs(save_dir,exist_ok=True)
while True:
fileName = input("输入文件名,下载当前页面HTML:")
html = driver.page_source
soup = BeautifulSoup(html, 'lxml')
pretty_html = soup.prettify()
filePath = os.path.join(save_dir, fileName+".html")
with open(filePath, "w", encoding="utf-8") as f:
f.write(pretty_html)
print(f"HTML 已保存为 {filePath}")
注意。 保存一个页面时,要把页面上可能会显示的内容,尽可能的点击显示出来。
比如订单页面, 应该点击选择客户 和 药品, 把这些数据都呈现出来,再保存页面。
界面元素定位 配置文件
我在使用AI生成自动化代码的时候,发现有一个问题: AI的选择定位元素的时候 发挥不稳定。
上一次能正确的定位到元素,下一次就不一定了 。
推荐用一个 pageinfo.py
文件,里面定义各个页面的元素定位特征。
可以先人工写一个模板,然后让AI自动化根据前面的页面html内容,生成元素定位特征,我们再人工验证其正确性。
这样我们只要保证配置里面的定位信息是正确的,然后让AI尽量的使用这个配置文件里面的定位方法,就会尽量减少发挥不稳定的问题。
比如,模板如下
from selenium.webdriver.common.by import By
urlprefix = 'http://127.0.0.1'
class 登录页面:
url = '/mgr/sign.html'
downloaded_html = 'ai/webpages/sign.html'
class 用户名输入框:
locator = By.ID, 'username'
class 密码输入框:
locator = By.ID, 'password'
class 登录按钮:
locator =
class 主页:
url = '/mgr'
downloaded_html = 'ai/webpages/main.html'
class 导航栏:
locator = By.CLASS_NAME, 'main-header'
class 用户信息:
locator = By.CLASS_NAME, 'user-menu'
class 退出登录按钮:
可见依赖 = "先点击上层用户信息"
locator =
class 左边菜单:
locator =
class 客户:
locator =
class 药品:
locator =
class 订单:
locator =
class 添加数据按钮:
locator =
class 客户管理:
url = '/mgr/#/customers'
downloaded_html = 'ai/webpages/customers.html'
class 添加数据:
可见依赖 = "先点击 添加数据按钮"
class 客户名输入框:
locator =
class 联系电话输入框:
locator =
class 地址输入框:
locator =
class 客户列表项:
locator =
class 名称:
locator =
class 联系电话:
locator =
class 地址:
locator =
class 删除按钮:
locator =
class 药品管理:
url = '/mgr/#/medicines'
downloaded_html = 'ai/webpages/medicines.html'
class 添加数据:
可见依赖 = "先点击 添加数据按钮"
class 名称输入框:
locator =
class 编号输入框:
locator =
class 描述输入框:
locator =
class 药品列表项:
locator =
class 名称:
locator =
class 编号:
locator =
class 描述:
locator =
class 删除按钮:
locator =
class 订单管理:
url = '/mgr/#/orders'
downloaded_html = 'ai/webpages/orders.html'
class 添加数据:
可见依赖 = "先点击 添加数据按钮"
class 订单名称输入框:
locator =
class 客户查找框:
locator =
class 客户选择框:
locator =
class 药品查找框:
locator =
class 药品选择框:
locator =
class 订单列表项:
locator = By.CSS_SELECTOR, '.search-result-item'
class 名称:
locator =
class 日期:
locator =
class 客户:
locator =
class 药品:
locator =
class 删除按钮:
locator =
然后运行给AI 命令:
@pageinfo.py 是 配置 自动化测试 界面元素 定位信息的 配置文件。
我从 要自动化测试的网站 下载了一些网页HTML, 保存在 @ai/webpages 目录下面。
根据@ai/webpages 目录下 页面的信息,完成 @pageinfo.py里面 未填值的locator,尽量使用 CSS 选择器定位。
然后,最好 人工验证一下 AI填写的对不对。
验证方法:浏览器开发者工具栏,搜索框里面输入表达式。
我们可以发现,AI可能会有一些错误,详见视频详解
✅ 最终我们修改配置文件,变成这样:
from selenium.webdriver.common.by import By
urlprefix = 'http://127.0.0.1'
class 登录页面:
url = '/mgr/sign.html'
downloaded_html = 'ai/webpages/sign.html'
class 用户名输入框:
locator = By.ID, 'username'
class 密码输入框:
locator = By.ID, 'password'
class 登录按钮:
locator = By.CSS_SELECTOR, 'button.btn-primary'
class 主页:
url = '/mgr'
downloaded_html = 'ai/webpages/main.html'
class 导航栏:
locator = By.CLASS_NAME, 'main-header'
class 用户信息:
locator = By.CLASS_NAME, 'user-menu'
class 退出登录按钮:
可见依赖 = "先点击上层用户信息"
locator = By.CSS_SELECTOR, 'div.pull-right a.btn-default'
class 左边菜单:
locator = By.CSS_SELECTOR, 'aside.main-sidebar'
class 客户:
locator = By.CSS_SELECTOR, 'a[href="#/customers"]'
class 药品:
locator = By.CSS_SELECTOR, 'a[href="#/medicines"]'
class 订单:
locator = By.CSS_SELECTOR, 'a[href="#/orders"]'
# 点击 添加数据按钮 后,才能显示添加数据界面
class 添加数据按钮:
locator = By.CSS_SELECTOR, 'button.btn-green.btn-outlined.btn-md'
# 点击 确定提交 按钮 后,才能提交数据
class 确定提交按钮:
locator = By.XPATH, "//button[contains(text(), '创建')]"
class 客户管理:
url = '/mgr/#/customers'
downloaded_html = 'ai/webpages/customers.html'
class 添加数据元素列表:
可见依赖 = "先点击 添加数据按钮"
locator = By.CSS_SELECTOR, '.add-one-area .form-control'
客户名输入框 = "列表元素[0]"
联系电话输入框 = "列表元素[1]"
地址输入框 = "列表列表[2]"
class 客户列表项:
locator = By.CSS_SELECTOR, '.search-result-item'
class 名称:
locator = By.CSS_SELECTOR, '.search-result-item-field:nth-child(1) span:nth-child(2)'
class 联系电话:
locator = By.CSS_SELECTOR, '.search-result-item-field:nth-child(2) span:nth-child(2)'
class 地址:
locator = By.CSS_SELECTOR, '.search-result-item-field:nth-child(3) span:nth-child(2)'
class 删除按钮:
locator = By.XPATH, ".//label[contains(text(), '删除')]"
class 药品管理:
url = '/mgr/#/medicines'
downloaded_html = 'ai/webpages/medicines.html'
class 添加数据元素列表:
可见依赖 = "先点击 添加数据按钮"
locator = By.CSS_SELECTOR, '.add-one-area .form-control'
名称输入框 = "列表元素[0]"
编号输入框 = "列表元素[1]"
描述输入框 = "列表列表[2]"
class 药品列表项:
locator = By.CSS_SELECTOR, '.search-result-item'
class 名称:
locator = By.CSS_SELECTOR, '.search-result-item-field:nth-child(1) span:nth-child(2)'
class 编号:
locator = By.CSS_SELECTOR, '.search-result-item-field:nth-child(2) span:nth-child(2)'
class 描述:
locator = By.CSS_SELECTOR, '.search-result-item-field:nth-child(3) span:nth-child(2)'
class 删除按钮:
locator = By.XPATH, ".//label[contains(text(), '删除')]"
class 订单管理:
url = '/mgr/#/orders'
downloaded_html = 'ai/webpages/orders.html'
class 添加数据元素列表:
可见依赖 = "先点击 添加数据按钮"
locator = By.CSS_SELECTOR, '.add-one-area .form-control'
订单名称输入框 = "列表元素[0]"
客户查找输入框 = "列表元素[1]"
药品查找输入框 = "列表列表[2]"
class 客户选择框:
locator = By.CSS_SELECTOR, '.add-one-area .col-lg-8 > div:nth-child(2) select'
class 选项1: # 必须点击,才能选中
locator = By.CSS_SELECTOR, '.add-one-area .col-lg-8 > div:nth-child(2) select option'
class 药品选择框:
locator = By.CSS_SELECTOR, '.add-one-area .col-lg-8 > div:nth-child(3) select'
class 选项1: # 必须点击,才能选中
locator = By.CSS_SELECTOR, '.add-one-area .col-lg-8 > div:nth-child(3) select option'
class 药品数量输入框1:
locator = By.XPATH, "//div[contains(text(), '药品(数量):')]/div/input"
class 订单列表项:
locator = By.CSS_SELECTOR, '.search-result-item'
class 名称:
locator = By.CSS_SELECTOR, '.search-result-item-field:nth-child(1) span:nth-child(2)'
class 日期:
locator = By.CSS_SELECTOR, '.search-result-item-field:nth-child(2) span:nth-child(2)'
class 客户:
locator = By.CSS_SELECTOR, '.search-result-item-field:nth-child(3) span:nth-child(2)'
class 药品:
locator = By.CSS_SELECTOR, '.search-result-item-field:nth-child(4) p'
class 删除按钮:
locator = By.XPATH, ".//label[contains(text(), '删除')]"
您需要高效学习,找工作? 点击这里 白月黑羽实战班
点击查看学员就业情况
编写 项目上下文 文档
目前主流的 软件开发智能体 都支持 项目上下文(context)文档 ,通常以 Markdown
格式保存。
比如 Gemini Cli
的 GEMINI.md
, Qwen Code
的 QWEN.md
,Claude Code
的 CLAUDE.md
等等。
Info
据说后面会有标准,大家统一使用 AGENTS.md
这些文档 里面是 提供给AI 的项目信息。
对于自动化测试项目来说,通常包括 被测系统web网站各页面URL地址,被测系统接口文档,自动化开发的要求等等
比如,我们这个自动化项目 ,可以是这样
# 项目说明
这是一个自动化测试项目,用于测试 `bysms 系统`
开发语言使用 `Python`, 测试框架使用 `hytest` ,web自动化使用 `Selenium`
# 被测系统说明
被测系统 bysms 系统已经运行在本机 `http://127.0.0.1`
管理员账号 byhy, 密码: 88888888
登录网址是 `http://127.0.0.1/mgr/sign.html`, 页面html内容示例: `ai/webpages/login.html`
登录后,会进入主页 `http://127.0.0.1/mgr/#/`, 页面html内容示例: `ai/webpages/main.html`
主页左侧有菜单栏,点击其中的 客户,药品,订单,可以分别进入 客户管理,药品管理,订单管理页面
-客户管理页面
网址: `http://127.0.0.1/mgr/#/customers`
页面html内容示例: `ai/webpages/customers.html`
- 药品管理页面
网址: `http://127.0.0.1/mgr/#/medicines`
页面html内容示例: `ai/webpages/medicines.html`
- 订单管理页面
网址: `http://127.0.0.1/mgr/#/orders`
页面html内容示例: `ai/webpages/orders.html`
在开发自动化用例时,可以打开保存本地的示例页面文件,了解各个页面元素的位置和属性特征。
# 开发自动化注意点
- 尽量把常用操作封装成类和函数,放到 `lib` 目录下,方便调用。
- Web UI 自动化,使用 `Selenium` 库,已经安装到缺省环境中,不需要额外再安装。
- Web UI 自动化,定位选择元素的信息在 `pageinfo.py` 里面,要尽量使用。
- Web UI 自动化,如果需要查看页面内容,可以使用已经下载的页面html文件,都在 `ai/webpages` 目录下。
- 要尽量利用 已经创建的数据环境(根据 hytest框架 的初始化/清除规则)
- 开发用例自动化时,要注意保留代码文件中原来的用例描述
- 用例 初始化 和 执行步骤中 创建的数据,在清除操作中要删除
另外,如果你使用 hytest作为 自动化测试框架,需要把 我们使用的 hytest
的用法也加到 文档中。
hytest
内置了命令,只需执行 hytest -saic QWEN.md
就会自动把 hytest
的使用说明添加到上下文文档中。
如果你使用 pytest 框架,通常不需要指导AI如何使用,智能体使用的 LLM 已经在训练时 包括了如何使用pytest。
您需要高效学习,找工作? 点击这里 白月黑羽实战班
点击查看学员就业情况
规划用例的数据环境层级
有测开经验的开发者都知道 自动化测试中 数据环境 的重要性。
目前的情况下,不建议 让AI自己帮我们直接根据用例,规划数据环境
建议我们自己来规划。
你要先花一些时间,分析测试用例,得到有哪些数据环境,比如
然后,思考如何构建目录结构, 比如
然后,需要修改 AI上下文,加入数据环境的描述,好让AI根据上下文,生成数据环境的初始化清除代码。
比如
# 用例数据环境说明
hytest框架 通过 目录下的 `__st__.py` 构建该目录下 用例的 数据环境。
本项目 测试用例 有如下 数据环境:
## env-打开浏览器
该数据环境通过selenium打开一个Edge浏览器,不访问任何页面
控制浏览器的Selenium Web Driver 对象保存在 `GSTORE.driver` 中
### env-管理员打开登录页面
该数据环境在 `env-打开浏览器` 环境的基础上,使用 `GSTORE.driver` 打开登录页面
### env-管理员已登录
该数据环境在 `env-打开浏览器` 环境的基础上,使用 `GSTORE.driver` 完成管理员登录
#### env-1客户-1药品-1订单
该数据环境在 `env-管理员已登录` 环境的基础上。
该数据环境里面有 :一个客户,一个药品,一个订单
客户名称为 `南京市中医院` ,联系电话为 `02552270001`, 地址为 `秦淮区大明路157号`
药品名称为 `硫糖铝片` ,编号为 `stlp3455667` ,描述为 `用于慢性胃炎及缓解胃酸过多引起的胃痛、胃灼热感(烧心)、反酸。`
订单名称为 `南京中医院-硫糖铝片`,客户为 `南京市中医院`,药品为 `硫糖铝片` ,数量为 `5000`
#### env-5客户-5药品-5订单
该数据环境在 `env-管理员已登录` 环境的基础上。
该数据环境里面有 :5个客户,5个药品,5个订单
客户名称为 :
`南京市中医院-1` ,联系电话为 `02552270001`, 地址为 `秦淮区大明路157号`
`南京市中医院-2` ,联系电话为 `02552270002`, 地址为 `秦淮区大明路157号`
依次类推: `南京市中医院-3` , `南京市中医院-4` , `南京市中医院-5`
药品名称为:
`硫糖铝片-1` ,编号为 `stlp3455661` ,描述为 `用于慢性胃炎及缓解胃酸过多引起的胃痛`
`硫糖铝片-2` ,编号为 `stlp3455662` ,描述为 `用于慢性胃炎及缓解胃酸过多引起的胃痛`
依次类推: `硫糖铝片-3` , `硫糖铝片-4` , `硫糖铝片-5`
订单名称为:
`南京中医院-硫糖铝片-1` ,客户为 `南京市中医院-1`,药品为 `硫糖铝片-1` ,数量为 `5000`
`南京中医院-硫糖铝片-2` ,客户为 `南京市中医院-2`,药品为 `硫糖铝片-2` ,数量为 `5000`
依次类推: `南京中医院-硫糖铝片-3` , `南京中医院-硫糖铝片-4` , `南京中医院-硫糖铝片-5`
然后执行下面的AI指令
递归遍历 @cases 目录下 名字以 `env-` 开头的子目录。这些目录名就是数据环境的名称。
要求:对这些子目录,创建 hytest 目录初始化文件 `__st__.py`, 并在其中编写相应的 hytest 初始化清除代码。
注意:
Selenium web界面 创建数据 和 删除数据 的库函数,请放在 `lib/webui.py` 文件中
要优先使用`pageinfo.py` 里面 的 Selenium 定位选择元素的信息
AI产生的代码,我们要 review 和 测试,如果有问题 需要自己修改,或者让AI 帮你修改。
我测试修改过的代码,可以 点击这里下载
用例分批,借助AI实现
前5个登录用例
不要一下子把用例文档中所有的用例都喂给AI,一起实现,也不需要一个个用例的喂,而是分批次。
根据功能分批,比如,登录功能的前5个,都是登录错误的情况,适合作为数据驱动,一起喂给AI。
怎么喂呢?
不是对AI说: 请读取excel中哪个哪个用例,去实现
我推荐把原来的用例,以代码注释的方式,直接放到要自动化的代码文件中,然后通过AI生成代码。
因为这样,这些用例需要放的什么样的数据环境目录下可以自己决定,而不是让AI决定,减少错误率。
这里我们应该在 cases\env-打开浏览器
目录下,创建一个测试用例文件 登录测试.py
,执行登录相关的用例。
另外 不要把 原始的用例描述 直接扔给AI 产生自动化代码。原始的用例是给人看的, 里面缺乏一些方便AI理解具体的信息。
要修改测试用例,使其尽量能够让AI理解。
具体参考视频讲解的说明。
用例的描述示例如下:
"""
## 用例 UI-LOGIN-0001
### 测试重点
不输入账号,只输入密码登录
### 测试步骤
1. 不输入管理员账号
输入密码 88888888
2. 点击 登录
### 预期结果
2. 弹出提示 信息为:`请输入用户名`
## 用例 UI-LOGIN-0002
### 测试重点
不输入密码,只输入账号登录
### 测试步骤
1. 输入管理员账号 byhy
不输入密码
2. 点击 登录
### 预期结果
2. 弹出提示 信息为:`请输入密码`
## 用例 UI-LOGIN-0003
### 测试重点
错误的账号登录
### 测试步骤
1. 输入不存在的管理员账号 byh
和正确的密码88888888
2. 点击 登录
### 预期结果
2. 弹出提示 信息为:`登录失败 : 用户名或者密码错误`
## 用例 UI-LOGIN-0004
### 测试重点
密码少1个字符
### 测试步骤
1. 输入正确的管理员账号
错误的密码8888888
2. 点击 登录
### 预期结果
2. 弹出提示 信息为:`登录失败 : 用户名或者密码错误`
## 用例 UI-LOGIN-0005
### 测试重点
密码多1个字符
### 测试步骤
1. 输入正确的管理员账号
错误的密码888888888
2. 点击 登录
### 预期结果
2. 弹出提示 信息为:`登录失败 : 用户名或者密码错误`
"""
然后,执行下面的AI指令
第6个登录用例
用例的描述示例如下:
## 用例 UI-LOGIN-0006
### 测试重点
正确登录
### 测试步骤
1. 输入正确的管理员账号 byhy
正确的密码888888888
2. 点击 登录
3. 检查左侧菜单
### 预期结果
2. 登录成功,进入管理员操作界面,界面左上角有 白月黑羽 LOGO
LOGO 元素 对应css 选择器为 `span.logo-lg`, 元素text属性值为 `白月黑羽SMS`
3. 前三项菜单名称分别为:客户,药品,订单
然后,执行下面的AI指令
管理员操作 用例
用例的描述,见视频讲解
然后,执行下面的AI指令
AI产生的代码,我们要 review 和 测试,如果有问题 需要自己修改,或者让AI 帮你修改。
我测试修改过的代码,可以 点击这里下载
您需要高效学习,找工作? 点击这里 白月黑羽实战班
点击查看学员就业情况
开发过程 - 接口测试
实战班学员内部锻炼内容。
总结
从这个过程大家可以看出 我在使用AI开发代码的时候, 不是一股脑都丢给AI,让它自由发挥,那样会进入一个不可控的状态。
而是 自己建立一个自动化整体骨架,让AI实现血肉。
并且AI产生的代码,都要人工检查,验证 。
这样开发出来,我们心里才有数,才能放心。