当前位置: 首页 > news >正文

接口自动化 ——fixture allure

一.参数化实现数据驱动

上一篇介绍了参数化,这篇 说说用参数化实现数据驱动。在有很多测试用例的时候,可以将测试用例都存储在文件里,进行读写调用。本篇主要介绍 csv 文件和 json 文件。

1.读取 csv 文件数据

首先创建 csv 文件,将数据 放在csv文件中。然后读取csv 文件的内容,并将读取的 内容返回

import csv# 读取csv 函数
def get_csv_data():list1 = []# 输入存储csv 文件 的目录file = csv.reader(open(r"D:\python_project\API_Auto\API2\data\x_y.csv", encoding="utf-8"))# 输出 csv 文件对象,需要获取文件对象中的内容,使用for 循环进行遍历# print(file)for i in file:# print(i)list1.append(i)else:#  print(list1)return list1

 再在测试用例中进行调用上面的函数,得到返回的参数,作为参数 


import pytestfrom commons.tools import get_csv_data@pytest.mark.parametrize(["x", "y"], get_csv_data())
def test_001(x, y):print(f"x: {x}")print(f"y: {y}")assert x == y

 2.读取json文件数据 

思路还是一样,先 创建json文件,将数据放进去

再读取json文件中的数据,并将 读取后的数据作为返回值

# 读取json 数据
def get_json_data():# json 数据可以直接读取file = open(r"D:\python_project\API_Auto\API2\data\x_y.json", encoding="utf-8")content = file.read()print(content)  # 类型是字符串 “[[1,2],[1,3],[2,3],[5,10],[2,2]]”,有引号不能直接用,需要去掉引号:eval()l = eval(content)# print(l)# print(type(l))  # <class 'list'>return l

在 调用这个方法来得到返回值

# 读取data 目录下的x_y json数据格式的测试用例import pytestfrom commons.tools import get_json_data@pytest.mark.parametrize(["x", "y"], get_json_data())
def test_002(x, y):print(f"x: {x}")print(f"y: {y}")assert x == y

二.fixture

fixture 的主要作用是固定测试环境。在执行用例时,执行 用例之前,执行完用例之后的操作就可以用fixture

1.fixture 创建

定义一个函数,然后加上yield 关键字,再加上pytest 框架装饰器就成了fixture,下面的func,func1都是fixture,func比func1多了一个返回值666

@pytest.fixture()
def func():print("用例执行之前")yield 666print("用例执行之后")@pytest.fixture()
def func1():print("用例执行之前")yield print("用例执行之后")

2.fixture调用

fixture默认是不会自动调用的 ,需要在形参处调用fixture名

# 调用fixture
def test_001(func):print(f"获取fixture:{func}")assert 1 == 1def test_002():assert 1 == 2class TestAAA:# 调用fixturedef test_003(self, func):assert 1 == 1# 获取func 的返回值666print(f"获取fixture:{func}")def test_004(self):assert 1 == 2

输出结果为:

PS D:\python_project\API_Auto\API2> pytest  -k test_z1_fixture定义和使用.py
================================================================= test session starts =================================================================
platform win32 -- Python 3.10.6, pytest-8.3.5, pluggy-1.5.0 -- C:\Users\18481\AppData\Local\Programs\Python\Python310\python.exe
cachedir: .pytest_cache
rootdir: D:\python_project\API_Auto\API2
configfile: pytest.ini
plugins: allure-pytest-2.13.5, result-log-1.2.2
collecting ... [[1,2],[1,3],[2,3],[5,10],[2,2]
]
collected 27 items / 23 deselected / 4 selected                                                                                                        testcases/test_z1_fixture定义和使用.py::test_001 用例执行之前
获取fixture:666
PASSED用例执行之后testcases/test_z1_fixture定义和使用.py::test_002 FAILED
testcases/test_z1_fixture定义和使用.py::TestAAA::test_003 用例执行之前
获取fixture:666
PASSED用例执行之后testcases/test_z1_fixture定义和使用.py::TestAAA::test_004 FAILED====================================================================== FAILURES ======================================================================= 
______________________________________________________________________ test_002 _______________________________________________________________________ def test_002():
>       assert 1 == 2
E       assert 1 == 2testcases\test_z1_fixture定义和使用.py:26: AssertionError
----------------------------------------------------------------- Captured log setup ------------------------------------------------------------------ 
WARNING  pytest_result_log:plugin.py:122 ---------------Start: testcases/test_z1_fixture定义和使用.py::test_002---------------
---------------------------------------------------------------- Captured log teardown ---------------------------------------------------------------- 
WARNING  pytest_result_log:plugin.py:128 ----------------End: testcases/test_z1_fixture定义和使用.py::test_002----------------
__________________________________________________________________ TestAAA.test_004 ___________________________________________________________________ self = <testcases.test_z1_fixture定义和使用.TestAAA object at 0x000002AB6C7CA170>def test_004(self):
>       assert 1 == 2
E       assert 1 == 2testcases\test_z1_fixture定义和使用.py:35: AssertionError
----------------------------------------------------------------- Captured log setup ------------------------------------------------------------------ 
WARNING  pytest_result_log:plugin.py:122 ----------Start: testcases/test_z1_fixture定义和使用.py::TestAAA::test_004-----------
---------------------------------------------------------------- Captured log teardown ---------------------------------------------------------------- 
WARNING  pytest_result_log:plugin.py:128 -----------End: testcases/test_z1_fixture定义和使用.py::TestAAA::test_004------------
=============================================================== short test summary info =============================================================== 
FAILED testcases/test_z1_fixture定义和使用.py::test_002 - assert 1 == 2
FAILED testcases/test_z1_fixture定义和使用.py::TestAAA::test_004 - assert 1 == 2
===================================================== 2 failed, 2 passed, 23 deselected in 0.19s ======================================================

