测试10:接口自动化测试--概念篇(Python)
1.接口测试
1.1 接口的概念

系统对外的接口,也就是前端(web页面/APP)及外部系统(第三方)与后端进行数据交互的桥梁。
接下来我们围绕 HTTP API 这类典型的系统对外的接口展开具体介绍。
1.2 接口的组成
接口包含URL、请求方法(GET/POST)、请求头(header)、请求参数、返回值等。


header存放校验信息(如cookie、token),用于权限校验;服务器先校验header,通过后才接受请求地址和入参并返回出参。
参考JAVA EE初阶 8:网络原理 - HTTP_HTTPS 1.4(3)-1.6
接口文档应该包含:接口说明、调用URL、请求方法(GET/POST)、请求参数、参数类型、请求参数说明、返回参数说明。
1.3 接口测试
绕过前端页面,直接针对系统对外的接口进行测试,其核心在于验证后端逻辑、安全性以及数据处理能力。
测试重点包括:检查数据的交换、传递与控制管理过程,以及系统间的逻辑依赖关系;不仅判断接口“能否调通”,更要发现功能测试难以覆盖的后端漏洞。
接口测试不依赖UI界面,依据接口文档构造请求,输入不同的请求参数(入参),发送请求后校验返回结果(出参),从而判断系统的功能与安全性是否符合要求。
1.4 接口测试重要性

功能测试保"门面",接口测试保"地基",它能发现功能测试触达不到的深层漏洞,是用小成本堵住大风险的关键手段。
1.5 通过接口--设计测试用例
基于接口设计测试用例(粗粒度)+ 设计测试用例的具体方法(细化)
(1)通过性验证

(2)参数组合

(3)接口安全

(4)异常验证

1.6 通过业务逻辑--设计测试用例

自动化测试能有效减少人力消耗,并提高测试的质量和效率。
参考 测试6:自动化测试--概念篇(JAVA)1
2.接口自动化测试--流程
接口自动化测试通过对接口进行测试和模拟,来验证各组件之间的通信与数据交换,专注系统内部逻辑,比UI测试更高效、更易定位问题,能显著提升测试效率和准确性。
(1)需求分析
分析请求:明确接口的URL、请求方法(GET/POST)、请求头(header)、请求参数、和请求体。
分析响应:确定接口返回的数据格式、状态码以及可能的错误信息。

(2)挑选自动化接口
综合考虑项目时间、人员安排及接口复杂度,并优先选择核心业务、频繁使用和容易出错的接口。

以在线教育平台为例,假设该平台包含以下接口:

原因如下

(3)设计自动化测试用例
参考1.接口测试--1.5
(4)搭建自动化测试环境
选择合适的编程语言与开发环境(如Python配合PyCharm、Java配合IntelliJ IDEA),并安装相应依赖库。
(5)设计自动化测试框架
选用pytest组织用例、requests发送请求、PyYAML实现数据驱动、json schema校验响应结构,并配合allure报告与logging日志,形成完整的测试闭环。
(6)编写代码
根据测试用例和框架编写自动化测试脚本
(7)指定执行顺序+执行用例
指定测试用例的执行顺序,使用 unittest 或 pytest 等测试框架执行测试用例。
(8)生成+分析测试报告
测试完成后,使用 HtmlTestRunner 或 Allure 生成原始测试数据,并转为可视化 HTML 报告,便于直观分析。
在Python中新建项目和文件

3.requests模块
3.1 安装依赖库
pip install requests==2.31.0

可以用pip list命令查看当前项目中的包

以百度首页接口为例

3.2 介绍
requests 库是一个非常流行的 HTTP 客户端库,用于发送 HTTP 请求。
requests.get 方法用于向指定的 URL 发送一个 HTTP GET 请求,并返回一个 Response 对象,该对象包含了服务器返回的所有信息。
Response对象提供的属性/方法

使用r.headers查看响应头,并与浏览器中值对比。



3.3 常见请求方法

示例

也可以手动指定参数,顺序无要求。

3.4 添加请求信息
requests.get() 和 requests.post() 底层都是调用 requests.request() 方法,因此这三个方法在发送请求时,传参方式没有本质区别。

参数选择:params、json、data 的区别

Content-Type 在请求头中用于标识请求参数的格式,在响应头中用于标识响应数据的格式。



