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

pytest简明教程

1. 简介

pytest是一款基于Python的测试框架。与Python自带的unittest相比,pytes语法更加简洁,断言更加强大,并且在自动测试以及插件生态上比unittest都要更加强大。

1.1. 安装pytest

pip install pytest

1.2. pytest命名规则

pytest默认会自动搜索当前目录中符合规则的源文件,并在源文件中搜索符合规则的类、函数来执行测试。

  1. 用例源文件:以test_开头或以_test结尾的.py源文件。

  2. 用例类:以Test开头的类名。

  3. 用例函数:以test开头的函数名。

2. 基本功能

2.1. 函数测试

2.1.1. 单函数测试

示例代码

    # coding=utf-8def test_addition():result = 2 + 2assert result == 4

执行测试

    J:\2023\9\Python>pytest=========================== test session starts ============================platform win32 -- Python 3.11.0, pytest-7.1.3, pluggy-1.0.0rootdir: J:\2023\9\Pythonplugins: anyio-3.6.2, asyncio-0.19.0, cov-4.0.0, excel-1.5.0, timeout-2.1.0asyncio: mode=Mode.STRICTcollected 1 itemtest_main.py .                                                        [100%]============================ 1 passed in 0.02s =============================

2.1.2. 多函数测试

示例代码

    # coding=utf-8# test_main.py def test_addition():result = 2 + 2assert result == 4def test_subtraction():result = 5 - 3assert result == 3

执行测试1

有一个测试用例错误,会指出详细的错误提示信息。

    J:\2023\9\Python>pytest=========================== test session starts ============================platform win32 -- Python 3.11.0, pytest-7.1.3, pluggy-1.0.0rootdir: J:\2023\9\Pythonplugins: anyio-3.6.2, asyncio-0.19.0, cov-4.0.0, excel-1.5.0, timeout-2.1.0asyncio: mode=Mode.STRICTcollected 2 itemstest_main.py .F                                                       [100%]================================= FAILURES =================================_____________________________ test_subtraction _____________________________def test_subtraction():result = 5 - 3>       assert result == 3E       assert 2 == 3test_main.py:9: AssertionError========================= short test summary info ==========================FAILED test_main.py::test_subtraction - assert 2 == 3======================= 1 failed, 1 passed in 0.46s ========================

执行测试2

测试指定文件,pytest默认会测试当前目录中所有满足要求的文件。如果只想测试其中1个,可以指定测试文件。

    J:\2023\9\Python>pytest test_main.py=========================== test session starts ============================platform win32 -- Python 3.11.0, pytest-7.1.3, pluggy-1.0.0rootdir: J:\2023\9\Pythonplugins: anyio-3.6.2, asyncio-0.19.0, cov-4.0.0, excel-1.5.0, timeout-2.1.0asyncio: mode=Mode.STRICTcollected 2 itemstest_main.py .F                                                       [100%]================================= FAILURES =================================_____________________________ test_subtraction _____________________________def test_subtraction():result = 5 - 3>       assert result == 3E       assert 2 == 3test_main.py:9: AssertionError========================= short test summary info ==========================FAILED test_main.py::test_subtraction - assert 2 == 3======================= 1 failed, 1 passed in 0.43s ========================

2.1.3. 测试指定函数

示例代码

    # coding=utf-8# test_main.py def test_addition():result = 2 + 2assert result == 4def test_subtraction():result = 5 - 3assert result == 3

执行测试

有时只想测试一个指定函数,可指定测试函数名。

    J:\2023\9\Python>pytest test_main.py::test_addition=========================== test session starts ============================platform win32 -- Python 3.11.0, pytest-7.1.3, pluggy-1.0.0rootdir: J:\2023\9\Pythonplugins: anyio-3.6.2, asyncio-0.19.0, cov-4.0.0, excel-1.5.0, timeout-2.1.0asyncio: mode=Mode.STRICTcollected 2 items / 1 deselected / 1 selectedtest_main.py .                                                        [100%]===================== 1 passed, 1 deselected in 0.02s ======================

