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

【Pytest自动化测试详解】

目录

一、前言pytest是一个非常成熟的全功能的Python测试框架,主要特点:

二、pytest安装

2.1、安装     pip install -U pytest

2.2、验证安装      pytest --version   # 会展示当前已安装版本

2.3、pytest文档        官方文档:https://docs.pytest.org/en/latest/contents.html

三、pytest框架的约束

3.1、 python的命名规则

3.2、 pytest的命名规则

四、pytest的运行方式

4.1、主函数运行​编辑main中可使用的参数有:

4.2、命令行运行

4.3、pytest.ini配置文件方式运行(常用)

        mian执行方式还是命令执行,都会去读取pytest.ini文件​编辑

​五、pytest配置文件pytest.ini文件

六、pytest的常用插件

七、pytest中conftest.py文件

7.1、conftest.py的特点

7.2、conftest.py的示例目录,最顶层的 conftest,一般写全局的 fixture

八、pytest中fixtrue装饰器

8.1、前言

8.2、fixtrue的优势

8.3、Fixture的调用方式:@pytest.fixture(scope = "function",params=None,autouse=False,ids=None,name=None)

8.4、Fixture的作用范围

8.5、fixtrue参数详解-scope 

8.5.1、scope = “function”

8.5.2、scope = “class”测试类内的每一个测试方法都调用了fixture,fixture只在该class下所有测试用例执行前执行一次

8.5.3、scope = “module”:与class相同,只从.py文件开始引用fixture的位置生效

​编辑

8.5.4、scope = “session”:

8.6、fixtrue参数详解-autouse

默认False,若为True,刚每个测试函数都会自动调用该fixture,无需传入fixture函数名由此我们可以总结出调用fixture的三种方式:  1.函数或类里面方法直接传fixture的函数参数名称  2.使用装饰器@pytest.mark.usefixtures()修饰  3.autouse=True自动调用,无需传仍何参数,作用范围跟着scope走(谨慎使用)让我们来看一下,当autouse=ture的效果:​编辑

8.7、fixtrue参数详解params

8.8、fixtrue参数详解-ids

8.9、fixtrue参数详解-name

九、pytest跳过测试用例skip、skipif

9.1、@pytest.mark.skip跳过执行测试用例,有可选参数 reason:跳过的原因,会在执行结果中打印

9.2、pytest.skip()函数基础使用作用:在测试用例执行期间强制跳过不再执行剩余内容类似:在Python的循环里面,满足某些条件则break 跳出循环​编辑

9.3、 pytest.skip(msg=“”,allow_module_level=False)

9.4、 pytest.skip(msg=“”,allow_module_level=False)

9.5、跳过标记

9.6、pytest.importorskip( modname: str, minversion: Optional[str] = None, reason: Optional[str] = Nonse )作用:如果缺少某些导入,则跳过模块中的所有测试参数列表

9.7、使用自定义标记 mark

十、Pytest参数化   @pytest.mark.parametrize

10.1、函数数据参数化

十一、pytest标记为失败函数和失败重试

十二、pytest生成测试报告

1、下载Allure插件

2、生成临时的json报告(过度)

3、生成html报告

 4、allure测试报告优化

十三、pytest中管理日志

1、日志级别

2、分析解释

3、日志输出-控制台

4、日志输出-文件

5、日志输出-控制台和文件

6、format常用格式说明

7、捕捉异常traceback记录​编辑

8、日志滚动和过期删除(按时间)​编辑

十四、总结        


一、前言
pytest是一个非常成熟的全功能的Python测试框架,主要特点:

 1、简单灵活,非常方便的组织自动化测试用例;

 2、支持参数化,可以细粒度地控制要测试的测试用例;

 3、能够支持简单的单元测试和复杂的功能测试,比如web端selenium/移动端appnium等自动化测试、request接口自动化测试

 4、pytest具有很多第三方插件,并且可以自定义扩展,比如测试报告生成,失败重运行机制

 5、测试用例的skip和fail处理;

 6、结合业界最美的测试报告allure+Jenkins,持续集成

二、pytest安装