从结果 可以看到,只有test_001和 test_003调用了fixture.

fixture 默认不会自动调用,但是我们也可以通过参数来让他 自动调用 ,就不需要在往形参里传了。只需要将 对应的参数 autouse 的值修改为 True:

@pytest.fixture(autouse=True)
def func():print("用例执行之前")yield 666print("用例执行之后")
def test_001():assert 1 == 1def test_002():assert 1 == 2class TestAAA:def test_003(self):assert 1 == 1def test_004(self):assert 1 == 2

输出结果 为:

PS D:\python_project\API_Auto\API2> pytest  -k test_z1_fixture定义和使用.py
================================================================= test session starts =================================================================
platform win32 -- Python 3.10.6, pytest-8.3.5, pluggy-1.5.0 -- C:\Users\18481\AppData\Local\Programs\Python\Python310\python.exe
cachedir: .pytest_cache
rootdir: D:\python_project\API_Auto\API2
configfile: pytest.ini
plugins: allure-pytest-2.13.5, result-log-1.2.2
collecting ... [[1,2],[1,3],[2,3],[5,10],[2,2]
]
collected 27 items / 23 deselected / 4 selected                                                                                                        testcases/test_z1_fixture定义和使用.py::test_001 用例执行之前
PASSED用例执行之后testcases/test_z1_fixture定义和使用.py::test_002 用例执行之前
FAILED用例执行之后testcases/test_z1_fixture定义和使用.py::TestAAA::test_003 用例执行之前
PASSED用例执行之后testcases/test_z1_fixture定义和使用.py::TestAAA::test_004 用例执行之前
FAILED用例执行之后====================================================================== FAILURES ======================================================================= 
______________________________________________________________________ test_002 _______________________________________________________________________ def test_002():
>       assert 1 == 2
E       assert 1 == 2testcases\test_z1_fixture定义和使用.py:26: AssertionError
----------------------------------------------------------------- Captured log setup ------------------------------------------------------------------ 
WARNING  pytest_result_log:plugin.py:122 ---------------Start: testcases/test_z1_fixture定义和使用.py::test_002---------------
---------------------------------------------------------------- Captured log teardown ---------------------------------------------------------------- 
WARNING  pytest_result_log:plugin.py:128 ----------------End: testcases/test_z1_fixture定义和使用.py::test_002----------------
__________________________________________________________________ TestAAA.test_004 ___________________________________________________________________ self = <testcases.test_z1_fixture定义和使用.TestAAA object at 0x0000017278D0B760>def test_004(self):
>       assert 1 == 2
E       assert 1 == 2testcases\test_z1_fixture定义和使用.py:35: AssertionError
----------------------------------------------------------------- Captured log setup ------------------------------------------------------------------ 
WARNING  pytest_result_log:plugin.py:122 ----------Start: testcases/test_z1_fixture定义和使用.py::TestAAA::test_004-----------
---------------------------------------------------------------- Captured log teardown ---------------------------------------------------------------- 
WARNING  pytest_result_log:plugin.py:128 -----------End: testcases/test_z1_fixture定义和使用.py::TestAAA::test_004------------
=============================================================== short test summary info =============================================================== 
FAILED testcases/test_z1_fixture定义和使用.py::test_002 - assert 1 == 2
FAILED testcases/test_z1_fixture定义和使用.py::TestAAA::test_004 - assert 1 == 2
===================================================== 2 failed, 2 passed, 23 deselected in 0.22s ====================================================== 

可以看到,这次没有将fixture名放在形参处,所有的测试用例都调用了fixture

3.fixture作用域

fixture 支持五级作用域

  • function:函数,方法级别(默认)