2.2. 类测试

示例代码

    # coding=utf-8# test_main.pyclass TestExample:def test_addition(self):assert 2 + 2 == 4def test_subtraction(self):assert 5 - 3 == 2def test_multiplication(self):assert 3 * 4 == 12

执行测试

  1. 默认测试当前目录下所有满足要求的文件中的所有满足要求的测试类以及测试函数:pytest

  2. 指定测试文件:pytest test_main.py

  3. 指定指定文件的测试类: pytest test_main.py::TestExample

  4. 测试指定类:pytest -k “TestExample”

  5. 测试指定文件指定类的指定函数:pytest test_main.py::TestExample::test_subtraction

    J:\2023\9\Python>pytest test_main.py::TestExample::test_subtraction=========================== test session starts ============================platform win32 -- Python 3.11.0, pytest-7.1.3, pluggy-1.0.0rootdir: J:\2023\9\Pythonplugins: anyio-3.6.2, asyncio-0.19.0, cov-4.0.0, excel-1.5.0, timeout-2.1.0asyncio: mode=Mode.STRICTcollected 1 itemtest_main.py .                                                        [100%]============================ 1 passed in 0.03s =============================

2.3. 测试参数

2.3.1. 基本用法

在 pytest 中,有一些常用的测试参数可以帮助你更好地控制和定制测试的行为。以下是几个常用的 pytest 测试参数:

  1. -k EXPRESSION: 通过关键字表达式选择要运行的测试用例。例如,-k “test_func” 将只运行名称中包含 “test_func” 的测试函数。

  2. -s: 允许在测试运行期间输出打印语句和日志信息。这对于调试测试时非常有用。

  3. -v: 输出详细的测试结果信息,包括每个测试函数的名称和执行状态。

  4. -x: 遇到第一个测试失败或错误后立即停止测试运行。

  5. –maxfail=num: 在运行多个测试函数时,最多允许 num 个失败。超过这个限制后,测试将被中断。

  6. –tb=style: 设置回溯(traceback)显示风格。可以选择的选项包括 auto(默认)、short、line、no 和 native。

  7. –cov=PACKAGE: 测试代码覆盖率报告的命令行选项。可以指定要计算覆盖率的包或模块。

  8. -m: 通过在测试用例上添加装饰器 @pytest.mark. ,你可以给测试用例打上标记。然后,使用 -m 选项来指定标记名称,从而过滤特定的测试用例进行运行。

这只是 pytest 中一部分常用测试参数的示例。你可以通过运行 pytest --help 命令获取完整的测试参数列表,并查阅 pytest 官方文档以了解更多详细信息和用法。

示例代码

    # coding=utf-8# test_main.pyclass TestExample:def test_addition(self):assert 2 + 2 == 4def test_subtraction(self):assert 5 - 3 == 2def test_multiplication(self):assert 3 * 4 == 12

执行测试

    J:\2023\9\Python>pytest -v -s test_main.py::TestExample=========================== test session starts ============================platform win32 -- Python 3.11.0, pytest-7.1.3, pluggy-1.0.0 -- C:\Users\Michael\AppData\Local\Programs\Python\Python311\python.execachedir: .pytest_cacherootdir: J:\2023\9\Pythonplugins: anyio-3.6.2, asyncio-0.19.0, cov-4.0.0, excel-1.5.0, timeout-2.1.0asyncio: mode=Mode.STRICTcollected 3 itemstest_main.py::TestExample::test_addition PASSEDtest_main.py::TestExample::test_subtraction PASSEDtest_main.py::TestExample::test_multiplication PASSED============================ 3 passed in 0.03s =============================

2.3.2. 代码用法

在命令行中指定参数,更灵活,但是每次都输入,也麻烦。

pytest有提供pytest.main函数,将命令行参数全部移到此函数的参数列表中。