详细见JAVA EE初阶 8:网络原理 - HTTP_HTTPS 1.4 HTTP 协议格式 1.5 HTTP 请求(Request)
以即时通讯登录接口为例
http://122.51.160.88:8080/login.html

若有查询参数、请求头信息等其他参数,自行添加即可。
传递用户登录凭证方式一:通过请求头中的自定义 Header(如 user_token_header)

获取Header



传递用户登录凭证方式二:通过传统的 Session / Cookie 机制来管理用户的登录状态

获取Cookie


关系
requests 库:专注发送 HTTP 请求,实现接口调用与响应处理。
pytest框架:提供测试用例的组织、执行和管理(固件、参数化、断言、报告)。
用 requests 完成接口交互,用 pytest 管理大量测试用例,构建完整的接口自动化测试方案。
4.pytest自动化框架
支持Python语言的接口自动化框架

4.1 安装依赖库
pip install pytest==8.3.2
此处要求 python 版本在3.8及以上

也可以用pip list命令查看当前项目中的包

4.2 pytest介绍与使用

官方文档
未安装 pytest 时,需要手动编写 main 函数,在函数内显式调用测试方法,通过运行 main 来执行测试。

安装 pytest 后,PyCharm 会自动识别测试方法,方法左侧出现可运行图标,点击即可直接单独执行,无需再写 main 函数。

也可以在终端直接输入 pytest 命令,pytest 默认会递归遍历当前目录下的所有子目录,自动找到并执行所有符合命名规则的测试用例。

注:并非所有方法都能被直接运行,必须严格遵循 pytest 的用例命名规则,pytest 才能自动发现并执行。
4.3 用例命名--默认规则


由于 pytest 自动实例化测试类时会调用 _ _init_ _,这会掩盖真实测试逻辑并引入额外副作用,从而影响测试的准确性和独立性,所以在 pytest 测试类中不可以添加 _ _init_ _ 方法。

若测试类需要初始化操作,应根据复杂程度选择 setUp()、tearDown()、类属性或 fixture 函数等替代方案。
def _ _init_ _(self) 和 def init(self)区别

4.4 pytest命令参数
pytest 提供了丰富的命令行选项来控制测试的执行

pytest -v 增加输出的详细程度,如测试用例名称。

pytest -s 显示测试中的 print 语句

pytest -v -s 或 pytest -vs
即增加输出的详细程度,又显示测试中的 print 语句。

指定文件运行:pytest 文件名
指定包中文件运行:pytest 包名/文件名
指定测试用例运行:pytest 包名/文件名::类名::方法名
pytest test_03.py

也可以 pytest -sv test_03.py

将常用运行参数(如 -v、-s)统一写入 pytest 配置文件(如 pytest.ini 或 pyproject.toml),即可解决同时指定详细输出与特定文件时命令冗长,且需反复手动输入的问题。
4.5 pytest配置文件
在当前项目下创建pytest的配置文件pytest.ini

pytest.ini 通常置于项目根目录,用于自定义配置以覆盖 pytest 的默认行为;
配置完成后,直接运行 pytest 即可自动应用预设参数;若有需要仍可追加参数。
以下为常见的配置选项:

addopts--指定在命令行中默认包含的选项

testpaths--指定搜索测试的目录

python_files--指定发现测试模块时使用的文件匹配模式


python_classes--指定发现测试类时使用的类名前缀或模式


python_functions--指定发现测试函数和方法时使用的函数名前缀或模式


完整版:以详细输出模式,打印 tests 包下所有文件名以 AA 开头、类名以 A 开头且方法名以 a 开头的测试用例。

在 pytest 测试类中,无法使用_ _init_ _方法,如何进行数据的初始化?
4.6 前后置
数据的初始化应通过前后置操作在用例执行前准备测试数据、执行后清理环境等,以保证测试的可靠性。

fixture是解决复杂初始化(设置测试环境、准备数据等)和清理需求(运行结束后执行的善后工作)的首选方案,具体会在后续 fixture 章节详细讲解。



4.7 断言--assert
断言是一种用于检查程序状态是否符合预期的调试辅助工具,若条件为假则抛出 AssertionError 异常;在 pytest 中可以直接使用标准的 assert 语句来验证预期与实际值。


基本数据类型的断言

列表、元组、字典、集合的断言

函数的断言,先看正常情况

异常情况