像上面未设置作用域,就是默认的function级别,在每个函数执行前触发fixture前置,在每个函数执行后触发fixture后置。

  • class:类
    • 当类中第一个用例开始执行之前,会触发fixture前置
    • 当类中最后一个用例开始执行之后,会触发fixture后置
      import pytest@pytest.fixture(scope='class', autouse=True)
      def func():print("用例执行之前")yield 666print("用例执行之后")def test_001():# print(f"获取fixture:{func}")assert 1 == 1def test_002():assert 1 == 2class TestAAA:def test_003(self):assert 1 == 1# print(f"获取fixture:{func}")def test_004(self):assert 1 == 2
      

      执行结果为:

      PS D:\python_project\API_Auto\API2> pytest -k test_z2_fixture的作用域.py
      ================================================================= test session starts =================================================================
      platform win32 -- Python 3.10.6, pytest-8.3.5, pluggy-1.5.0 -- C:\Users\18481\AppData\Local\Programs\Python\Python310\python.exe
      cachedir: .pytest_cache
      rootdir: D:\python_project\API_Auto\API2
      configfile: pytest.ini
      plugins: allure-pytest-2.13.5, result-log-1.2.2
      collecting ... [[1,2],[1,3],[2,3],[5,10],[2,2]
      ]
      collected 27 items / 23 deselected / 4 selected                                                                                                        testcases/test_z2_fixture的作用域.py::test_001 用例执行之前
      PASSED用例执行之后testcases/test_z2_fixture的作用域.py::test_002 用例执行之前
      FAILED用例执行之后testcases/test_z2_fixture的作用域.py::TestAAA::test_003 用例执行之前
      PASSED
      testcases/test_z2_fixture的作用域.py::TestAAA::test_004 FAILED用例执行之后====================================================================== FAILURES =======================================================================
      ______________________________________________________________________ test_002 _______________________________________________________________________ def test_002():
      >       assert 1 == 2
      E       assert 1 == 2testcases\test_z2_fixture的作用域.py:25: AssertionError
      ----------------------------------------------------------------- Captured log setup ------------------------------------------------------------------ 
      WARNING  pytest_result_log:plugin.py:122 ---------------Start: testcases/test_z2_fixture的作用域.py::test_002----------------
      ---------------------------------------------------------------- Captured log teardown ---------------------------------------------------------------- 
      WARNING  pytest_result_log:plugin.py:128 ----------------End: testcases/test_z2_fixture的作用域.py::test_002-----------------
      __________________________________________________________________ TestAAA.test_004 ___________________________________________________________________ self = <testcases.test_z2_fixture的作用域.TestAAA object at 0x000001F49CA9A770>def test_004(self):
      >       assert 1 == 2
      E       assert 1 == 2testcases\test_z2_fixture的作用域.py:34: AssertionError
      ----------------------------------------------------------------- Captured log setup ------------------------------------------------------------------ 
      WARNING  pytest_result_log:plugin.py:122 -----------Start: testcases/test_z2_fixture的作用域.py::TestAAA::test_004-----------
      ---------------------------------------------------------------- Captured log teardown ---------------------------------------------------------------- 
      WARNING  pytest_result_log:plugin.py:128 ------------End: testcases/test_z2_fixture的作用域.py::TestAAA::test_004------------
      =============================================================== short test summary info =============================================================== 
      FAILED testcases/test_z2_fixture的作用域.py::test_002 - assert 1 == 2
      FAILED testcases/test_z2_fixture的作用域.py::TestAAA::test_004 - assert 1 == 2
      ===================================================== 2 failed, 2 passed, 23 deselected in 0.21s ====================================================== 

可以看到,对于TestAAA这个类,第一个用例开始执行之前,触发了fixture前置,在、最后一个用例执行之后,触发了fixture后置。而不是想之前每个函数都触发了fixture前置和后置

  • module:模块(文件)
    • 当模块中第一个用例开始执行之前,会触发fixture前置
    • 当模块中最后一个用例开始执行之后,会触发fixture后置
      
      import pytest@pytest.fixture(scope='module', autouse=True)
      def func():print("用例执行之前")yield 666print("用例执行之后")def test_001():# print(f"获取fixture:{func}")assert 1 == 1def test_002():assert 1 == 2class TestAAA:def test_003(self):assert 1 == 1# print(f"获取fixture:{func}")def test_004(self):assert 1 == 2
      

      执行结果为:

      PS D:\python_project\API_Auto\API2> pytest -k test_z2_fixture的作用域.py
      ================================================================= test session starts =================================================================
      platform win32 -- Python 3.10.6, pytest-8.3.5, pluggy-1.5.0 -- C:\Users\18481\AppData\Local\Programs\Python\Python310\python.exe
      cachedir: .pytest_cache
      rootdir: D:\python_project\API_Auto\API2
      configfile: pytest.ini
      plugins: allure-pytest-2.13.5, result-log-1.2.2
      collecting ... [[1,2],[1,3],[2,3],[5,10],[2,2]
      ]
      collected 27 items / 23 deselected / 4 selected                                                                                                        testcases/test_z2_fixture的作用域.py::test_001 用例执行之前
      PASSED
      testcases/test_z2_fixture的作用域.py::test_002 FAILED
      testcases/test_z2_fixture的作用域.py::TestAAA::test_003 PASSED
      testcases/test_z2_fixture的作用域.py::TestAAA::test_004 FAILED用例执行之后====================================================================== FAILURES ======================================================================= 
      ______________________________________________________________________ test_002 _______________________________________________________________________ def test_002():
      >       assert 1 == 2
      E       assert 1 == 2testcases\test_z2_fixture的作用域.py:25: AssertionError
      ----------------------------------------------------------------- Captured log setup ------------------------------------------------------------------ 
      WARNING  pytest_result_log:plugin.py:122 ---------------Start: testcases/test_z2_fixture的作用域.py::test_002----------------
      ---------------------------------------------------------------- Captured log teardown ---------------------------------------------------------------- 
      WARNING  pytest_result_log:plugin.py:128 ----------------End: testcases/test_z2_fixture的作用域.py::test_002-----------------
      __________________________________________________________________ TestAAA.test_004 ___________________________________________________________________ self = <testcases.test_z2_fixture的作用域.TestAAA object at 0x0000022EF0DEA8C0>def test_004(self):
      >       assert 1 == 2
      E       assert 1 == 2testcases\test_z2_fixture的作用域.py:34: AssertionError
      ----------------------------------------------------------------- Captured log setup ------------------------------------------------------------------ 
      WARNING  pytest_result_log:plugin.py:122 -----------Start: testcases/test_z2_fixture的作用域.py::TestAAA::test_004-----------
      ---------------------------------------------------------------- Captured log teardown ---------------------------------------------------------------- 
      WARNING  pytest_result_log:plugin.py:128 ------------End: testcases/test_z2_fixture的作用域.py::TestAAA::test_004------------
      =============================================================== short test summary info =============================================================== 
      FAILED testcases/test_z2_fixture的作用域.py::test_002 - assert 1 == 2
      FAILED testcases/test_z2_fixture的作用域.py::TestAAA::test_004 - assert 1 == 2
      ===================================================== 2 failed, 2 passed, 23 deselected in 0.21s ====================================================== 

      可以看到,在这个文件的第一个用例执行前触发了fixture前置,最后一个用例执行后触发了fixture后置

  • 以下2种级别只能在conftest.py文件生效(暂不介绍)
    • session:整个项目级别
    • package:包级别