示例代码

    # coding=utf-8    # test_main.pyimport pytestclass TestExample:def test_addition(self):assert 2 + 2 == 4def test_subtraction(self):assert 5 - 3 == 2def test_multiplication(self):assert 3 * 4 == 12if __name__ == '__main__':pytest.main(['-s', '-v', 'test_main.py'])

执行代码

    J:\2023\9\Python>python test_main.py=========================== test session starts ============================platform win32 -- Python 3.11.0, pytest-7.1.3, pluggy-1.0.0 -- C:\Users\Michael\AppData\Local\Programs\Python\Python311\python.execachedir: .pytest_cacherootdir: J:\2023\9\Pythonplugins: anyio-3.6.2, asyncio-0.19.0, cov-4.0.0, excel-1.5.0, timeout-2.1.0asyncio: mode=Mode.STRICTcollected 3 itemstest_main.py::TestExample::test_addition PASSEDtest_main.py::TestExample::test_subtraction PASSEDtest_main.py::TestExample::test_multiplication PASSED============================ 3 passed in 0.03s =============================

3. 高级功能

3.1. 参数化

测试的时候经常会遇到单个函数测试不同的参数,如果每种参数单独写一个测试函数,会重复麻烦。有没有更简单的方法?参数化测试就是解决此问题的。

在 pytest 中,参数化(Parameterization)是一种强大的功能,允许你在单个测试函数中运行多次相同或类似的测试用例。这样可以减少重复的代码,并使测试更加简洁和可读。

示例代码

主要是通过给测试函数添加pytest.mark.parametrize的装饰器来实现

    # coding=utf-8    # test_main.pyimport pytest# 定义被测试的函数def add(a, b):return a + b# 使用参数化装饰器定义参数化测试@pytest.mark.parametrize("a, b, expected_result", [(1, 2, 3),  # 第一个测试用例,a=1, b=2, 预期结果为 3(5, 5, 10),  # 第二个测试用例,a=5, b=5, 预期结果为 10(-1, 0, -1)  # 第三个测试用例,a=-1, b=0, 预期结果为 -1])def test_add(a, b, expected_result):assert add(a, b) == expected_result

执行测试

    J:\2023\9\Python>pytest -v=========================== test session starts ============================platform win32 -- Python 3.11.0, pytest-7.1.3, pluggy-1.0.0 -- C:\Users\Michael\AppData\Local\Programs\Python\Python311\python.execachedir: .pytest_cacherootdir: J:\2023\9\Pythonplugins: anyio-3.6.2, asyncio-0.19.0, cov-4.0.0, excel-1.5.0, timeout-2.1.0asyncio: mode=Mode.STRICTcollected 3 itemstest_main.py::test_add[1-2-3] PASSED                                  [ 33%]test_main.py::test_add[5-5-10] PASSED                                 [ 66%]test_main.py::test_add[-1-0--1] PASSED                                [100%]============================ 3 passed in 0.03s =============================

@pytest.mark模块还有其他功能,如指定函数执行次数,指定测试条件,指定测试顺序、跳过指定测试等。

3.2. fixture

在软件测试中,“fixture” 一词通常被翻译为 “夹具”。 Fixture 是一个用于提供测试环境和共享资源的机制,在测试执行过程中设置和清理测试代码所需的条件。pytest.fixture也是一个装饰器,装饰器可以附加在指定函数上,来实现在函数调用前或调用后来执行额外的操作。

测试一般分4个阶段:Setup-Exercise-Verify-Teardown。(来自《xUnit Test Patterns 》)

fixture就负责实现Setup和Teardown部分。

3.2.1 用作输入

示例代码

在执行test_multiply时,调用fixture的形参input_values会优先执行,相当于setup。形参可以调用多个fixture参数,让参数输入测试更加灵活。

    import pytest# 定义一个简单的 Fixture,用于提供测试数据@pytest.fixturedef input_values():a = 5b = 10return a, b# 定义要测试的函数def multiply(a, b):return a * b# 使用 Fixture 进行测试def test_multiply(input_values):a, b = input_valuesresult = multiply(a, b)assert result == 50

