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)、请求参数、参数类型、请求参数说明、返回参数说明

https://developers.weixin.qq.com/minigame/dev/api-backend/open-api/access-token/auth.getAccessToken.html

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介绍与使用

官方文档

https://docs.pytest.org/en/stable/getting-started.htmlhttps://docs.pytest.org/en/stable/getting-started.html

未安装 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:用于获取接口返回值解码后的字符串文本内容,可适配纯文本JSONHTML格式。

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中的fixturepytest自动发现并加载,测试模块(.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)字典嵌套列表

JSON 转 YAML 工具 | 简化数据格式转换 - 嘉澍工具将JSON格式的数据转换为YAML格式,简化配置文件的编辑和管理。YAML语法简洁,广泛应用于配置管理和数据存储。https://www.jashtool.com/json/to-yaml

接口校验需确保所有返回字段均存在数据类型正确字段名固定不变,仅字段可能动态变化

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 使用正则表达式验证字符串是否符合特定的模式

正则表达式 – 简介 | 菜鸟教程正则表达式 - 简介 正则表达式(Regular Expression,简称 regex 或 regexp)是一种强大的文本处理工具,它使用一种特殊的字符串来描述、匹配一系列符合某个句法规则的字符串。 你可以把它想象成一个 超级通配符,普通的通配符(如 * 代表任意字符)功能有限,而正则表达式则能定义极其复杂和精确的文本模式,从简单的单词匹配到复杂的结构化数据提取,无所不能。 例如,您很可能使用 ? 和 * 通配符来查找硬盘上的文件。..https://www.runoob.com/regexp/regexp-intro.html

正则表达式在线测试、在线生成工具正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。本网站主要是让程序员可以在线测试正则表达式,并对正确的匹配项进行保存,随时可以查看。也可以生成不同编程语言在使用正则时的代码,方便刚入门的程序员使用。https://www.regexp.cn/Regex

以下是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报告

https://github.com/allure-framework/allure2/releases/download/2.30.0/allure-2.30.0.ziphttps://github.com/allure-framework/allure2/releases/download/2.30.0/allure-2.30.0.zip解压,复制bin路径

添加系统环境变量

确认结果,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)对比

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

简单示例

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