4.fixture结合conftest.py文件使用

conftest.py文件在项目中专门用来管理fixture的文件 模块名字是固定不能修改,而且使用fixture不需要导包,会自动检测

首先创建conftest.py文件 ,在文件中创建fixture

然后 就可以在其他文件中调用fixture,并且不需要导包

# conftest.py 文件下的 fixture 可以 直接使用
def test_001(func1):print("测试用例001")def test_002(func2):print("测试用例002")def test_003(func3):print("测试用例003")

测试结果为 :

PS D:\python_project\API_Auto\API2> pytest -k test_z3_fixture结合conftestpy文件使用.py
================================================================= test session starts =================================================================
platform win32 -- Python 3.10.6, pytest-8.3.5, pluggy-1.5.0 -- C:\Users\18481\AppData\Local\Programs\Python\Python310\python.exe
cachedir: .pytest_cache
rootdir: D:\python_project\API_Auto\API2
configfile: pytest.ini
plugins: allure-pytest-2.13.5, result-log-1.2.2
collecting ... [[1,2],[1,3],[2,3],[5,10],[2,2]
]
collected 27 items / 24 deselected / 3 selected                                                                                                        testcases/test_z3_fixture结合conftestpy文件使用.py::test_001 这是前置条件1
测试用例001
PASSED这是后置条件1testcases/test_z3_fixture结合conftestpy文件使用.py::test_002 这是前置条件2
测试用例002
PASSED这是后置条件2testcases/test_z3_fixture结合conftestpy文件使用.py::test_003 这是前置条件3
测试用例003
PASSED这是后置条件3========================================================== 3 passed, 24 deselected in 0.13s =========================================================== 

三.日志记录Log

记录日志信息主要的作用是,更好的调试监控和排查测试过程中的问题

1.安装日志记录插件

pip install pytest-result-log

2.在pytest.ini配置文件中进行配置

log_file = ./logs/pytest.log
log_file_level = info
log_file_format = %(levelname)-8s %(asctime)s [%(name)s:%(lineno)s]  : %(message)s
log_file_date_format  = %Y-%m-%d %H:%M:%S; 记录用例执行结果
result_log_enable = 1; 记录用例分割线
result_log_separator = 1;分割线等级
result_log_level_separator  = warning;异常信息等级
result_log_level_verbose = info

然后执行 测试用例,就会在目录下生成 logs 目录,打开目录中的文件就可以 查看 log了

WARNING  2025-04-19 18:39:32 [pytest_result_log:122]  : ---------Start: testcases/test_z3_fixture结合conftestpy文件使用.py::test_001----------
INFO     2025-04-19 18:39:32 [pytest_result_log:190]  : test status is PASSED (testcases/test_z3_fixture结合conftestpy文件使用.py::test_001): 
WARNING  2025-04-19 18:39:32 [pytest_result_log:128]  : ----------End: testcases/test_z3_fixture结合conftestpy文件使用.py::test_001-----------
WARNING  2025-04-19 18:39:32 [pytest_result_log:122]  : ---------Start: testcases/test_z3_fixture结合conftestpy文件使用.py::test_002----------
INFO     2025-04-19 18:39:32 [pytest_result_log:190]  : test status is PASSED (testcases/test_z3_fixture结合conftestpy文件使用.py::test_002): 
WARNING  2025-04-19 18:39:32 [pytest_result_log:128]  : ----------End: testcases/test_z3_fixture结合conftestpy文件使用.py::test_002-----------
WARNING  2025-04-19 18:39:32 [pytest_result_log:122]  : ---------Start: testcases/test_z3_fixture结合conftestpy文件使用.py::test_003----------
INFO     2025-04-19 18:39:32 [pytest_result_log:190]  : test status is PASSED (testcases/test_z3_fixture结合conftestpy文件使用.py::test_003): 
WARNING  2025-04-19 18:39:32 [pytest_result_log:128]  : ----------End: testcases/test_z3_fixture结合conftestpy文件使用.py::test_003-----------

四.测试报告 allure

allure报告是一种非常流行的测试报告工具,可以结合多种测试框架集成使用,它提供了一个直观界面,帮助开发人员和测试人员分析测试结果

1.安装 allure

大家可以搜一搜哈,将这个的很多,这里就不多说了。安装完allure后,记得安装第三方 库

pip install allure-pytest

2.使用allure

需要在main.py模块中配置测试报告相关参数

import os
import pytest# 放测试用例的目录
pytest.main(['-sv', r'D:\python_project\API_Auto\API2\testcases', '--clean-alluredir', '--alluredir', './allure_result'])
# 清理旧的测试报告,将allure的测试结果分析生成HTML报告
os.system('allure generate ./allure_result -o ./report --clean')

配置好后右键运行右键main.py模块运行测试用例,然后 找到生成的report目录下的 index.html文件,选一个浏览器打开 就能看到allure报告了

点击 左下角可以切换语言

3.编辑allure

3.1.添加测试步骤

在测试用例上添加 @allure.step(),还可以与参数化之类一起使用