执行测试

    J:\2023\9\Python>pytest -v=========================== test session starts ============================platform win32 -- Python 3.11.0, pytest-7.1.3, pluggy-1.0.0 -- C:\Users\Michael\AppData\Local\Programs\Python\Python311\python.execachedir: .pytest_cacherootdir: J:\2023\9\Pythonplugins: anyio-3.6.2, asyncio-0.19.0, cov-4.0.0, excel-1.5.0, timeout-2.1.0asyncio: mode=Mode.STRICTcollected 1 itemtest_main.py::test_multiply PASSED                                    [100%]============================ 1 passed in 0.03s =============================

3.2.2. Setup&Teardown

例如一个测试,每次开始测试前要连接数据库,测试完了之后要关闭数据库。如果每个测试用例中都添加一个connect_db和close_db函数,会显得有些重复。利用fixture的Setup&Teardown功能,就可以自动完成连接和关闭数据库。pytest.fixture提供了yield协程来实现此功能。

示例代码

    # coding=utf-8    # test_main.pyimport pytest@pytest.fixture()def db():print('\nConnection successful')yieldprint('\nConnection closed')def search_user(user_id):d = {'001': 'xiaoming'}return d[user_id]def test_search(db):assert search_user('001') == 'xiaoming'

执行测试

    J:\2023\9\Python>pytest -v -s=========================== test session starts ============================platform win32 -- Python 3.11.0, pytest-7.1.3, pluggy-1.0.0 -- C:\Users\Michael\AppData\Local\Programs\Python\Python311\python.execachedir: .pytest_cacherootdir: J:\2023\9\Pythonplugins: anyio-3.6.2, asyncio-0.19.0, cov-4.0.0, excel-1.5.0, timeout-2.1.0asyncio: mode=Mode.STRICTcollected 1 itemtest_main.py::test_searchConnection successfulPASSEDConnection closed============================ 1 passed in 0.03s =============================

3.2.3. 作用域

fixture有4种作用域,不同作用域有着不同的先后顺序,默认为函数级。

  • function: 函数级,每个测试函数都会执行一次固件;

  • class: 类级别,每个测试类执行一次,所有方法都可以使用;

  • module: 模块级,每个模块执行一次,模块内函数和方法都可使用;

  • session: 会话级,一次测试只执行一次,所有被找到的函数和方法都可用。

示例代码:

    # coding=utf-8    # test_main.pyimport pytest@pytest.fixture(scope='function')def func_scope():print("setup function")yieldprint("\nteardown function")@pytest.fixture(scope='module')def mod_scope():print("setup module")yieldprint("teardown module")@pytest.fixture(scope='session')def sess_scope():print("\nsetup session")yieldprint("teardown session")@pytest.fixture(scope='class')def class_scope():print("setup class")yieldprint("teardown class")def test_multi_scope(sess_scope, mod_scope, class_scope, func_scope):pass

执行测试

通过结果测试可以验证相关执行顺序

    J:\2023\9\Python>pytest -v -s=========================== test session starts ============================platform win32 -- Python 3.11.0, pytest-7.1.3, pluggy-1.0.0 -- C:\Users\Michael\AppData\Local\Programs\Python\Python311\python.execachedir: .pytest_cacherootdir: J:\2023\9\Pythonplugins: anyio-3.6.2, asyncio-0.19.0, cov-4.0.0, excel-1.5.0, timeout-2.1.0asyncio: mode=Mode.STRICTcollected 1 itemtest_main.py::test_multi_scopesetup sessionsetup modulesetup classsetup functionPASSEDteardown functionteardown classteardown moduleteardown session============================ 1 passed in 0.03s =============================

3.2.4. 自动执行

如果测试的每个函数都需要添加fixture参数来实现相关功能,会有些重复。autouse参数可以自动实现为所有作用域的函数、类、模块和会话添加Setup和Teardown功能。

示例代码

    # coding=utf-8    # test_main.pyimport pytest@pytest.fixture(scope='function', autouse=True)def func_scope():print("\nsetup function")yieldprint("\nteardown function")def test_multi_scope():pass