2.1、安装     pip install -U pytest
2.2、验证安装      pytest --version   # 会展示当前已安装版本
2.3、pytest文档        官方文档:https://docs.pytest.org/en/latest/contents.html

三、pytest框架的约束


3.1、 python的命名规则

1)py文件全部小写,多个英文用_隔开
2)class名首字母大写,驼峰
3)函数和方法名小写,多个英文用_隔开
4)全局变量,前面要加global
5)常量字母必须全大写,如:AGE_OF_NICK

3.2、 pytest的命名规则

1)模块名(py文件)必须是以test_开头或者_test结尾
2)测试类(class)必须以Test开头,并且不能带init方法,类里的方法必须以test_开头
3)测试用例(函数)必须以test_开头

四、pytest的运行方式


4.1、主函数运行

main中可使用的参数有:
参数描述案例
-v输出调试信息。如:打印信息pytest.main([‘-v’,‘testcase/test_one.py’,‘testcase/test_two.py’])
-s输出更详细的信息,如:文件名、用例名pytest.main([‘-vs’,‘testcase/test_one.py’,‘testcase/test_two.py’])
-n多线程或分布式运行测试用例
-x只要有一个用例执行失败,就停止执行测试pytest.main([‘-vsx’,‘testcase/test_one.py’])
– maxfail出现N个测试用例失败,就停止测试pytest.main([‘-vs’,‘-x=2’,‘testcase/test_one.py’]
–html=report.html生成测试报告pytest.main([‘-vs’,‘–html=./report.html’,‘testcase/test_one.py’])
-m通过标记表达式执行
-k根据测试用例的部分字符串指定测试用例,可以使用and,or

4.2、命令行运行


4.3、pytest.ini配置文件方式运行(常用)
        mian执行方式还是命令执行,都会去读取pytest.ini文件

        pytset.ini文件尽可能不要出现中文。

  

五、pytest配置文件pytest.ini文件


pytest的配置文件通常放在测试目录下,名称为pytest.ini,命令行运行时会使用该配置文件中的配置

六、pytest的常用插件

 插件列表网址:https://plugincompat.herokuapp.com
包含很多插件包,大家可依据工作的需求选择使用。

七、pytest中conftest.py文件

7.1、conftest.py的特点

  • pytest 会默认读取 conftest.py里面的所有 fixture
  • conftest.py 文件名称是固定的,不能改动
  • conftest.py 只对同一个 package 下的所有测试用例生效
  • 不同目录可以有自己的 conftest.py,一个项目中可以有多个 conftest.py
  • 测试用例文件中不需要手动 import conftest.py,pytest 会自动查找
7.2、conftest.py的示例目录,最顶层的 conftest,一般写全局的 fixture

八、pytest中fixtrue装饰器


8.1、前言


        虽然setup和teardown可以执行一些前置和后置操作,但是这种是针对整个脚本全局生效的
如果有以下场景:

  1. 用例一需要执行登录操作;

  2. 用例二不需要执行登录操作;

  3. 用例三需要执行登录操作,则setup和teardown则不满足要求。

  4. fixture可以让我自定义测试用例的前置条件

8.2、fixtrue的优势

  • 命名方式灵活,不限于setup和teardown两种命名
  • conftest.py可以实现数据共享,不需要执行import 就能自动找到fixture
  • scope=module,可以实现多个.py文件共享前置
  • scope=“session” 以实现多个.py 跨文件使用一个 session 来完成多个用例

8.3、Fixture的调用方式:
@pytest.fixture(scope = "function",params=None,autouse=False,ids=None,name=None)

8.4、Fixture的作用范围


8.5、fixtrue参数详解-scope 
  • 用于控制Fixture的作用范围
  • 作用类似于Pytest的setup/teardown
  • 默认取值为function(函数级别),
  • 控制范围的排序为:session > module > class > function
8.5.1、scope = “function”

  • 场景一:做为参数传入

        从运行结果可以看出,fixture做为参数传入时,会在执行函数之前执行该fixture函数。再将值传入测试函数做为参数使用,这个场景多用于登录

  • 场景二:Fixture的相互调用
  1. 即使fixture之间支持相互调用,但普通函数直接使用fixture是不支持的,一定是在测试函数内调用才会逐级调用生效
  2. 有多层fixture调用时,最先执行的是最后一层fixture,而不是先执行传入测试函数的fixture
  3. 上层fixture的值不会自动return,这里就类似函数相互调用一样的逻辑
8.5.2、scope = “class”
测试类内的每一个测试方法都调用了fixture,fixture只在该class下所有测试用例执行前执行一次

        测试类中的测试方法使用了fixture函数名,fixture只在该class下第一个使用fixture函数的测试用例位置开始算,后面所有的测试用例执行前只执行一次。而该位置之前的测试用例就不管。
语法

1@pytest.fixture(scope='class')


8.5.3、scope = “module”:与class相同,只从.py文件开始引用fixture的位置生效

8.5.4、scope = “session”:
  • session的作用范围是针对.py级别的
  • module是对当前.py生效
  • seesion是对多个.py文件生效
  • session只作用于一个.py文件时,作用相当于module
  • 所以session多数与contest.py文件一起使用,做为全局Fixture
8.6、fixtrue参数详解-autouse

默认False,若为True,刚每个测试函数都会自动调用该fixture,无需传入fixture函数名
由此我们可以总结出调用fixture的三种方式:
  1.函数或类里面方法直接传fixture的函数参数名称
  2.使用装饰器@pytest.mark.usefixtures()修饰
  3.autouse=True自动调用,无需传仍何参数,作用范围跟着scope走(谨慎使用)
让我们来看一下,当autouse=ture的效果:
8.7、fixtrue参数详解params

Fixture的可选形参列表,支持列表传入
默认None,每个param的值
fixture都会去调用执行一次,类似for循环
可与参数ids一起使用,作为每个参数的标识,详见ids
被Fixture装饰的函数要调用是采用:Request.param(固定写法,如下图)

8.8、fixtrue参数详解-ids


用例标识ID与params配合使用,一对一关系,配置了IDS后:

8.9、fixtrue参数详解-name
  • fixture的重命名

  • 通常来说使用 fixture 的测试函数会将 fixture 的函数名作为参数传递,但是 pytest 也允许将fixture重命名

  • 如果使用了name,那只能将name传如,函数名不再生效

  • 调用方法:@pytest.mark.usefixtures(‘fixture1’,‘fixture2’)

九、pytest跳过测试用例skip、skipif

9.1、@pytest.mark.skip
跳过执行测试用例,有可选参数 reason:跳过的原因,会在执行结果中打印

9.2、pytest.skip()函数基础使用
作用:在测试用例执行期间强制跳过不再执行剩余内容
类似:在Python的循环里面,满足某些条件则break 跳出循环

9.3、 pytest.skip(msg=“”,allow_module_level=False)


当 allow_module_level=True 时,可以设置在模块级别跳过整个模块

9.4、 pytest.skip(msg=“”,allow_module_level=False)

方法:
skipif(condition, reason=None)
参数:
condition:跳过的条件,必传参数
reason:标注原因,必传参数
使用方法:
@pytest.mark.skipif(condition, reason=“xxx”)

9.5、跳过标记

  • 可以将 pytest.mark.skip 和 pytest.mark.skipif 赋值给一个标记变量
  • 在不同模块之间共享这个标记变量
  • 若有多个模块的测试用例需要用到相同
  • 的 skip 或 skipif ,可以用一个单独的文件去管理这些通用标记,然后适用于整个测试用例集
  • # 标记
  • skipmark = pytest.mark.skip(reason="不能在window上运行=====")
  • skipifmark = pytest.mark.skipif(sys.platform == 'win32', reason="不能在window上运行啦啦啦=====")

9.6、pytest.importorskip( modname: str, minversion: Optional[str] = None, reason: Optional[str] = Nonse )
作用:如果缺少某些导入,则跳过模块中的所有测试
参数列表
  • modname:模块名
  • minversion:版本号
  • reason:跳过原因,默认不给也行

pexpect = pytest.importorskip("pexpect", minversion="0.3")
@pexpect
def test_import():
    print("test")


9.7、使用自定义标记 mark

命令运行:

  • pytest -s -m model test_one.py
  • 如何避免warnings
  • 创建一个 pytest.ini 文件
  • 加上自定义mark
  • pytest.ini 需要和运行的测试用例同一个目录,或在根目录下作用于全局

十、Pytest参数化   @pytest.mark.parametrize


pytest允许在多个级别启用测试化参数:
1)pytest.fixture()允许fixture有参数化功能
2)pytest.mark.parametrize 允许在测试函数和类中定义多组参数和fixtures
3)pytest_generate_tests允许定义自定义参数化方案或扩展

  • def parametrize(self,argnames, argvalues, indirect=False, ids=None, scope=None):
  • argnames:
  • 含义:参数值列表
  • 格式:字符串"arg1,arg2,arg3"
  • 例如:
  • @pytest.mark.parametrize(“name,pwd”, [(“yy1”, “123”), (“yy2”, “123”)])
  • argvalues:
  • 含义:参数值列表
  • 格式:必须是列表,如:[ val1,val2,val3 ]
  • 如果只有一个参数,里面则是值的列表如:@pytest.mark.parametrize(“username”, [“yy”, “yy2”, “yy3”])
  • 如果有多个参数例,则需要用元组来存放值,一个元组对应一组参数的值,如:@pytest.mark.parametrize(“name,pwd”, [(“yy1”, “123”), (“yy2”, “123”), (“yy3”, “123”)])
  • ids:
  • 含义:用例的id
  • 格式:传一个字符串列表
  • 作用:可以标识每一个测试用例,自定义测试数据结果的显示,为了增加可读性
  • indirect:
  • 作用:如果设置成 True,则把传进来的参数当函数执行,而不是一个参数(下一篇文章即讲解

10.1、函数数据参数化

方便测试函数对测试属于的获取。
方法:
parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)
常用参数:
argnames:参数名
argvalues:参数对应值,类型必须为list
当参数为一个时格式:[value]
当参数个数大于一个时,格式为:[(param_value1,param_value2…),(param_value1,param_value2…)]
使用方法:
@pytest.mark.parametrize(argnames,argvalues)
️ 参数值为N个,测试方法就会运行N次

