带你撸一个开发自动化生成测试用例智能体

📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


Autogen 智能体简介

Autogen 是微软研究院开发的一个框架,它允许开发者通过定义和编排多个智能体来解决复杂问题。在测试场景中,Autogen 智能体可以扮演测试专家的角色,根据功能需求自动生成结构化的测试用例。​​​​​

Autogen 智能体的核心优势包括:
1.自动化测试用例生成
:根据需求描述自动生成全面的测试用例
2.多样化测试覆盖
:包括正常流程、边界情况和负面测试
3.结构化输出
:生成格式一致、易于理解的测试文档
4.可定制性
:根据不同的测试级别和优先级调整测试策略

测试用例的基本组成

在深入了解 Autogen 智能体之前,让我们先明确一个好的测试用例应包含的要素:

1.唯一标识符 每个测试用例都应有独特的 ID

2.测试目 测试用例要验证的功能点

3.前置条件 执行测试所需的环境和条件

4.测试步骤 详细的操作步骤

5.预期结果 测试成功的判定标准

6.测试数据. 测试中使用的输入数据

7.测试级别 单元测试、集成测试、系统测试或验收测试

8.优先级 高、中、低,指示测试执行的优先顺序

Autogen 智能体通过以下步骤生成测试用例:

1.需求分析
  智能体首先分析提供的需求描述,识别关键功能点和约束条件
2.测试场景识别
   根据需求识别可能的测试场景,包括正常流程和异常情况
3.测试用例构建
    为每个场景构建结构化的测试用例,包括步骤和预期结果
4.边界条件考虑
    特别关注边界值和极限情况
5.负面测试设计
 设计验证系统对错误输入的处理能力的测试
6.格式化输出
 以清晰、一致的格式输出测试用例

看下如何实现

依赖库

- autogen-agentchat:Autogen 智能体框架
- asyncio:处理异步操作

安装依赖包​​​​​​​

autogen_ext==0.4.8
autogen-agentchat==0.4.8
autogen-ext[openai]

实现代码

配置与语言模型的连接​​​​​​​

model_client1 = OpenAIChatCompletionClient(
    model="deepseek-ai/DeepSeek-V3",
    base_url="https://api.siliconflow.cn/v1",
    api_key="",
    model_info={
        "vision": False,
        "function_calling": True,
        "json_output": True,
        "family": "unknown",
    },
)

对应prompt​​​​​​​

system_message='''
你是一位专业的测试用例编写专家,能够根据需求精确生成高质量的测试用例。
重要规则:
1. 确保每个用例ID唯一,避免重复
2. 采用清晰的Markdown格式输出
3. 确保测试用例覆盖关键功能路径和边界条件
输出格式:
```markdown
## 测试用例集
### 用例ID:[模块]_[功能]_[序号]
**优先级**:P0/P1/P2/P3
**标题**:简明描述测试目的
**前置条件**:
- 条件1
- 条件2
**步骤**:
1. 第一步
2. 第二步
**预期结果**:
- 具体的预期结果
[重复上述模板直到达到指定的用例数量]
## 总结
- 测试覆盖度:描述测试覆盖的方面
- 建议:任何关于测试执行的建议
'''

直接利用augen 单个的智能体来实现

代码如下​​​​​​​

async def main():
    model_client = model_client1
    primary_agent = AssistantAgent(
        "primary",
        model_client=model_client,
        system_message=system_message,
    )
    #项目的终止条件
    text_termination = TextMentionTermination("APPROVE")
    team = RoundRobinGroupChat(
        [primary_agent],
        termination_condition=text_termination,
        max_turns=1
    )
    await Console(team.run_stream(task="APP登陆功能,需要输入用户名和密码,用户名是手机号,密码输入后可以隐藏,"
                                       "用户名和密码输入正确,点击跳转到首页,输入错误给予对应提示。"))
if __name__ == "__main__":
    asyncio.run(main())

输出结果:​​​​​​​