执行结果

    J:\2023\9\Python>pytest -v -s=========================== test session starts ============================platform win32 -- Python 3.11.0, pytest-7.1.3, pluggy-1.0.0 -- C:\Users\Michael\AppData\Local\Programs\Python\Python311\python.execachedir: .pytest_cacherootdir: J:\2023\9\Pythonplugins: anyio-3.6.2, asyncio-0.19.0, cov-4.0.0, excel-1.5.0, timeout-2.1.0asyncio: mode=Mode.STRICTcollected 1 itemtest_main.py::test_multi_scopesetup functionPASSEDteardown function============================ 1 passed in 0.03s =============================

3.3. Hook装饰器

如果想要定制pytest的输出信息,可以使用hook装饰器。下面的函数放在conftest.py文件中,pytest默认会加载conftest.py文件,所以此文件中的夹具和hook函数都会自动加载。pytest_runtest_makereport是用来定制输出报告信息的。对应测试函数的setup、call、teardown三个阶段,通过rep.when来判断。

 @pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):# execute all other hooks to obtain the report objectoutcome = yieldrep = outcome.get_result()# set a report attribute for each phase of a call, which can be "setup", "call", "teardown"setattr(item, "rep_" + rep.when, rep)

4. 其他

4.1. 插件化

pytest 是一个高度可扩展和插件化的测试框架。它提供了广泛的插件机制,使得用户可以根据需要添加、自定义或扩展各种功能。

以下是 pytest 插件化的一些关键特性:

  1. 自动发现和加载插件:pytest 能够自动发现并加载安装在项目中的插件。只需将插件包安装到项目环境中,pytest 就会自动识别并应用这些插件。

  2. 丰富的内置插件:pytest 内置了许多常用的插件,例如 capture 输出捕获插件、assertion 断言插件、coverage 代码覆盖插件等。这些内置插件提供了额外的功能和增强 pytest 的能力。

  3. 外部插件支持:除了内置插件,pytest 还支持第三方开发的插件。用户可以从社区中选择并使用各种插件,例如数据库插件、测试报告生成插件、测试数据生成插件等。

  4. 插件钩子函数:pytest 提供了一组钩子函数,允许插件介入测试执行过程中的不同阶段。通过实现这些钩子函数,插件可以在测试运行过程中进行自定义操作,如修改配置、收集测试用例、修改测试结果等。

  5. 自定义插件开发:如果现有的插件不能满足需求,用户还可以根据自己的需求开发定制化的插件。pytest 提供了丰富的 API 和文档,帮助用户编写自己的插件,并与其他 pytest 插件进行协作。

通过插件化的特性,pytest 提供了灵活、可定制的测试框架环境,使用户能够根据具体需求轻松扩展和定制 pytest 的功能,并集成额外的工具和服务。这使得 pytest 成为一个受欢迎的测试框架,适用于各种测试场景和项目规模。

4.2. 测试报告

pytest-html是常用的测试报告生成pytest插件。

4.2.1. 安装pytest-html

pip install pytest-html

4.2.2. 使用

    J:\2023\9\Python>pytest -sv --html=report.html=========================== test session starts ============================platform win32 -- Python 3.11.0, pytest-7.1.3, pluggy-1.0.0 -- C:\Users\Michael\AppData\Local\Programs\Python\Python311\python.execachedir: .pytest_cachemetadata: {'Python': '3.11.0', 'Platform': 'Windows-10-10.0.18363-SP0', 'Packages': {'pytest': '7.1.3', 'pluggy': '1.0.0'}, 'Plugins': {'anyio': '3.6.2', 'asyncio': '0.19.0', 'cov': '4.0.0', 'excel': '1.5.0', 'html': '4.0.2', 'metadata': '3.0.0', 'timeout': '2.1.0'}}rootdir: J:\2023\9\Pythonplugins: anyio-3.6.2, asyncio-0.19.0, cov-4.0.0, excel-1.5.0, html-4.0.2, metadata-3.0.0, timeout-2.1.0asyncio: mode=Mode.STRICTcollected 3 itemstest_main.py::TestExample::test_addition PASSEDtest_main.py::TestExample::test_subtraction PASSEDtest_main.py::TestExample::test_multiplication PASSED------- Generated html report: file:///J:/2023/9/Python/report.html --------============================ 3 passed in 0.25s =============================