十一、pytest标记为失败函数和失败重试


安装第三方插件:pytest-rerun、pytest-rerunfailures

失败重试:【–reruns=1】,用例执行失败后,会立即开始重试一次此用例,再执行下一条用例
失败重运行:【–if】 ,用例集或用例执行完成之后,再次pytest.main(),会收集失败的用例,再次运行;如果没有失败的用例,会执行全部
一个run文件,可以同时写多条pytest.main(),执行pytest的命令


注意:如果用例数较多,第一次运行全部成功的情况,第二个pytest.main(),是会收集所有的用例再执行一遍;建议使用失败重试次数(–reruns=1),失败一次后,立刻执行一次,也可减少用例的失败率

失败重试方式:
1、可在命令行 –reruns=1 reruns_delay=2 失败后重运行1次,延时2s
2、使用装饰器进行失败重运行
@pytest.mark.flaky(reruns=1, reruns_delay=2)
使用方式:
命令行参数:–reruns n(重新运行次数),–reruns-delay m(等待运行秒数)
装饰器参数:reruns=n(重新运行次数),reruns_delay=m(等待运行秒数)

重新运行指定的测试用例:


注意:

1.如果指定了用例的重新运行次数,在命令行添加的 --reruns 对这些用例是不会生效的
2.不可以和 fixture 装饰器@pytest.fixture()一起使用
3.该插件与 pytest-xdist 的 --looponfail 标志不兼容
4.该插件与核心 --pdb 标志不兼容


