当前位置: 首页 > 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、代码封装 前言 本协力服装厂服装生…...

动态内存操作(2)

接上一篇文章http://t.csdn.cn/1ONDq&#xff0c;这次我们继续讲解关于动态内存的相关知识。 一、常见的动态内存错误 1.对NULL指针进行解引用操作 #include<stdio.h> #include<stdlib.h> #include<limits.h> int main() {int* p (int*)malloc(INT_MAX/4);…...

Windows-Delphi 窗口置顶

露从今夜白&#xff0c;月是故乡明。 1.Delphi将窗口置顶 if topHwnd <> 0 thenbeginSetWindowPos(topHwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);tmr1.Enabled : True;end; 其中topHwnd是目标窗口的句柄。 2.窗口取消置顶 if topHwnd <> 0 th…...

CVE-2020-11978 Apache Airflow 命令注入漏洞分析与利用

简介 漏洞软件&#xff1a;Apache Airflow影响版本&#xff1a;< 1.10.10 环境 Vulhub 漏洞测试靶场 复现步骤 进入 /root/vulhub/airflow/CVE-2020-11978/ 目录运行以下命令启动环境 # 初始化数据库 docker compose run airflow-init # 开启服务 docker compose up -…...

面试经典算法1:DFS

一、前言 1、题目描述和代码仅供参考&#xff0c;如果有问题欢迎指出 2、解题代码采用acm模式&#xff08;自己处理输入输出&#xff09;&#xff0c;不采用核心代码模式&#xff08;只编程核心函数&#xff09; 3、解题代码采用C语言&#xff08;ai一键翻译任意语言&#xff…...

Windows系统利用cpolar内网穿透搭建Zblog博客网站并实现公网访问内网!

文章目录 1. 前言2. Z-blog网站搭建2.1 XAMPP环境设置2.2 Z-blog安装2.3 Z-blog网页测试2.4 Cpolar安装和注册 3. 本地网页发布3.1. Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 想要成为一个合格的技术宅或程序员&#xff0c;自己搭建网站制作网页是绕…...

SmartCode ViewerX VNC 3.11 Crack

SmartCode ViewerX VNC 查看器 ActiveX 轻松地将 VNC 查看器功能添加到您的应用程序中 SmartCode ViewerX VNC Viewer ActiveX 使开发人员可以使用一组直观的 ActiveX 属性和方法完全访问 VNC 查看器功能。借助ViewerX控件&#xff0c;开发人员可以轻松地为其应用程序提供屏幕共…...

傻瓜式Java操作MySQL数据库备份

文章目录 前言存储数据库存储数据表 前言 数据库备份是开发工作中经常要做的事情&#xff0c;好处是mysql提供了一个非常好的命令 mysqldump&#xff0c;直接调用它就可以将数据以sql文件的形式备份出来。但是直接写命令非常不方便&#xff0c;遇到定时备份或者指定备份那么就需…...

redis常用操作命令

日升时奋斗&#xff0c;日落时自省 注&#xff1a;命令区分有点细&#xff0c;择取自己需要的即可 目录 1、单机架构 2、数据库和应用分离 3、分布式基本概念 3.1、应用&#xff08;Application&#xff09;/系统(System) 3.2、模块&#xff08;Module&#xff09;/组件&…...

pytorch gpu安装

cuda https://blog.csdn.net/qq_51570094/article/details/124148671 https://blog.csdn.net/zxdd2018/article/details/127705627 cudnn https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#installlinux-tar 更改cudnn 保证文件目录中只有一个解压后…...

uni跳转页面不缓存上一个页面的方法

一、前言 要实现一个需求&#xff0c;从a页面跳转到b页面&#xff0c;从b页面跳转到c页面&#xff0c;然后按返回&#xff0c;从c页面直接返回a页面&#xff08;不返回b页面&#xff09; a->b->c c->a 二、实现方法 前端框架使用的是uni-app&#xff0c;我们修改…...

web前端做音乐网站/网站优化排名方法有哪些

由于使用display:none来设置的隐藏&#xff0c;每次刷新后对应的id为filePicker的div的宽高都默认为1px&#xff0c;按钮当然没有反应&#xff0c;网上找了很多具体都说不要使用display:none&#xff0c;使用css样式来设置。以下语句即解决了此问题。 <style> #filePick…...

海珠营销型网站建设/免费推广渠道有哪些

前两天刚刚装了一个MyEclipse&#xff0c;今天用了一下&#xff0c;却发现&#xff0c;每次想要在控制台上输出中文时&#xff0c;总是以乱码显示的。查了很多资料&#xff0c;对算是搞明白&#xff0c;怎么回事。首先&#xff0c;在这里先解释下&#xff0c;MyEclipse&#xf…...

学校网站管理与建设办法/阿里指数官网

# 默认localhost和2181 sh zkCli.sh# 指定服务和端口 sh zkCli.sh -server localhost:12181 # 创建节点 create [-s] [-e] path data acl-s 创建有序节点-e 创建临时节点create /node1 node1data# 创建持久节点 create -s /node localhost# 创建临时节点 create -e /nodetmp lo…...

河南商丘疫情最新政策/seo是什么意思 为什么要做seo

Symantec Endpoint Protection v11.0.5002.333 简体中文企业版 【现象描述】&#xff1a;为了内网安全&#xff0c;内网可以上外网的一台服务器上面部署了网络版symantec杀毒软件&#xff0c;版本是 v11.0.5002.333 简体中文企业版&#xff1b;由它生成的客户端&#xff0c;分发…...

惠州网站建设制作/网站建设公司大型

一、链表题目 1、从尾到头打印链表 使用栈&#xff08;也可以使用数组&#xff0c;逆序输出&#xff09; /** * public class ListNode { * int val; * ListNode next null; * * ListNode(int val) { * this.val val; * } * …...

传奇怎么做网站/it培训机构出来能找到工作吗

摘要&#xff1a;主要讲解一些比较常用的bootstrap扩展&#xff0c;比如字体图标&#xff08;font awesome&#xff09;、时间选择器、按钮等&#xff0c;这些扩展确实非常强大&#xff0c;能在bootstrap的基础上为我们增加不少光彩。 一、Font Awesome 1.1 介绍 font awesome是…...