4.2.3. 报告

image

4.3. 集成

  1. pytest可以方便地集成到Jenkins,并且可以用 Pytest+Allure生成更加可视的报告。

  2. pytest可以自动集成到vscode中,可以更加方便地手动执行单个或多个测试。

相关文章:

pytest简明教程

1. 简介 pytest是一款基于Python的测试框架。与Python自带的unittest相比,pytes语法更加简洁,断言更加强大,并且在自动测试以及插件生态上比unittest都要更加强大。 1.1. 安装pytest pip install pytest1.2. pytest命名规则 pytest默认会…...

解决方案:解决https页面加载http资源报错

HTTPS页面加载HTTP资源会报错的原因是出于安全性考虑。 HTTPS(HyperText Transfer Protocol Secure)是一种通过使用SSL/TLS加密通信来保护数据传输的协议,它确保了客户端和服务器之间的安全连接。 当HTTPS页面尝试加载非加密的HTTP资源时&a…...

嵌入式开源库之libmodbus学习笔记

socat 安装sudo apt-get install socat创建终端 socat -d -d pty,b115200 pty,b115200查看终端 ls /dev/pts/ minicom 安装 sudo apt-get install minicom链接虚拟终端 sudo minicom -D /dev/pts/3以十六进制显示 minicom -D /dev/pts/1 -H设置波特率 minicom -D /dev/pts/1…...

Spring MVC 中的数据验证技术

一、前言 在Web开发中,数据验证是不可或缺的一部分。Spring MVC 框架提供了强大的数据验证支持,可以帮助我们轻松地对用户提交的数据进行验证。 二、实现 Spring MVC 使用 JSR-303 验证规范(Hibernate Validator 是其参考实现)…...

windows 修改hosts映射,可以ping通,但是无法通过http url 路径访问,出现 500 Internal Privoxy Error

问题描述 今天在学习nginx时,想在hosts配置一个nginx的域名映射,但是发现访问nginx服务的ip时可以访问通,在dos命令窗口ping配置的域名映射也可以ping通,但是一旦在浏览器通过http请求访问配置的hosts域名映射时却出现 500 Inter…...

如何将图片转为ico格式

这里主要是记录一个网站,如果你有更好的办法欢迎留言~ ico简介 ICO(Icon)是一种用于表示图标的文件格式,常用于Windows操作系统中。ICO格式的图片通常用于表示应用程序、文件夹、网站等的图标。 ICO文件可以包含多个图标&#x…...

ElasticSearch - 基于 JavaRestClient 操作索引库和文档

目录 一、RestClient操作索引库 1.1、RestClient是什么? 1.2、JavaRestClient 实现创建、删除索引库 1.2.1、前言 1.2.1、初始化 JavaRestClient 1.2.2、创建索引库 1.2.3、判断索引库是否存在 1.2.4、删除索引库 1.3、JavaRestClient 实现文档的 CRUD 1.3…...

【人脸质量评估】MagFace:一个既可以用作人脸识别,又可以用作人脸质量评估的方法

论文题目:《MagFace: A Universal Representation for Face Recognition and Quality Assessment》-CVPR2021 论文地址:https://arxiv.org/abs/2103.06627v4 代码地址:https://github.com/IrvingMeng/MagFace...

FPGA 图像缩放 千兆网 UDP 网络视频传输,基于RTL8211 PHY实现,提供工程和QT上位机源码加技术支持

目录 1、前言版本更新说明免责声明 2、相关方案推荐UDP视频传输--无缩放FPGA图像缩放方案我这里已有的以太网方案 3、设计思路框架视频源选择ADV7611 解码芯片配置及采集动态彩条跨时钟FIFO图像缩放模块详解设计框图代码框图2种插值算法的整合与选择 UDP协议栈UDP视频数据组包U…...