十二、pytest生成测试报告


1、下载Allure插件


官方地址:allure官方下载地址,bin目录放到path变量当中
验证是否安装成功:allure -- version

2、生成临时的json报告(过度)


pytest.ini文件中,addopts中加上一个--alluredir=./temps
--clean-alluredir        清除上次的数据

3、生成html报告


pytest框架自带一个测试报告,内容也相对全面,但是可读性差点,allure生成的测试报告,可改造性强,看起来也美观

 4、allure测试报告优化


在allure测试报告页面可以选择中英文切换,我个人比较倾向使用【功能/Behaviors】这个菜单里面的信息,因为这里可以看到更多详细的内容,也比较容易对我们的测试用例进行规范化

1、增加功能模块描述、测试点描述及测试步骤

方法:先import allure,然后在类上添加装饰器@allure.feature("生成账单"),在方法上添加装饰器@allure.story("批量生成账单"),在方法里面添加步骤with allure.step("1.进入[社区管理]菜单"):

使用及效果图:

(feature相当于一个功能,一个大的模块,将case分类到某个feature中,报告中在behaviore中显示,相当于testsuite)

(story相当于对应这个功能或者模块下的不同场景,分支功能,属于feature之下的结构,报告在features中显示,相当于testcase)

 2、执行断言,失败截图、成功截图