接口返回值的断言
在免费API资源网站中,随便选一个
https://jsonplaceholder.typicode.com/
https://jsonplaceholder.typicode.com/
(1)校验完整的字段和值



r.json():将接口返回的 JSON 格式字符串,自动解析为 Python 字典 / 列表。
(2)校验关键的字段和值


此处校验第一组数据中的id是否为1

(3)校验接口返回的 HTML 格式内容

通过发送GET请求,使用in和assert断言,校验接口返回文本中是否包含指定的关键字段。

r.text:用于获取接口返回值解码后的字符串文本内容,可适配纯文本、JSON、HTML格式。
in是Python 成员运算符,可判断元素是否在字符串、列表等容器中,配合assert使用,条件不成立就会测试报错。
4.8 参数化@pytest.mark.parametrize
参数化设计通过定义参数和规则让设计更灵活可控;pytest 内置的 pytest.mark.parametrize 装饰器只需指定参数名和数据源,即可对测试参数进行参数化。
(1)在测试用例-方法-函数上使用参数化
对单个参数进行参数化;数据类型可以相同,也可以不同。


这样也行
#通过 @pytest.mark.parametrize 指定参数名和数据列表即可实现参数化;
#列表中每个元素对应一组参数,元素的数据类型可以相同也可以不同。
@pytest.mark.parametrize("login",[
{"username":"zhangsan", "password":"123456"},
{"username":"lisi", "password":"123456"}
])
#登录成功--测试用例
def test_login_success(self, login):
data = {
"username":login["username"],
"password":login["password"]
}
对多个参数进行参数化,@parametrize 装饰器定义了两个不同的 (t_input, expected) 元组,以便 test 函数依次使用它们运行三次。

eval() 是 Python 内置函数,可执行字符串表达式并返回结果,但绝不能用于不可信输入,否则可能执行恶意代码。
(2)在测试类上使用参数化
对单个类进行参数化后;每传入一组参数,该类中的所有测试函数,都会使用该组参数各自执行一遍。

对所有类进行参数化;需要为全局变量 pytestmark 赋值。

(3)自定义参数化数据源
将其他函数的返回值,用作测试函数的参数。

4.9 fixture--固定
pytest 的 fixture 是一种可参数化的首选机制,用于提供测试所需的资源与上下文,并能统一管理复杂的初始化操作(如设置测试环境、准备数据)和清理需求(如测试结束后释放资源等善后工作)。
(1)使用fixture标记方法
未标记

使用 @pytest.fixture 装饰器将特定函数标记为 fixture

未标记的普通方法只能在方法体内显式调用,被标记为 fixture 并可通过参数注入调用;当测试脚本中存在大量重复代码和公共数据对象时,使用 fixture 最为合适。
(2)fixture复用:自动登录前置操作
将登录操作封装为 fixture,这体现fixture的可复用性,多个测试函数可以共享同一个 fixture,且 pytest 会在每个测试执行前自动运行它。
从运行结果可以看到,在执行列表页和详情页测试之前都会自动先执行该 login 方法。

(3)fixture嵌套
pytest 最伟大的优势之一是其极其灵活的 fixture 系统,它允许测试依赖任意数量的 fixture,且 fixture 之间也能互相依赖,从而将复杂的测试需求简化为只需描述依赖关系的更简单、有组织的函数。



(4)请求多个fixture



也可以颜色相同就视为同一种水果
import pytest
class Fruit:
def __init__(self,name,color):
self.name = name
self.color = color
def __eq__(self, other):
#return self.name == other.name
return self.color == other.color
@pytest.fixture
def my_fruit():
return Fruit("apple","red")
@pytest.fixture
def your_fruit(my_fruit):
return [Fruit("pear","red"),
Fruit("banana","yellow")]
#测试你的水果中是否包含我的水果
def test(my_fruit, your_fruit):
assert my_fruit in your_fruit


前面介绍了 fixture 的初始化与常见用法,接下来讲解通过 yield fixture 实现测试结束后释放资源、删除数据等清理需求。
(5)yield fixture
目标:确保测试能够自我清理,避免干扰其他测试,同时防止大量测试数据膨胀系统。
解决方案:利用 pytest 中 fixture 提供的拆卸系统(前→中→后),为每个 fixture 定义具体的清理步骤。
核心概念:用 yield 替代 return
yield不会立即销毁返回的对象,也不结束清理流程 ;真正的销毁/清理被延迟到测试完成后执行。

