目录
[参数化 pytest.mark.parametrize](#参数化 pytest.mark.parametrize)
一、测试用例
指令:请根据以下接⼝信息,帮我⽣成完整的测试⽤例列表。要求覆盖正常情况、边界情况、异常输
⼊、安全测试场景。
背景信息:注册接⼝请求参数包含⽤⼾名、密码和邮箱三个字段,⽤⼾名必填,⻓度3-16,密码必填,
⾄少8位,包含字⺟和数字,邮箱必填,符合邮箱格式
输⼊:接⼝信息如下:
POST /api/user/register
请求参数:
- username: string
- password: string
- email: string
输出:⽤表格形式展⽰,包括:⽤例编号、测试⽬标、输⼊参数、预期结果。
请根据以下接⼝信息,帮我⽣成完整的测试⽤例列表。要求覆盖正常情况、边界情况、异常输⼊、
安全测试场景。⽤表格形式展⽰,包括:⽤例编号、测试⽬标、输⼊参数、预期结果
接⼝信息如下:
POST /api/user/register
请求参数:
- username: string(必填,⻓度3-16)
- password: string(必填,⾄少8位,包含字⺟和数字)
- email: string(必填,符合邮箱格式)
二、脚本编写
请帮我使⽤Python和requests库,⽣成⼀个接⼝测试脚本,接⼝信息如下:
接⼝地址:POST https://api.example.com/user/register
请求参数:
- username: string(必填)
- password: string(必填)
- email: string(必填)
测试⽬标:验证正常注册⽤⼾时接⼝返回200,并返回JSON中包含字段"success": true。
请⽣成可执⾏脚本,并附带断⾔。
请根据以下接⼝信息⽣成覆盖全⾯的测试⽤例:
POST http://8.137.19.140:9090/user/login
请求参数form-data:
{
"username": "zhangsan",
"password": "123456"
}
⽣成要求:
⽤例需覆盖:正常场景、参数缺失、参数异常(类型/⻓度/格式)、边界值等
提示词:
请根据以下接口信息,帮我生成完整的测试用例列表。要求覆盖正常情况、边界情
况、异常输入、安全测试场景。按照测试的优先级将测试用例的数量控制在10个以
内,用表格形式展示,包括:用例编号、测试目标、输入参数、预期结果
POST http://8.137.19.140:9090/b1og/add
请求头:
(
“user_token_header”:"eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwidXNlck5hbWUiOi
J6aGFuZ3NhbiIsImV4cCI6MTcINDI4MDEOMnO. yDlkXmaUn6cF-8adtj2z9nrC1XR5FkfCYjp
elC6MWEc"
请求参数json:
{"title”:"1111”,"content”:“##在这里写下一篇博客”}
请求成功返回值:
"code”:"SUCCESS",
"errMsg”:"",
"data":true
请求失败:
"code”:"SUCCESS",
"errMsg”:"",
"data":false
除了以上返回值场景,其他场景下响应状态码均为401
1.生成测试用例
请根据以下接⼝信息,帮我⽣成完整的测试⽤例列表。要求覆盖正常情况、边界情况、异常输⼊、安全
测试场景。按照测试的优先级将测试⽤例的数量控制在10个以内,⽤表格形式展⽰,包括:⽤例编号、测
试⽬标、输⼊参数、预期结果
POST http://8.137.19.140:9090/blog/add
请求头:
{
"user_token_header":"eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwidXNlck5hbWUiOiJ6aGFuZ3Nhb
iIsImV4cCI6MTc1NDI4MDE0Mn0.yDlkXmaUn6cF-8adtj2z9nrC1XR5FkfCYjpelC6MWEc"
}
请求参数json:
{"title": "1111", "content": "##在这⾥写下⼀篇博客"}
请求成功返回值:
{
"code": "SUCCESS",
"errMsg": "",
"data": true
}
请求失败:
{
"code": "SUCCESS",
"errMsg": "",
"data": false
}
除了以上返回值场景,其他场景下响应状态码均为401
2.生成测试脚本
根据上⾯10个测试⽤例,创建test_add.py⽂件并在⽂件中⽣成测试脚本
3.手动优化
数据依赖
背景:登录接⼝返回的data有效数据为其他接⼝请求头user_token_header参数的有效值
要求:
1)修改涉及代码的user_token_header取值,避免出现失效的情况
2)不改变已有测试⽂件的结构,测试⽂件中只有测试类和测试⽅法
3)避免重复代码,推荐使⽤fixture
参数化 pytest.mark.parametrize
分析接口返回值,利用pytest中的参数化操作来减少用例数量
要求:
1)可以合并放在同一个用例中
2)不可以合并的用例不做处理,避免强行处理降低代码可读性
三、需求分析与用例设计
@博客系统接⼝⽂档 @博客系统接⼝测试⽤例模板
针对博客系统接⼝⽂档中涉及到的所有接⼝,分别设计接⼝测试⽤例
要求:
1)⽤例需覆盖:正常场景、参数缺失、参数异常(类型/⻓度/格式)、边界值等,按照测试的优先级
将每个接⼝对应测试⽤例的数量控制在10个以内
2)输出格式:完全按照博客系统接⼝测试⽤例模板⽂档中的格式来输出测试⽤例,保存在“接⼝测试⽤
例.md”⽂件中
四、搭建项目框架
@接⼝测试⽤例
根据接⼝测试⽤例.md⽂件内容,直接输出接⼝⾃动化⽬录结构即可,不需要创建项⽬代码或⽂件
技术栈要求:
1. 编程语⾔:Python
2. 测试框架:pytest
3. HTTP 库:requests
4. 数据驱动:YAML
5. 报告:Allure
6. 接⼝返回值断⾔:jsonschema
7. logging⽇志记录:⽇志分级输出,按天分割
其他设计要求:
1. 其他接⼝需要在请求头添加有效token,但是token值来⾃于登录接⼝的返回值data
2. 其他接⼝中有效的blogId取⾃列表⻚接⼝getList的有效返回值id
生成结果
project_root/
│
├── requirements.txt # 依赖列表
├── pytest.ini # pytest 全局配置
├── config/
│ ├── settings.py # 全局配置(BaseURL、日志级别…)
│ └── logging.conf # logging 配置文件(RotatingFileHandler 按天切分)
│
├── data/
│ ├── login.yaml # 登录接口测试数据
│ ├── getList.yaml
│ ├── addBlog.yaml
│ ├── getBlogDetail.yaml
│ ├── getUserInfo.yaml
│ └── getAuthorInfo.yaml
│
├── schema/ # jsonschema 断言文件
│ ├── login_schema.json
│ ├── blog_list_schema.json
│ ├── blog_detail_schema.json
│ └── user_schema.json
│
├── common/
│ ├── __init__.py
│ ├── logger.py # 日志封装(logger.info / logger.error)
│ ├── request_handler.py # requests 二次封装(自动写日志、异常处理)
│ └── yaml_reader.py # 加载 YAML 用例
│
├── fixture/
│ ├── __init__.py
│ └── conftest.py # pytest fixture:
│ # - login():返回有效 token
│ # - blog_id():返回 getList 第一条 id
│
├── api/
│ ├── __init__.py
│ ├── login_api.py # 登录接口封装
│ ├── blog_api.py # 博客相关接口封装
│ └── user_api.py # 用户相关接口封装
│
├── test_case/
│ ├── __init__.py
│ ├── test_login.py # 登录用例
│ ├── test_blog_list.py
│ ├── test_add_blog.py
│ ├── test_blog_detail.py
│ ├── test_user_info.py
│ └── test_author_info.py
│
├── report/ # 运行后自动生成
│ ├── html/ # allure html
│ └── allure_raw/ # allure json
│
└── run.py # 一键执行入口(pytest.main + allure generate)
脚本生成
@博客系统接⼝⽂档
@博客系统项⽬结构
@博客系统接⼝测试⽤例
结合博客系统相关⽂档,严格按照要求⽣成接⼝⾃动化测试