一条case可以在中间步骤进行断言,可以在最后进行断言,看测试需要。我们想要的一个结果是断言失败的截图并放到allure测试报告中。    

现在项目下面建一个screenshot文件夹,用来放截取的图片,然后allure再获取该图片。houseInfoFail.png这个是自己定义的图片的文件名。

如果断言成功了,也截取一张图片,并放到allure报告中。完整代码如下:


houseInfo.png这个是执行成功截取的图片,注意和上面执行失败截取的图片文件名区分一下。

十三、pytest中管理日志

1、日志级别

默认生成的root logger的level是logging.WARNING,低于该级别的就不输出了

级别排序:CRITICAL > ERROR > WARNING > INFO > DEBUG

debug : 打印全部的日志,详细的信息,通常只出现在诊断问题上
info : 打印info,warning,error,critical级别的日志,确认一切按预期运行
warning : 打印warning,error,critical级别的日志,一个迹象表明,一些意想不到的事情发生了,或表明一些问题在不久的将来(例如。磁盘空间低”),这个软件还能按预期工作
error : 打印error,critical级别的日志,更严重的问题,软件没能执行一些功能
critical : 打印critical级别,一个严重的错误,这表明程序本身可能无法继续运行

这时候,如果需要显示低于WARNING级别的内容,可以引入NOTSET级别来显示:

2、分析解释


Logging.Formatter:这个类配置了日志的格式,在里面自定义设置日期和时间,输出日志的时候将会按照设置的格式显示内容。

Logging.Logger:Logger是Logging模块的主体。
进行以下三项工作:

  • 为程序提供记录日志的接口;
  • 判断日志所处级别,并判断是否要过滤;
  • 根据其日志级别将该条日志分发给不同handler;

常用函数有:

  • Logger.setLevel() 设置日志级别;
  • Logger.addHandler() 和 Logger.removeHandler() 添加和删除一个Handler;
  • Logger.addFilter() 添加一个Filter,过滤作用;
  • Logging.Handler:Handler基于日志级别对日志进行分发,如设置为WARNING
  • 级别的Handler只会处理WARNING及以上级别的日志。

常用函数有:

  • setLevel() 设置级别;
  • setFormatter() 设置Formatter;
3、日志输出-控制台

上面代码通过logging.basicConfig函数进行配置了日志级别和日志内容输出格式

4、日志输出-文件


 

5、日志输出-控制台和文件


只要在输入到日志中的第二步和第三步插入一个handler输出到控制台:
创建一个handler,用于输出到控制台

ch = logging.StreamHandler()
ch.setLevel(logging.WARNING)  # 输出到console的log等级的开关

第四步和第五步分别加入以下代码即可

ch.setFormatter(formatter)
logger.addHandler(ch)


6、format常用格式说明

  1. %(levelno)s: 打印日志级别的数值

  2. %(levelname)s: 打印日志级别名称

  3. %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]

  4. %(filename)s: 打印当前执行程序名

  5. %(funcName)s: 打印日志的当前函数

  6. %(lineno)d: 打印日志的当前行号

  7. %(asctime)s: 打印日志的时间

  8. %(thread)d: 打印线程ID

  9. %(threadName)s: 打印线程名称

  10. %(process)d: 打印进程ID

  11. %(message)s: 打印日志信息

7、捕捉异常traceback记录


需要将日志不上报错误,仅记录,可以写成exc_info=False

8、日志滚动和过期删除(按时间)