智能驾驶、智能家居、智能工业中的 AI 关键基础设施,半导体厂商恩智浦的角色是什么?

我们来看一条七年前的真实新闻报道,2016 年《福布斯》在报道中提到“2020 年会有 1000 万台的自动驾驶汽车”。然而 2023 年的现在,真正实现 L4 级别自动驾驶的汽车,仍然远远没有达到这个预测的数量。 另一边,数据显示&#xff0c…...

APScheduler包——python tornado框架中实现定时任务

介绍: APScheduler的全称是Advanced Python Scheduler。它是一个轻量级的 Python 定时任务调度框架。APScheduler 支持三种调度任务:固定时间间隔,固定时间点(日期),Linux 下的 Crontab 命令。同时&#xf…...

BASH shell脚本篇3——字符串处理

这篇文章介绍下BASH shell中的字符串处理的相关命令。之前有介绍过shell的其它命令,请参考: BASH shell脚本篇1——基本命令 BASH shell脚本篇2——条件命令 Bash字符串也是一种数据类型,它用于表示文本而不是数字,它是一组可能…...

【SSL】用Certbot生成免费HTTPS证书

1. 实验背景 服务器:CentOS7.x 示例域名: www.example.com 域名对应的web站点目录: /usr/local/openresty/nginx/html 2. 安装docker # yum -y install yum-utils# yum-config-manager --add-repo https://download.docker.com/linux/ce…...

报错:java.sql.SQLSyntaxErrorException: Table ‘examsys.Teacher’ doesn’t exist

Linux大小写区分,导致部署项目时MySQL出现错误 问题原因:找不到Teacher这张表。因为在windows下的mysql表名不区分大小写,所以在windows下运行项目没问题。在linux中,mysql会区分大小写,所以sql语句表名用大写的就会找…...

.NET的PLC帮助类

TCP和UDP协议: TCP(传输控制协议)和UDP(用户数据报协议)是TCP/IP协议簇中的两种核心协议。它们在传输层上提供数据传输服务,但具有不同的特性和功能。 TCP协议是一种提供可靠、面向连接的字节流服务的传输协…...

Linux中nfs:failed: Operation not supported

先给出思路: 一个简单粗暴的方式:卸载重装排除未知问题,步骤如下: 一、在 Linux 上卸载 NFS 服务器,步骤: 停止 NFS 服务: sudo service nfs-kernel-server stop如果您使用的是不同的发行版&am…...

ElasticSearch映射与模板介绍

一、前言 前面有相关系列文章介绍了ES的基本概念和各种版本SDK的使用,ES现在已升级到8.5版本,有些概念和SDK用法都有很大变化,后续ES相关的文章会以8.3版本为基准介绍一些实际中应用需要掌握的概念以及一些比较实际的例子。 二、映射 ES环…...

通过 Azure 日志分析加强云安全

Microsoft Azure 云服务在安全日志存储、访问、可伸缩性、降低成本和易于部署方面提供了巨大的优势,因此在企业中很受欢迎。 Microsoft Azure 日志记录工具(如 Log360)可帮助管理 Azure 云基础结构中所有设备和应用程序(如虚拟机…...

[H5动画制作系列 ]变量,帧频,监听器等的生命周期基础测试

模式:按照上述抓图,actions层,1帧,写初始化代码,10帧写返回代码到2帧代码,2-10帧之间一直循环。1帧及10帧代码如下: 如果程序在1-10之间循环,会反复创建变量i,多个监听器等。所以,第一帧最好执行一次即可,程序在2-10帧之间一直循环。...

基于SpringBoot的服装生产管理系统的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 登录界面的实现 系统主界面的实现 用户管理模块的实现 人事安排管理模块的实现 工资管理模块的实现 考勤管理模块的实现 样板管理模块的实现 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 本协力服装厂服装生…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...