## 测试用例集
### 用例ID:Login_StandardLogin_001
**优先级**:P0
**标题**:正确输入用户名和密码后成功登录
**前置条件**:
- 用户已安装并打开APP
- 用户已注册并拥有有效的用户名和密码
**步骤**:
1. 在用户名输入框中输入有效的手机号
2. 在密码输入框中输入正确的密码,点击隐藏密码按钮
3. 点击登录按钮
**预期结果**:
- 页面跳转至首页
- 用户成功登录
### 用例ID:Login_StandardLogin_002
**优先级**:P1
**标题**:输入错误的用户名或密码后登录失败
**前置条件**:
- 用户已安装并打开APP
- 用户已注册并拥有有效的用户名和密码
**步骤**:
1. 在用户名输入框中输入错误的手机号或有效的手机号
2. 在密码输入框中输入错误的密码
3. 点击登录按钮
**预期结果**:
- 显示错误提示信息,如“用户名或密码错误”
- 页面停留在登录界面
### 用例ID:Login_StandardLogin_003
**优先级**:P2
**标题**:未输入用户名或密码时点击登录按钮
**前置条件**:
- 用户已安装并打开APP
**步骤**:
1. 在用户名或密码输入框中留空
2. 点击登录按钮
**预期结果**:
- 显示错误提示信息,如“请输入用户名和密码”
- 页面停留在登录界面
### 用例ID:Login_StandardLogin_004
**优先级**:P3
**标题**:密码隐藏功能测试
**前置条件**:
- 用户已安装并打开APP
**步骤**:
1. 在密码输入框中输入任意字符
2. 点击隐藏密码按钮
**预期结果**:
- 密码文本被隐藏,显示为点或其他符号
## 总结
- 测试覆盖度:覆盖了正常登录流程、错误输入处理、必填项验证及密码隐藏功能
- 建议:确保在不同设备和操作系统上测试以验证兼容性

但是这个输出来的用例没有那么多,除了用单个智能体,也可以利用多个智能体来实现。

配置两个模型的智能体,一个是DeepSeek 和一个是通义千问,一个产出,一个评估:​​​​​​​

model_client1 = OpenAIChatCompletionClient(
    model="deepseek-ai/DeepSeek-V3",
    base_url="https://api.siliconflow.cn/v1",
    api_key="sk-",
    model_info={
        "vision": False,
        "function_calling": True,
        "json_output": True,
        "family": "unknown",
    },
)
model_client2 = OpenAIChatCompletionClient(
    model="Qwen/QwQ-32B",
    base_url="https://api.siliconflow.cn/v1",
    api_key="sk-",
    model_info={
        "vision": False,
        "function_calling": True,
        "json_output": True,
        "family": "unknown",
    },
)

利用模型之间的相互评估来实现​​​​​​​

async  def mainTwo():
    model_client = model_client1
    model_clien = model_client2
    primary_agent = AssistantAgent(
        "primary",
        model_client=model_client,
        system_message=system_message,
    )
    critic_agent = AssistantAgent(
        "critic",
        model_client=model_clien,
        system_message="您是一名测试专家,你可以对给定的用例进行评审。对于缺少的用例进行补充,当您的反馈得到处理时,请回复“APPROVE”。",
    )
    # 项目的终止条件
    text_termination = TextMentionTermination("APPROVE")
    team = RoundRobinGroupChat(
        [primary_agent, critic_agent],
        termination_condition=text_termination,
        max_turns=10
    )
    await Console(team.run_stream(task="APP登陆功能,需要输入用户名和密码,用户名是手机号,密码输入后可以隐藏,"
                                       "用户名和密码输入正确,点击跳转到首页,输入错误给予对应提示。"))

看下最后的效果​​​​​​​