说明:

  • filename:日志文件名的prefix;
  • when:是一个字符串,用于描述滚动周期的基本单位,字符串的值及意义如下:
  • “S”:Seconds
  • “M”:Minutes
  • “H”:Hours
  • “D”:Days
  • “W”:Week day (0=Monday)
  • “midnight”:Roll over at midnight
  • interva:滚动周期,单位有when指定,比如:when=’D’,interval=1,表示每天产生一个日志文件
  • backupCount:表示日志文件的保留个数

十四、总结
        

        如果你看到了总结,那么恭喜你看到了总结,总结是全文的精华,而精华是全文的内容。相对Unittest框架,优先选择Pytest。希望此文对你有所帮助,谢谢关注和点赞收藏。

相关文章:

【Pytest自动化测试详解】

目录 一、前言pytest是一个非常成熟的全功能的Python测试框架,主要特点: 二、pytest安装 2.1、安装 pip install -U pytest 2.2、验证安装 pytest --version # 会展示当前已安装版本 2.3、pytest文档 官方文档:https:…...

6-14题连接 - 高频 SQL 50 题基础版

目录 1. 相关知识点2. 例子2.6. 使用唯一标识码替换员工ID2.7- 产品销售分析 I2.8 - 进店却未进行过交易的顾客2.9 - 上升的温度2.10 - 每台机器的进程平均运行时间2.11- 员工奖金2.12-学生们参加各科测试的次数2.13-至少有5名直接下属的经理2.14 - 确认率 1. 相关知识点 left …...

深度挖掘数据资产,洞察业务先机:利用先进的数据分析技术,精准把握市场趋势,洞悉客户需求,为业务决策提供有力支持,实现持续增长与创新

在当今日益激烈的商业竞争环境中,企业想要实现持续增长与创新,必须深入挖掘和有效运用自身的数据资产。数据不仅是企业运营过程中的副产品,更是洞察市场趋势、理解客户需求、优化业务决策的重要资源。本文将探讨如何通过利用先进的数据分析技…...

亚马逊广告如何设置关键词竞价获取最优广告投入产出比 (ACOS)

在投放亚马逊商品广告的时候,从我们通常的理解来说,关键词竞价CPC设置的越高,广告投入产出比 (ACOS)越高,所以我们通常希望CPC越低越好,但是从我们实际投放广告来看,CPC与ACOS并不是线性相关。有时候CPC设定…...

vision mamba-yolov8:结合Vmamba的yolov8目标检测改进实现

1.vision mamba结构与原理 Mamba成功的关键在于S6模型,该模型为NLP任务设计,通过选择性扫描空间状态序列模型,将二次复杂度降低至线性。但由于视觉信号(如图像)的无序性,Mamba的S6模型不能直接应用&#xf…...

2025秋招NLP算法面试真题(十一)-Transformer的并行化

正文 本文主要谈一下关于 Transformer的并行化。文章比较短,适合大家碎片化阅读。 Decoder不用多说,没有并行,只能一个一个的解码,很类似于RNN,这个时刻的输入依赖于上一个时刻的输出。 对于Encoder侧: …...

如何在本地一键配置最强国产大模型

自从OpenAI的ChatGPT横空出世以来,国内外各类大语言模型(LLM)层出不穷,其中不乏Google的Gemini、Claude、文心一言等等。相较于竞争激烈的商业模型赛道,以Llama为代表的开源大模型的进步速度也十分惊人。 伴随着大语言…...

代码随想录算法训练营第九天|151.翻转字符串里的单词、右旋字符串、28. 实现 strStr()、459.重复的子字符串

打卡Day9 1.151.翻转字符串里的单词2.右旋字符串3.28. 实现 strStr()4.459.重复的子字符串 1.151.翻转字符串里的单词 题目链接:翻转字符串里的单词 文档讲解: 代码随想录 思路:首先,移除多余的空格;然后&#xff0c…...

第6天:文件操作和异常处理

学习目标 掌握如何在Python中进行文件读写操作理解文件的打开模式学习如何处理文件中的数据理解异常处理的基本概念掌握使用try、except、else和finally进行异常处理 学习内容 1. 文件操作 在Python中,文件操作包括打开文件、读写文件内容和关闭文件。 文件的打…...

