跳转至

AI + 自动化测试

前言

在软件测试的 自动化开发过程中,怎么样使用好AI,最大限度地提升工作效率和工作产出呢?

很多人没有系统的概念,只能东一榔头西一棒。

这里通过一个示例项目的自动化测试,给大家分享我自己摸索之后,总结出来的流程办法。

使用这套方法, 让AI在我的管理下,开发自动化测试代码,尽量减少AI的不确定性,使得结合AI的开发的 自动化测试系统,发挥稳定。让我觉得比较放心。

大家可以在这基础上进行改进。


🗝️ 预备知识PythonSelenium, API 接口自动化hytest


注意:

目前AI 只是帮你提高效率的工具, 我们自身仍然要掌握好自动化开发技术。

不要幻想,我自己不会写代码,就用AI就能做好自动化测试。

错误做法

❌ 发个简单的命令,让AI自己完成一切。

比如

测试用例在 @testcase.xlsx  根据这个文档使用Python语言完成被测系统 bysms 的自动化测试

然后让AI产生的自动化用例跑一通。就直接提交测试结果

AI 目前不能 当作独立承担项目 的人 来用。

它是只你的智能助手。

目前的编程智能体 确实具备提高我们工作效率的能力, 非常有用。

我们要做的是,了解它的能力,要把它用好。

怎么用好?就是要做好对他的 指导/检验/改进


原则是:

  • 人工设定自动化流程步骤,每个步骤做什么

  • 让AI 帮我们完成每个步骤中适合它的任务,然后我们验证它的结果。

AI是在我们严格的监督把控下, 一步步帮我们实现目标。

我们非常的清楚它每一步做了什么

这样才能减少不确定性。 并且出现问题时,我们才知道,如何指导它改进,或者我们自己手动改进。 从而最终达到目标 。

软件开发智能体

功能简介

Claude Code,Codex, Gemini Cli, Qwen Code 编程智能体 大体是如何实现自动化开发的?

它们本质上是基于大语言模型(Large Language Models, LLMs)对代码的理解与生成能力,结合工具链、上下文感知和用户交互,从而进行自动化软件开发。

下面是一种 简化版的智能体架构图

当接收到一个用户指令,比如 @cases\管理员功能.py, 根据文件里面的用例说明,完成用例自动化代码

开发智能体 可能会这样操作

  • Agent核心 把 项目上下文+工具列表 + 如下内容,发送给 LLM。
用户原始指令是:xxx 。

请一步一步思考,接下来怎么做

请输出:
- 如果需要调用工具,请输出 JSON 格式
- 否则,直接给出纯文本描述。
  • 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后,

可以执行这个命令指定国内源:

npm config set registry https://registry.npmmirror.com

然后,

npm i -g @qwen-code/qwen-code


🟢 然后配置认证方式

有2种方式: qwen.ai 账户 认证 和 OpenAI 兼容 API 认证。

参考 https://qwenlm.github.io/qwen-code-docs/zh/cli/authentication/

推荐使用 qwen.ai 账户 认证,因为有免费配额如下

每分钟 60 次请求
每天 2,000 次请求
不涉及 token 使用量

警告

如果使用后者,比如阿里云百炼的 API Key 认证,可能会大量收费。


🟢 推荐和IDE集成,比如 vscode

好处和方法,参考:https://qwenlm.github.io/qwen-code-docs/zh/ide-integration/

实战项目

被测系统

我们用来演示自动化测试的系统,名为 白月SMS系统,是一个 简单的药品管理演示系统,把它当作你要测试的系统。

请大家点击这里,按照说明下载、安装、运行 白月SMS系统

测试用例

请点击这里,下载本次练习用的测试用例文档

请大家先认真看一遍测试用例文档,对接下来要实现哪些功能心中有数。 然后再进行后续的学习。

开发过程 - Web测试

Web UI 自动化准备

如果你要做 Web UI 自动化测试,需要准备如下2方面:

保存页面html内容,方便AI查看

AI 怎么能知道界面自动化的各种元素在哪里?自动化定位的特征是什么呢?

现在的编程智能体往往会自己生成代码, 去扫描界面,先了解界面。 但是根据我的经验, 这样会增加智能体循环步骤,增加错误可能。

推荐自己预先把需要自动化的页面html内容保存下来 。


如果使用浏览器的保存页面功能。 一些动态产生的界面元素不会被保存。

推荐可以直接使用下面的代码, 浏览到你要保存的界面,输入保存文件名,回车即可 。


先安装 beautifulsoup4 库,为了格式美化要下载的 HTML 内容。

pip install beautifulsoup4 lxml

然后运行下面的代码

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 CliGEMINI.mdQwen CodeQWEN.mdClaude CodeCLAUDE.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自己帮我们直接根据用例,规划数据环境

建议我们自己来规划。

你要先花一些时间,分析测试用例,得到有哪些数据环境,比如

初始数据环境
1客户-1药品-1订单
5客户-5药品-5订单
管理员打开登录页面
管理员已登录

然后,思考如何构建目录结构, 比如

cases
  └─env-打开浏览器
      ├─env-管理员已登录
      │  ├─env-1客户-1药品-1订单
      │  └─env-5客户-5药品-5订单
      └─env-管理员打开登录页面


然后,需要修改 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指令

请用 hytest 数据驱动的方式 实现 当前打开文档中的 5个登录测试用例

要求保留 用例的描述注释,并生成代码

第6个登录用例

用例的描述示例如下:

## 用例 UI-LOGIN-0006

### 测试重点

正确登录    

### 测试步骤    

1. 输入正确的管理员账号 byhy
正确的密码888888888

2. 点击 登录

3. 检查左侧菜单

### 预期结果

2. 登录成功进入管理员操作界面界面左上角有 白月黑羽 LOGO
LOGO 元素 对应css 选择器为 `span.logo-lg`, 元素text属性值为 `白月黑羽SMS`

3. 前三项菜单名称分别为客户药品订单


然后,执行下面的AI指令

根据 当前打开文档中 测试用例 UI-LOGIN-0006  的描述,实现自动化代码。

要求 保留 用例的描述。

管理员操作 用例

用例的描述,见视频讲解


然后,执行下面的AI指令

根据 当前打开文档中的用例描述,实现自动化代码。

要求 保留 用例的描述。

AI产生的代码,我们要 review 和 测试,如果有问题 需要自己修改,或者让AI 帮你修改。

我测试修改过的代码,可以 点击这里下载

开发过程 - 接口测试

实战班学员内部锻炼内容。

总结

从这个过程大家可以看出 我在使用AI开发代码的时候, 不是一股脑都丢给AI,让它自由发挥,那样会进入一个不可控的状态。

而是 自己建立一个自动化整体骨架,让AI实现血肉。

并且AI产生的代码,都要人工检查,验证 。

这样开发出来,我们心里才有数,才能放心。