---------- primary ----------
## 测试用例集
### 用例ID:LOGIN_VALID_LOGIN_001
**优先级**:P0
**标题**:验证使用正确的用户名和密码能够成功登录并跳转到首页
**前置条件**:
- 用户已安装并打开APP
- 用户已注册并拥有有效的手机号和密码
**步骤**:
1. 在用户名输入框中输入有效的手机号
2. 在密码输入框中输入正确的密码
3. 点击“登录”按钮
**预期结果**:
- 用户成功登录,页面跳转至首页
### 用例ID:LOGIN_INVALID_PHONE_NUMBER_002
**优先级**:P1
**标题**:验证使用无效的手机号登录时,系统能正确提示错误信息
**前置条件**:
- 用户已安装并打开APP
**步骤**:
1. 在用户名输入框中输入无效的手机号(如不足11位数字)
2. 在密码输入框中输入任意密码
3. 点击“登录”按钮
**预期结果**:
- 系统显示错误提示:“请输入有效的手机号”
### 用例ID:LOGIN_INVALID_PASSWORD_003
**优先级**:P1
**标题**:验证使用错误的密码登录时,系统能正确提示错误信息
**前置条件**:
- 用户已安装并打开APP
- 用户已注册并拥有有效的手机号
**步骤**:
1. 在用户名输入框中输入有效的手机号
2. 在密码输入框中输入错误的密码
3. 点击“登录”按钮
**预期结果**:
- 系统显示错误提示:“用户名或密码错误”
### 用例ID:LOGIN_PASSWORD_VISIBILITY_004
**优先级**:P2
**标题**:验证密码输入框的隐藏/显示功能
**前置条件**:
- 用户已安装并打开APP
**步骤**:
1. 在密码输入框中输入一些字符
2. 点击密码框旁的“眼睛”图标
**预期结果**:
- 密码字符显示为明文
3. 再次点击“眼睛”图标
**预期结果**:
- 密码字符被隐藏,显示为星号或圆点
### 用例ID:LOGIN_EMPTY_FIELDS_005
**优先级**:P1
**标题**:验证未输入用户名或密码时,系统能正确提示错误信息
**前置条件**:
- 用户已安装并打开APP
**步骤**:
1. 在用户名输入框中保持空白
2. 在密码输入框中保持空白
3. 点击“登录”按钮
**预期结果**:
- 系统显示错误提示:“请输入用户名和密码”
## 总结
- 测试覆盖度:本测试用例集覆盖了用户登录功能的关键路径,包括成功的登录、无效手机号的处理、错误密码的处理、密码显示/隐藏功能以及空字段的处理。
- 建议:在实际执行测试前,确保测试环境与生产环境尽可能一致,以避免环境差异带来的问题。
---------- critic ----------
补充以下测试用例:
---
### 用例ID:LOGIN_BLANK_USERNAME_006  
**优先级**:P1  
**标题**:验证未输入用户名但密码有效时系统提示错误信息  
**前置条件**:  
- 用户已安装并打开APP  
**步骤**:  
1. 在用户名输入框中输入空白  
2. 在密码输入框中输入正确的密码(假设已知)  
3. 点击“登录”按钮  
**预期结果**:  
- 系统显示错误提示:“请输入有效的手机号”  
---
### 用例ID:LOGIN_BLANK_PASSWORD_007  
**优先级**:P1  
**标题**:验证未输入密码但用户名有效时系统提示错误信息  
**前置条件**:  
- 用户已安装并打开APP  
- 用户已注册并拥有有效的手机号和密码  
**步骤**:  
1. 在用户名输入框中输入有效的手机号  
2. 在密码输入框中输入空白  
3. 点击“登录”按钮  
**预期结果**:  
- 系统显示错误提示:“请输入密码”  
---
### 用例ID:LOGIN_PHONE_NUMBER_TOO_LONG_008  
**优先级**:P1  
**标题**:验证手机号超过11位时系统提示错误信息  
**前置条件**:  
- 用户已安装并打开APP  
**步骤**:  
1. 在用户名输入框中输入12位数字(如 123456789012)  
2. 在密码输入框中输入任意密码  
3. 点击“登录”按钮  
**预期结果**:  
- 系统显示错误提示:“请输入有效的手机号”  
---
### 用例ID:LOGIN_PHONE_WITH_NON_NUMERIC_CHAR_009  
**优先级**:P1  
**标题**:验证手机号包含非数字字符时系统提示错误信息  
**前置条件**:  
- 用户已安装并打开APP  
**步骤**:  
1. 在用户名输入框中输入包含字母的手机号(如 `1234a567890`)  
2. 在密码输入框中输入任意密码  
3. 点击“登录”按钮  
**预期结果**:  
- 系统显示错误提示:“请输入有效的手机号”  
---
### 用例ID:LOGIN_INVALID_PHONE_EXIST_WITH_CORRECT_PW_010  
**优先级**:P1  
**标题**:验证有效格式但未注册的手机号+正确密码时系统提示错误  
**前置条件**:  
- 用户已安装并打开APP  
**步骤**:  
1. 在用户名输入框输入一个格式正确但未注册的手机号(如 `18812345678`)  
2. 在密码输入框输入任意密码(即使正确)  
3. 点击“登录”按钮  
**预期结果**:  
- 系统显示错误提示:“用户名或密码错误”  
---
## 补充说明  
1. **空字段的细化覆盖**:用例006和007分别针对“用户名为空”或“密码为空”的情形,确保提示信息与需求一致(原用例005仅覆盖两者同时为空的情况)。  
2. **手机号格式多样无效场景**:补充手机号过长(008)、包含非数字字符(009)、有效格式但未注册(010)的测试,确保格式校验和业务逻辑校验分离。  
3. **密码输入后的即时反馈**:补充步骤3后系统提示是否立即触发,而非在提交后提示(需根据页面实际设计)。  

可以利用多个智能体,然后在智能体之间进行对话,可以通过这个优化,然后最后形成完整的用例即可。这里的只是输出,当然,如果是对接用例平台,还需要进行处理。后续我会出文章介绍Autogen,会分享这块如何处理,可以自己去官网看下对应的例子

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
在这里插入图片描述​​​​
在这里插入图片描述​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值