关于freesql 频繁报“【主库】状态不可用,等待后台检查程序恢复方可使用”异常的解决。

我的项目仓储FreeSqlRepository中同时引用了“FreeSql.Provider.MySql” 和“FreeSql.Provider.MySqlConnector” 两个组件。 当我使用freesql操作数据库增删改查时,系统总是报类似如下错误:【主库】状态不可用,等待后台检查程序恢复方可使用…...

Spring Boot中如何使用Flyway进行数据库版本控制

Spring Boot中如何使用Flyway进行数据库版本控制 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在现代的软件开发中,数据库版本控制是保证应用程序…...

心理学|人格心理学——人格心理学单科作业(中科院)

一、单选题(第1-40小题,每题1.5分,共计60分。) 1、没有两个人能对同一事物做出相同的反应,反映的是人格的( ) 分值1.5分 A、稳定性 B、独特性 C、统合性 D、功能性 正确答案: B、独特性 2、人格决定一个人的生活方式,甚至有时会决定一个人的命运,反映的…...

第三方服务提供商的五大风险

亚马逊如何应对网络安全挑战 关键网络安全统计数据和趋势 移动优先世界中安全和隐私策略 当今数字时代网络安全的重要性 用户无法停止犯安全错误的 3 个原因 首席安全官可能过于依赖 EDR/XDR 防御 随着业务流程变得越来越复杂,公司开始转向第三方来提高其提供关…...

海康视频播放,包含h5和web插件

自行下载 海康开放平台 demo 都写得很清楚,不多描述 1.视频web插件 vue2写法,公共vue文件写法,调用文件即可 开始时需要以下配置,不知道的找对接平台数据的人,必须要,否则播不了 getParameterData: {po…...

数据库-python SQLite3

数据库-python SQLite3 一:sqlite3 简介二: sqlite3 流程1> demo2> sqlite3 流程 三:sqlite3 step1> create table2> insert into3> update4> select1. fetchall()2. fetchone()3. fetchmany() 5> delete6> other step 四&#…...

FFMpeg rtmp 推送本地yuv文件

可以借鉴的&#xff1a;C使用FFmpeg实现YUV数据编码转视频文件_C 语言_脚本之家 yuv文件下载地址&#xff1a;YUV Sequences 代码&#xff1a; #include <stdio.h> #include <unistd.h> #include <iostream> extern "C" { #include "libav…...

websocket使用,spring boot + vite + vue3

websocket使用&#xff0c;spring boot vite vue3 Websocket是什么WebSocket 服务端构建websocket 服务实现处理器pom文件 客户端仓库地址 Websocket是什么 WebSocket 是一种网络传输协议&#xff0c;可在单个 TCP 连接上进行全双工通信&#xff0c;位于 OSI 模型的应用层。…...

基础位运算

基础知识点&#xff1a; 1.判断2的幂 n&&#xff08;n-1&#xff09;0 2.每次减一处理 n&(n-1) 3.判断出现1次次数的数 x^0x&#xff0c;x^x0&#xff0c;a^bc则ab^c&#xff0c;ba^c 力扣练习题&#xff1a; 136.只出现一次的数字 class Solution { public:int si…...

性价比高真无线蓝牙耳机有哪些?性价比真无线蓝牙耳机推荐

目前真无线蓝牙耳机的音质和性能已经越来越接近甚至超越传统有线耳机。然而&#xff0c;市面上的TWS耳机品牌和型号繁多&#xff0c;价格也从几十元到几千元不等&#xff0c;性价比自然成了消费者选择时的重要考量因素&#xff0c;究竟哪些真无线蓝牙耳机既能够提供满意的音质和…...

Big Data Tools插件

一些介绍 在Jetbrains的产品中&#xff0c;均可以安装插件&#xff0c;其中&#xff1a;Big Data Tools插件可以帮助我们方便的操作HDFS&#xff0c;比如 IntelliJ IDEA&#xff08;Java IDE&#xff09; PyCharm&#xff08;Python IDE&#xff09; DataGrip&#xff08;SQL …...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...