执行流程

注:第三点中fixture清理代码的执行时机应取决于其作用域(function / module / session)
此处对于默认function作用域的yield fixture,pytest 在每个测试用例(即方法)执行完毕后,立即逆向执行 yield 之后的清理代码。
简单示例,什么都不返回。

复杂示例,返回数据。

打开文件句柄与关闭文件句柄(此处通过只读的模式)

import pytest
@pytest.fixture
def file_read():
print("打开读文件句柄")
fo = open("atest.txt","r",encoding="utf-8")
yield fo
print("关闭读文件句柄")
fo.close()
@pytest.fixture
def file_write():
print("打开写文件句柄")
fo = open("atest.txt","w",encoding="utf-8")
yield fo
print("关闭写文件句柄")
fo.close()
def test01(file_read,file_write):
file_write.write("哈哈哈哈")
file_write.close()
print(file_read.read())
def test02(file_read,file_write):
file_write.write("天天开心")
file_write.close()
print(file_read.read())
当测试用例位于 tests2 包中、atest.txt 在根目录下时,通常需用 ../atest.txt 指向上一级目录;但由于 pytest 默认以根目录作为工作目录,因此可以直接写 atest.txt 而无需相对路径。
encoding="utf-8" 用于指定以 UTF-8 字符编码方式打开文件,确保正确读写包含非英文字符的文本内容。
写入文件后必须先关闭或刷新文件句柄,否则写入内容滞留在缓冲区而未真正写入磁盘,无法被后续读取操作获取。
由于 yield fixture 默认在测试结束后才统一关闭文件句柄,因此测试中需在写入后手动调用 file_write.close(),以确保数据落盘并能被读取。

在写文件的 fixture 中使用 yield 会导致文件句柄被手动关闭和自动清理时重复关闭两次,因此应改用 return fo 来避免重复关闭。



(6)带参数的fixture
pytest.fixture 装饰器支持通过参数对 fixture 的行为进行精细控制


①scope--作用域
默认值为function,控制 fixture 的作用范围。

对于 function/class/module/session 作用域的 yield fixture,其 yield 之后的清理代码会在对应作用域(测试函数/测试类/模块/整个会话)结束的瞬间立即执行。
当存在多个 yield fixture 时,清理代码严格按照 fixture 声明或依赖顺序的反序(LIFO)运行,确保资源按正确顺序释放。
默认为function

设置为class
import pytest
@pytest.fixture(scope="class")
def operate():
print("前置-数据的初始化")
yield
print("后置-数据的清理")
class Test1:
def test01(self, operate):
print("第一个测试用例")
def test02(self, operate):
print("第二个测试用例")
class Test2:
def test01(self, operate):
print("第一个测试用例")
def test02(self, operate):
print("第二个测试用例")

设置为module module--单元,模块


一个设置为session


①conftest.py
利用 conftest.py 配合 @pytest.fixture 可以编写跨模块(.py文件)共享(同一套fixture函数)的目录级、且作用域可选前后置逻辑,提升代码复用与可维护性。 configuration--配置
conftest.py 文件名固定,可按目录层级创建,作用范围是其所在目录及所有子目录;conftest.py中的fixture会被pytest自动发现并加载,测试模块(.py文件)无需显式import导入。
注:conftest.py 中同样可以设置 function、class、module、session 等不同作用域的 fixture,这里以 module 和 session 为例进行说明。
对于这几种作用域,即使已经使用了 conftest.py ,你仍然可以根据需要在测试类内部再次定义同名的或新的 fixture(例@pytest.fixture(scope="...")),类内部的 fixture 会覆盖或补充 conftest.py 中的定义。
设置为module


设置为session


普通 fixture(autouse 默认为 False)必须作为测试函数参数显式传入才会执行;
②autouse--自动调用
若设置autouse=True,该fixture会在所有测试函数执行前自动调用,无需在测试函数中传入参数。
设置为module


设置为session


③params--参数化


@pytest.mark.parametrize 与 @pytest.fixture

④总结