# a.添加测试步骤 @allure.step("test_0001")
@allure.step("test_0001")
@pytest.mark.parametrize(("x", "y"),[[1, 2],[3, 3],[2, 5]]
)
def test_001(x, y):print("AAABBBB")assert x == y

使用后结果为:

3.2.添加测试描述信息

能够给测试用例在报告中记录每一步执行信息

allure.attach()

# b.添加测试描述信息,给测试用例再报告中输出每一步的执行信息 allure.attach()
@allure.step("test_0002")
def test_002():allure.attach("这是002")allure.attach("开始 执行")print("AAABBBB")allure.attach("这是002")allure.attach("执行完毕 ")assert 1 == 1

结果为:

3.3添加严重程度 

bug有不同的严重等级:

  • blocker        阻塞缺陷(功能未实现,无法下一步)
  • critical       严重缺陷(功能点缺失)
  • normal         一般缺陷(边界情况,格式错误,默认bug等级
  • minor          次要缺陷(界面错误与ui需求不符)
  • trivial        轻微缺陷(必须项无提示,或者提示不规范)

可以在报告中 看到,如果没有特别说明,优先级默认都是normal 

@allure.severity(allure.severity_level.CRITICAL)
@allure.severity(allure.severity_level.CRITICAL)
def test_003():print("AAABBBB")assert 1 == 2

测试结果 为

可以看到,优先级变为了设置的 

相关文章:

接口自动化 ——fixture allure

一.参数化实现数据驱动 上一篇介绍了参数化&#xff0c;这篇 说说用参数化实现数据驱动。在有很多测试用例的时候&#xff0c;可以将测试用例都存储在文件里&#xff0c;进行读写调用。本篇主要介绍 csv 文件和 json 文件。 1.读取 csv 文件数据 首先创建 csv 文件&#xff…...

Datawhale AI春训营学习笔记

数据竞赛Baseline代码全解析&#xff1a;从数据加载到结果输出 一、环境配置与数据加载 1.1 依赖库导入 from netCDF4 import Dataset # 处理气象.nc格式数据 import numpy as np import pandas as pd from sklearn.model_selection import KFold from sklearn.metrics imp…...

关于学习STM32的C语言的知识

数据类型 关键字位数表示范围stdint关键字char8 -128 ~ 127 int8_tunsigned char8 0 ~ 255 uint8_tshort16 -32768 ~ 32767 int16_tunsigned short16 0 ~ 65535 uint16_tint32 -2147483648 ~ 2147483647 int32_t unsigned int32 0 ~ 429496729 uint32_t long32 -2147483648 ~…...

day28 学习笔记

文章目录 前言一、图像添加水印1.ROI操作2.添加水印 二、图像去除噪声1.均值滤波2.方框滤波3.高斯滤波4.中值滤波5.双边滤波6.总结 前言 通过今天的学习&#xff0c;我掌握了OpenCV中有关图像水印以及图像去除噪声的原理以及相关操作 一、图像添加水印 1.ROI操作 ROI操作即之…...

第34讲|遥感大模型对比实战:SAM vs. CLIP vs. iSAM

目录 🔍 一、遥感大模型简要介绍 1️⃣ SAM(Segment Anything Model) 2️⃣ CLIP(Contrastive Language–Image Pretraining) 3️⃣ iSAM(Improved SAM for Remote Sensing) 🧪 二、实战数据集与任务设计 🌟 任务设置: 🧠 三、代码实现片段(以 Python 为…...

EAGLE代码研读+模型复现

要对代码下手了&#xff0c;加油(ง •_•)ง 作者在他们自己的设备上展现了推理的评估结果&#xff0c;受第三方评估认证&#xff0c;EAGLE为目前最快的投机方法&#xff08;虽然加速度是评估投机解码方法的主要指标&#xff0c;但其他点也值得关注。比如PLD和Lookahead无需额…...

多线程使用——线程安全、线程同步

一、线程安全 &#xff08;一&#xff09;什么是线程安全问题 多个线程&#xff0c;同时操作同一个共享资源的时候&#xff0c;可能会出现业务安全的问题。 &#xff08;二&#xff09;用程序摹拟线程安全问题 二、线程同步 &#xff08;一&#xff09;同步思想概述 解决线…...

基于 Linux 环境的办公系统开发方案

基于 Linux 环境的办公系统开发方案 一、项目概述 1.1 项目背景 在当今数字化办公的时代&#xff0c;高效、稳定且功能丰富的办公系统对于企业和组织的日常运营至关重要。Linux 作为一种开源、稳定且高度可定制的操作系统&#xff0c;拥有庞大的开发者社区和丰富的软件资源&…...

mysql8.0.17以下驱动导致mybatis blob映射String乱码问题分析与解决

mysql8.0.17以下驱动导致blob映射String乱码问题分析与解决 一、问题复现二、问题深究三、解决方法方法1方法2 一、问题复现 1、docker安装mysql8.0&#xff0c;并创建测试数据库及测试数据表 CREATE DATABASE test DEFAULT CHARACTER SET utf8mb4; use test; CREATE TABLE t…...

Unity Nav Mesh导航系统的简单使用

标题 1.下载。2.面板位置3.object面板4.Area面板5.Bake面板6.Agent面板7.Nav Mesh Agent组件8.Nav Mesh Obstacle组件9.简单使用 1.下载。 unity2022以上版本要去packageManager中下载。 2.面板位置 3.object面板 Navigation Static&#xff1a;设置该物体是否被列入静态寻路…...

从零开始学A2A五:A2A 协议的安全性与多模态支持

A2A 协议的安全性与多模态支持 一、A2A 协议安全机制 1. 认证机制 A2A 协议采用多层次认证机制&#xff0c;确保智能体身份的真实性和通信的安全性。 基于 Agent Card 的身份认证&#xff1a; {"agent_id": "secure_agent_001","authentication&…...

PyTorch源码编译报错“fatal error: numpy/arrayobject.h: No such file or directory”

记录一下这个bug的fix过程 一开始以为是版本问题&#xff0c;尝试了几个不同版本都不可以&#xff0c;遂排除版本问题的可能 定位 首先 pip list 看到确实安装了这个库 接着 pip show 查看 numpy 库的安装路径 numpy/arrayobject.h 是 NumPy 的 C-API 头文件&#xff0c;其…...

[Java EE] Spring AOP 和 事务

目录 1. AOP 1.1 AOP 概念 1.2 AOP 核心概念 1.3 AOP 作用 2. AOP 详解 2.1 切点(Pointcut) 2.2 连接点(Join Point) 2.3 通知(Advice) 2.4 切面(Aspect) 2.5 通知类型 2.5.1 Around 环绕通知 2.5.2 Before 前置通知 2.5.3 After 后置通知 2.5.4 AfterReturning …...

2025年KBS SCI1区TOP:增强天鹰算法EBAO,深度解析+性能实测

目录 1.摘要2.天鹰算法AO原理3.改进策略4.结果展示5.参考文献6.代码获取 1.摘要 本文提出了增强二进制天鹰算法&#xff08;EBAO&#xff09;&#xff0c;针对无线传感器网络&#xff08;WSNs&#xff09;中的入侵检测系统&#xff08;IDSs&#xff09;。由于WSNs的特点是规模…...

适合IIS部署网页应用的编程语言

直接部署在 IIS 上的语言/技术 PHP 使用 FastCGI 模块直接集成安装 PHP Manager for IIS 可简化配置示例配置&#xff1a;在 web.config 中添加处理程序映射指向 php-cgi.exe Node.js 使用 iisnode 模块实现直接集成允许 Node.js 应用在 IIS 进程中运行支持进程管理、负载均衡…...

43.[前端开发-JavaScript高级]Day08-ES6-模板字符串-展开运算符-ES7~ES11

ES6~ES13新特性&#xff08;二&#xff09; 1 模板字符串的详解 字符串模板基本使用 标签模板字符串使用 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content…...

边生成边训练:构建合成数据驱动的在线训练系统设计实战

目录 边生成边训练&#xff1a;构建合成数据驱动的在线训练系统设计实战 一、系统目标与能力总览 ✅ 核心目标&#xff1a; 二、系统架构图&#xff08;推荐用于PPT展示&#xff09; 三、关键模块设计解析 ✅ 1. 合成数据生成器模块 ✅ 2. 质量评分器模块 ✅ 3. 在线训…...

AF3 create_alignment_db_sharded脚本main函数解读

AlphaFold3 create_alignment_db_sharded 脚本在源代码的scripts/alignment_db_scripts文件夹下。 该脚本中的 main 函数是整个对齐数据库生成脚本的核心入口,它 orchestrates(编排)了所有流程,从读取链目录到生成 .db 文件、构建索引、处理重复链、写入最终索引文件。 ma…...

52. Java 类和对象 - 什么是隐藏字段?

文章目录 52. Java 类和对象 - 什么是隐藏字段&#xff1f;&#x1f3af; 参数名称的作用与规则✅ 参数名称的命名规则 &#x1f3af; 什么是隐藏字段&#xff1f;&#x1f6a8; 问题定义✅ 解决办法&#xff1a;使用 this 关键字 &#x1f3af; 如何避免隐藏字段带来的困扰&am…...

IntelliJ IDEA右键快捷方式设置方法

IntelliJ IDEA右键快捷方式设置方法 在 IntelliJ IDEA 中设置右键快捷方式快速打开项目或文件&#xff08;Windows 系统&#xff09;&#xff0c;可以通过以下方法实现&#xff1a; 方法 1&#xff1a;通过注册表添加右键菜单&#xff08;推荐&#xff09; 打开注册表编辑器 按…...

深入剖析JavaScript内存泄漏:识别、定位与实战解决

在JavaScript的世界里&#xff0c;开发者通常不必像使用C那样手动管理内存的分配和释放&#xff0c;这得益于JavaScript引擎内置的垃圾回收&#xff08;Garbage Collection, GC&#xff09;机制。然而&#xff0c;这并不意味着我们可以完全忽视内存管理。“自动"不等于&qu…...

JVM原理与实战

一、Java虚拟机概述 java程序通过虚拟机实现了java代码的跨平台。 二、java虚拟机运行过程&#xff1a; 类编译器编译java代码为class文件&#xff0c; 类加载器将class文件加载到jvm&#xff0c; 程序计数器控制程序的执行&#xff0c; 虚拟机栈存放局部变量&#xff0c;方法名…...

MCP协议用到的Node.js 和 npm npx

一、Node.js 与 npm、npx 的介绍 Node.js&#xff1a;是一个基于 Chrome V8 引擎的 JavaScript 运行时环境&#xff0c;使您能够在服务器端运行 JavaScript 代码。它广泛用于构建服务器端应用程序和工具。 npm&#xff08;Node Package Manager&#xff09;&#xff1a;是 Nod…...

如何写 commit message?

前言 每次写 commit message 时&#xff0c;都会纠结用什么动词&#xff0c;格式应该什么样&#xff0c;所以决定总结一下。 查了一下&#xff0c;还是挺复杂的。因为只面向我个人日常使用&#xff0c;所以只进行一些简单的、适合我的总结。 正文 message 分为两部分&#…...

【厦门大学】DeepSeek大模型赋能高校教学和科研

DeepSeek赋能高校教学和科研 引言人工智能发展简史&#xff1a;从图灵测试到大模型时代大模型核心技术解析&#xff1a;构筑智能金字塔DeepSeek赋能高校&#xff1a;打造智能校园生态本地部署方案&#xff1a;安全、高效与定制化兼得教学革新&#xff1a;重塑知识传授与学习体验…...

【专刷】滑动窗口(一)

&#x1f4dd;前言说明&#xff1a; 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录&#xff0c;按专题划分每题主要记录&#xff1a;&#xff08;1&#xff09;本人解法 本人屎山代码&#xff1b;&#xff08;2&#xff09;优质解法 优质代码&#xff1b;&#xff…...

cJSON_Print 和 cJSON_PrintUnformatted的区别

cJSON_Print 和 cJSON_PrintUnformatted 是 cJSON 库中用于将 cJSON 对象转换为 JSON 字符串的两个函数&#xff0c;它们的区别主要在于输出的格式&#xff1a; 1. cJSON_Print 功能&#xff1a;将 cJSON 对象转换为格式化的 JSON 字符串。 特点&#xff1a; 输出的 JSON 字符…...

C 语 言 --- 指 针 4(习 题)

C 语 言 --- 指 针 4&#xff08;习 题&#xff09; sizeofstrlen整 型 数 组 - - - int a[ ]字 符 数 组 - - - char arr[ ]字 符 数 组 - - - char arr1[ ]字 符 串 常 量 指 针 - - - char arr[ ]二 维 数 组 - - - char arr[3][4]总结 &#x1f4bb;作 者 简 介&#xff1a…...

可发1区的超级创新思路(python 、MATLAB实现):基于区域注意力双通道MABMA的时间序列预测模型

首先声明,该模型为原创!原创!原创!且该思路还未有成果发表,感兴趣的小伙伴可以借鉴! 应用领域:功率预测、故障诊断、流量预测等领域! 目录 首先声明,该模型为原创!原创!原创!且该思路还未有成果发表,感兴趣的小伙伴可以借鉴! 应用领域:功率预测、故障诊断、流…...

可发1区的超级创新思路(python 、MATLAB实现):基于多尺度注意力TCN-KAN与小波变换的时间序列预测模型

一、数学模型与原理 1.1 小波变换多尺度分解 输入功率序列 x(t) 经小波变换分解为近似系数 Aj​ 与细节系数 Dj​: 1.2 多尺度TCN特征提取 对每个尺度子序列 {A3​,D3​,D2​,D1​} 采用独立TCN: 式中 ∗d​ 为扩张率 d=2l 的扩张卷积,Wd​ 为可学习参数。 1.3 多尺度注…...

PyTorch `flatten()` 和 `squeeze()` 区别

PyTorch flatten() 和 squeeze() 区别 在 PyTorch 里,flatten() 和 squeeze(0) 是两个不同的张量操作, 1. flatten() 方法 flatten() 方法用于把一个多维张量展开成一维张量。它会将张量里的所有元素按顺序排列成一个一维序列。 语法 torch.flatten(input, start_dim=...

使用Java基于Geotools的SLD文件编程式创建与磁盘生成实战

前言 在地理信息系统&#xff08;GIS&#xff09;领域&#xff0c;地图的可视化呈现至关重要&#xff0c;而样式定义语言&#xff08;SLD&#xff09;文件为地图元素的样式配置提供了强大的支持。SLD 能够精确地定义地图图层中各类要素&#xff08;如点、线、面、文本等&#x…...

opencv练习

1.创建一个 PyQt 应用程序&#xff0c;该应用程序能够&#xff1a; &#xff08;1&#xff09;使用 OpenCV 加载一张图像。 &#xff08;2&#xff09;在 PyQt 的窗口中显示这张图像。 &#xff08;3&#xff09;提供四个按钮&#xff08;QPushButton&#xff09;&#xff1…...

opencv--基础

opencv OpenCV是一个实现数字图像处理和计算机视觉通用算法的开源跨平台库。 链接 opencv中的cv是什么意思 在OpenCV中&#xff0c;"cv" 是 "Computer Vision"&#xff08;计算机视觉&#xff09; 的缩写。 opencv的实现语言 opencv的底层实现代码是使…...

基于模板匹配的信用卡号码识别系统

本项目实现了一个基于模板匹配的信用卡号码识别系统。 1. 导入库和设置参数 # -*- coding: utf-8 -*- # 导入工具包 from imutils import contours import numpy as np import argparse import cv2 import myutils import os# 设置参数 ap argparse.ArgumentParser() # 替换…...

Spring Boot中Excel处理完全指南

文章目录 1. Excel处理基础知识1.1 为什么需要在应用中处理Excel文件?1.2 Java中的Excel处理库介绍1.2.1 Apache POI1.2.2 EasyExcel1.2.3 JExcel1.2.4 Apache POI SXSSF1.3 Spring Boot中集成Excel处理2. 在Spring Boot中集成Excel处理库2.1 集成Apache POI2.1.1 添加依赖2.1…...

洛谷P1312 [NOIP 2011 提高组] Mayan 游戏

题目 #算法/进阶搜索 思路: 根据题意,我们可以知道,这题只能枚举,剪枝,因此,我们考虑如何枚举,剪枝. 首先,我们要定义下降函数down(),使得小木块右移时,能够下降到最低处,其次,我们还需要写出判断函数,判断矩阵内是否有小木块没被消除.另外,我们还需要消除函数,将矩阵内三个相连…...

c++ (异常)

1.异常的概念及使用 1.1异常的概念 异常处理机制允许程序中独立开发的部分能够在运行时就出现的问题进行通信并做出相应的处理&#xff0c; 异常使得我们能够将问题的检测与解决问题的过程分开&#xff0c;程序的一部分负责检测问题的出现&#xff0c;然后 解决问题的任务传…...

MySQL如何实现行行比较

概述 在MySQL中实现行行比较通常涉及比较同一表或不同表中不同行的数据。以下是几种常见的方法及示例&#xff1a; 1. 自连接&#xff08;Self-Join&#xff09; 通过将表与自身连接&#xff0c;比较不同行的数据。 场景示例&#xff1a;比较同一用户相邻订单的金额差异。 …...

springboot2.X创建maven多模块工程

因为需要&#xff0c;所以付出。 好长时间没有搭建新的框架了&#xff0c;最近在搭建微服务的多模块maven工程&#xff0c;现在就将创建的过程记录下来&#xff0c;方便自学的小伙伴找寻资料&#xff0c;少走弯路。好了下面直接开干。 开发工具 &#xff1a;idea 、springboo…...

八股文---Redis(1)

目录 1.Redis-使用场景 1.我看你做的项目中&#xff0c;都用到了redis&#xff0c;你在最近的项目中哪些场景使用了redis呢&#xff1f; 2.缓存三兄弟可以我看我另一个文章&#xff08;穿透&#xff0c;雪崩&#xff0c;击穿&#xff09; 3.redis做为缓存&#xff0c;mysql…...

QT聊天项目DAY06

1.从git上同步项目 编译测试&#xff0c;编译通过 Post请求测试 测试成功 2. email is 打印有问题&#xff0c;检查 解析结果是存储在jsonResult中的&#xff0c;修改 3. 客户端实现Post验证码请求 3.1 同步Qt客户端项目 检查QT版本&#xff0c;由于我在公司用的还是QT5.12.9…...

python(八)-数据类型转换

#数据类型转换 #转换为整型int #字符串str--》整数int #纯数字的字符串可以转换&#xff0c;否则会报错 s 2025 n int(s) print(type(s),type(n)) print(n)#浮点数float--》整数int s1 2.23 print(int(s1))#bool-->整数int s2,s3 True,False print(int(s2),int(s3))#转…...

JavaScript 变量命名规范

在编写JavaScript代码时&#xff0c;遵循良好的变量命名规范对于提高代码的可读性、可维护性和协作效率至关重要。一个清晰且一致的命名习惯不仅有助于开发者自己理解代码&#xff0c;也能让其他团队成员更容易上手和维护项目。本文将详细介绍JavaScript中常见的变量命名规则和…...

2025年渗透测试面试题总结-拷打题库05(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 2025年渗透测试面试题总结-拷打题库05 1. 病毒和蠕虫的区别 2. DNS欺骗&#xff08;DNS Spoofing&…...

【排队论】Probabilistic Forecasts of Bike-Sharing Systems for Journey Planning

Probabilistic Forecasts of Bike-Sharing Systems forJourney Planning abstract 我们研究了对共享单车系统&#xff08;BSS&#xff09;车站未来自行车可用性进行预测的问题。这是相关的&#xff0c;以便提出建议&#xff0c;保证用户能够进行旅行的概率足够高。为此&#x…...

Redis 的持久化机制(RDB, AOF)对微服务的数据一致性和恢复性有何影响?如何选择?

Redis 的持久化机制&#xff08;RDB 和 AOF&#xff09;对于保证 Redis 服务重启或崩溃后数据的恢复至关重要&#xff0c;这直接影响到依赖 Redis 的微服务的数据一致性和恢复能力。 1. RDB (Redis Database Backup) 机制: 在指定的时间间隔内&#xff0c;将 Redis 在内存中的…...

手撕LLM(四):从源码出发,探索大模型的预训练(pretrain)过程

前面我们基于Minimind项目介绍了大模型的推理、LoRa加载、Moe结构&#xff0c; 大家对大模型的整体结构应该有一个比较清晰的认识&#xff1b;从该篇博客开始&#xff0c;我们通过代码剖析大模型的训练过程&#xff0c;今天的主题是大模型的预训练。 那大模型的预训练是一个什么…...

Linux系统:进程终止的概念与相关接口函数(_exit,exit,atexit)

本节目标 理解进程终止的概念理解退出状态码的概念以及使用方法掌握_exit与exit函数的用法以及区别atexit函数注册终止时执行的函数相关宏 一、进程终止 进程终止&#xff08;Process Termination&#xff09;是指操作系统结束一个进程的执行&#xff0c;回收其占用的资源&a…...

keil5 µVision 升级为V5.40.0.0:增加了对STM32CubeMX作为全局生成器的支持,主要有哪些好处?

在Keil5 μVision V5.40.0.0版本中,增加了对STM32CubeMX作为全局生成器的支持,这一更新主要带来了以下三方面的提升: 开发流程整合STM32CubeMX原本就支持生成Keil项目代码,但新版本将这一集成升级为“全局生成器”级别,意味着STM32CubeMX生成的代码能直接成为Keil项目的核…...