官方文档:https://pyyaml.org/wiki/PyYAMLDocumentation
5.YAML
最初代表 “Yet Another Markup Language”,后改为 “YAML Ain’t Markup Language”,以强调它不是标记语言。
YAML 是一种简单的基于文本的人类可读的数据序列化语言,主要用于配置信息的存储与交换;采用类似 Python 的缩进来表示层级结构;非编程语言,不执行逻辑运算,专注于配置和数据的简洁表达。
功能类似 XML 和 JSON,但语法更简洁,去除了大量“噪音”符号(如引号、方括号、大括号)。

5.1 YAML文件介绍
YAML文件的后缀名是 .yaml 或 .yml (常用)
使用 .txt 等普通文本文件存储配置时,读取出的数据是字符串,需要手动解析和类型转换,无法直接还原为原始数据类型。


而YAML 支持多种数据类型(如字典、列表、数字等),读取后能自动还原为 Python 中的对应类型,从而简化配置的读写和管理。
5.2 写入和读取yaml文件
yaml 文件通常作为配置文件来使用,可以使用 yaml 库来读取和写入 YAML 文件。
安装yaml库
pip install PyYAML==6.0.1

创建yaml文件和python文件

编写代码
(1)打开文件,往yaml文件中写入数据。


(2)打开文件,读取yml文件中的数据。


(3)打开文件,清空yml文件中的数据。


直接 print(data) 仅适合在控制台快速查看,当需要将数据输出给其他系统(如 API 响应、消息队列、文件存储)时,必须使用 json.dumps() 将 Python 字典转换为标准 JSON 字符串(双引号),以保证格式通用、可被跨语言解析。
(4)YAML、Python 字典与 JSON 的对比与转换





5.3 JSON → YAML 转换规则
(1)简单标量、整数、浮点数、布尔值、字符串
冒号 空格 值,无需引号。

(2)列表 缩进 - 空格 值

(3)映射(对象/字典) 字典嵌套字典

(4)字典嵌套列表

接口校验需确保所有返回字段均存在且数据类型正确;字段名固定不变,仅字段值可能动态变化。
6.JSON Schema
JSON Schema 是一种用于定义和校验 JSON 数据结构的 Web 规范,能验证 JSON 是否符合预期。
工具可根据示例 JSON 自动生成对应的 JSON Schema,把数据必须满足的结构规范固定下来;再使用任意编程语言的验证器,传入规范与待校验数据,即可自动完成校验。

安装JSON Schema库
pip install jsonschema==4.23.0

6.1 validate
通过validate校验 validate--证实,确认



从内部模块jsonschema.validators导入不规范,可能因版本变化导致不兼容;应使用from jsonschema import validate。
6.2 关键字
JSON Schema通过type、requried、properties等关键词对 JSON 数据进行多维度校验,以确保其正确性与一致性。
type关键字指定了数据类型,用来验证JSON数据中每个属性的数据类型是否符合预期;在 JSON Schema 中,`integer` 仅接受整数,而 `number` 类型则接受整数和浮点数。

required关键字用来指定对象中必须存在的属性列表

此处required设为空数组,表示当前对象没有任何必填属性,所有属性都是可选的。
properties--属性
properties是验证关键字,它定义了一个对象,该对象的每个属性都用于约束待验证 JSON 数据中对应的同名键。
items/prefixItems关键字,定义数组(列表)每个元素的类型和约束。

简单示例
此处是data_json是Python字典,并非JSON文本,其结构在含义上完全合规;Python中的None在验证时会正确映射为JSON 中的null,因此验证可正常通过。
from jsonschema import validate
def test():
data_json = {
"name": "zhangsan",
"age": 20,
"height": 175.87,
"female": True,
"address": None,
"eat1": [1, "apple"],
"eat2": [1, "apple"],
"hobby": {
"1": "swim",
"2": "basketball"
}
}
json_schema = {
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer"},
"height": {"type": "number"},
"female": {"type": "boolean"},
"address": {"type": "null"},
"eat1": {
"type": "array",
"prefixItems": [
{"type": "integer"},
{"type": "string"},
]
},
"eat2": {
"type": "array",
"items": {
"type": ["integer", "string"],
}
},
"hobby": {
"type": "object",
"properties": {
"1": {"type": "string"},
"2": {"type": "string"}
}
}
}
}
print(validate(data_json, json_schema))


在线JSON数据生成JSON Schema在线JSON数据生成JSON Schema工具,输入JSON数据或者打开JSON数据文件,从数据中提取对应的JSON Schema。本工具支持JSON Schema Draft-07,Draft-06,Draft-04规范。
https://www.lddgo.net/string/generate-json-schema使用工具生成 JSON Schema 时,左边的 JSON Data 需将 Python 中的 True/False/None 对应改为 JSON 的 true/false/null,并规范整体格式;生成后必须进行二次校验,以防引入错误。
6.3 其它设定
(1)最大最小值
minimum 和 maximum 定义数值的闭区间范围,包含等于。
exclusiveMinimum 和 exclusiveMaximum 定义数值的开区间范围,即数值大于或小于边界值,不包含等于。

(2)字符串特殊校验
pattern 使用正则表达式来验证字符串是否符合特定的模式


以下是JSON Schema中常用于pattern字段校验的正则表达式,因其值为 JSON 字符串,写入时需将反斜线进行转义(如 \d 写成 \\d)。

(3)数组约束


(4)对象约束


哪个层级需要就放哪
(5)必需属性
前面的required关键字,用来指定对象中必须存在的属性列表。

(6)依赖关系
dependentRequired 可以定义属性之间的依赖关系;如果某个属性存在,则另一个属性必须存在(单向)

7.logging日志模块
logging是Python标准库中的模块,提供了灵活的日志记录功能;使开发者能方便地将日志输出到控制台、文件、网络等多种目标,且支持不同级别的日志记录,以满足各种场景下的需求。

日志级别金字塔:DEBUG < INFO < WARNING < ERROR < CRITICAL


7.1 全局logging
这段代码的作用是--演示/测试默认配置下的基础写法,并验证默认级别(WARNING)。




创建日志记录器
7.2 自定义logger并输出到控制台
在复杂应用中应通过logging.getLogger()获取 Logger 实例,可以传入_ _name_ _以当前模块名命名,也可传入自定义名称来创建日志记录器对象;并使用实例方法(如 logger.info())来区分日志来源。




创建文件处理器 handle--处理
7.3 自定义logger并输出到日志文件
创建一个 FileHandler 对象,指定日志文件名,这个文件处理器会自动创建文件,并将日志信息写入到指定的文件中。
将文件处理器添加到日志记录器中,让其使用处理器来处理日志信息。

创建日志格式器
7.4 设置日志格式
logging.Formatter 通过传入含 % 占位符的格式字符串,来定义日志的输出内容和排列方式;格式字符串中以 % 开头的特殊占位符会被自动替换为对应的日志内容。
通过handler.setFormatter(formatter)将格式器绑定到文件处理器上,该处理器便会按指定格式统一输出所有日志。


"%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d] - %(message)s"
常用占位符如下:

report--报告
8.测试报告--Allure
Allure Report 由一个框架适配器和 Allure 命令行工具组成,用于可视化测试运行结果。
8.1 配置环境
(1)安装allure-pytest包
pip install allure-pytest==2.13.5

(2)下载Windows版Allure报告

添加系统环境变量

确认结果,cmd和pycharm都要验证。


若pycharm控制台执行命令提示命题找不到,则需要修改pycharm中命令行环境。
C:\WINDOWS\system\cmd.exe

重启pycharm


8.2 生成测试结果
①运行自动化,并指定测试结果(原始数据)的放置路径;会自动创建文件夹。
pytest --alluredir=xxx

pytest --alluredir=allure_results

②也可以在pytest的配置文件pytest.ini中配置测试结果的放置路径
addopts = -vs --alluredir allure_results

也可以加上 清除上一次生成的测试结果
--clean-alluredir

直接通过pytest生成测试结果



8.3 生成+查看测试报告
(1)启动本地服务器在浏览器中查看测试报告


allure serve .\allure_results\



Ctrl+C退出
![]()
指定空闲端口号
allure serve --port 8989 .\allure_results\


再生成一次测试结果
pytest --alluredir=allure_results

清除上一次生成的测试结果
pytest --alluredir=allure_results --clean-alluredir


自动生成文件夹
(2)测试结果生成测试报告
allure generate [options] <allure_results> -o <reports>



allure generate .\allure_results\ -o allure_reports



若生成了新的测试结果,想生成新的测试报告就需要加 --clean;其会先清空输出目录。


(3)对比


./ 指的是你执行命令时所在的位置(终端当前路径),而非脚本文件本身的存放位置。
简单示例




更多推荐
所有评论(0)