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

五、UI自动化测试05--PyTest框架

目录

  • 一、PyTest 框架
    • 2. 特点
    • 2. 安装步骤
    • 3. 基本使⽤
      • 3.1 测试函数形式
      • 3.2 执⾏⽅式
      • 3.3 测试类形式
      • 3.4 执⾏⽅式
      • 3.5 另⼀种执⾏⽅式: 主函数执⾏
      • 3.6 特殊⽅法: 函数级别
      • 3.7 特殊⽅法: 类级别
      • 3.8 特殊⽅法: 函数级别和类级别同时使⽤
    • 4. pytest 配置⽂件
      • 4.1 选项字段获取
      • 4.2 编写步骤
      • 4.3 使⽤步骤
      • 4.4 默认设置
      • 4.5 ⾃定义规则
      • 4.6 扩展: 指定单个⽂件/类/⽅法执⾏
  • 二、 pytest 常⽤插件
    • 1. HTML 报告插件
      • 1.1 安装步骤
      • 1.2 使⽤步骤
    • 2. 控制⽅法执⾏顺序插件
      • 2.1 安装步骤
      • 2.2 使⽤步骤
    • 3. 失败重试插件
      • 3.1 安装步骤
      • 3.2 使⽤步骤
  • 三、pytest ⾼级功能
    • 1. 跳过操作
    • 2. 参数化操作
      • 2.1 单个参数
      • 2.2 多个参数
    • 3. 扩展: 断⾔⽅法的使⽤
      • 3.1 Python ⾃带的断⾔⽅法
      • 3.2 pytest 框架中使⽤断⾔
  • 四、PO 设计模式
    • 1. v0 版本
    • 2. 账户不存在脚本
    • 3. 密码错误脚本

一、PyTest 框架

  • 说明: pytest 是 Python 的⼀种单元测试框架,同⾃带的 UnitTest 测试框架类似,相⽐ UnitTest 框架使⽤起来更简洁,效率更⾼。(在⾃动化测试中同样充当测试执⾏的功能! 并且可以跟 UnitTest 互换)

2. 特点

    1. ⾮常容易上⼿,⼊⻔简单,⽂档丰富,⽂档中有很多实例可以参考
  • 官⽅⽂档地址: https://docs.pytest.org/en/6.2.x/
    1. ⽀持简单的单元测试和复杂的功能测试
    1. ⽀持参数化: UnitTest 需要通过插件扩展参数化功能!
    1. 执⾏测试过程中可以将某些测试跳过,或者对某些预期失败的 Case 标记成失败
    1. ⽀持重复执⾏失败的 Case : 通过安装插件实现
    1. ⽀持运⾏由 Nose,UnitTest 编写的测试 Case : pytest 框架的脚本在 UnitTest 下⽆法执⾏
    1. 具有很多第三⽅插件,并且可以⾃定义扩展
  • 插件获取⽹站:
    • https://docs.pytest.org/en/latest/reference/plugin_list.html
    1. ⽅便的和持续集成⼯具集成

2. 安装步骤

说明: 与 UnitTest 不同的是, pytest 框架需要先安装才能使⽤!

  • 安装:
    • pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pytest
  • 查看: pip show pytest
  • 确认版本: pytest --version

安装与查看版本步骤

在这里插入图片描述

3. 基本使⽤

3.1 测试函数形式

# 函数形式
def test_func(): # 要求函数名以 test 开头"""测试函数"""print('我是测试函数')

3.2 执⾏⽅式

在这里插入图片描述

3.3 测试类形式

# 测试类形式
class TestDemo(object): # 正常定义类, 但是测试类名必须以 Test 开头"""测试示例类"""def test_method1(self): # 正常定义⽅法, 但是测试⽅法名必须以 
test 开头"""测试⽅法1"""print('测试⽅法1')def test_method2(self):"""测试⽅法2"""print('测试⽅法2')

3.4 执⾏⽅式

在这里插入图片描述

3.5 另⼀种执⾏⽅式: 主函数执⾏

说明: 使⽤主函数, 可以实现在代码⽂件内, ⿏标右键菜单执⾏

  • 测试函数形式下使⽤
# 测试函数形式
import pytestdef test_func(): # 要求函数名以 test 开头"""测试函数"""print('我是测试函数')if __name__ == '__main__':# 语法: pytest.main(['-s', '⽂件名.py'])pytest.main(['-s', 'hm03_pytest_basic_03.py'])
  • 测试类形式下使⽤
# 测试类形式
import pytestclass TestDemo(object): # 正常定义类, 但是测试类名必须以 Test 开头"""测试示例类"""def test_method1(self): # 正常定义⽅法, 但是测试⽅法名必须以 test 开头"""测试⽅法1"""print('测试⽅法1')def test_method2(self):"""测试⽅法2"""print('测试⽅法2')if __name__ == '__main__':# 语法: pytest.main(['-s', '⽂件名.py'])pytest.main(['-s', 'hm04_pytest_basic_04.py'])

3.6 特殊⽅法: 函数级别

  • 说明: 函数级别特殊⽅法的执⾏逻辑与 UnitTest 中的 Fixture 的⽅法级别的执⾏逻辑⼀致!
"""
特殊⽅法: 函数级别
"""
import pytestclass TestDemo(object):"""测试示例类"""# 说明: 特殊⽅法名写法固定, 没有代码提示, 需要⼿写!# 注意: 函数级别执⾏顺序: # 先 setup() -> 测试⽅法1 -> teardown() ⽅法, 再 setup() -> 测试⽅法2 -> teardown() ⽅法def setup(self):"""开始⽅法"""print('函数 -> 开始')def teardown(self):"""结束⽅法"""print('函数 -> 结束')def test_method1(self):"""示例测试⽅法"""print('测试⽅法1')def test_method2(self):"""示例测试⽅法"""print('测试⽅法2')if __name__ == '__main__':pytest.main(['-s', 'hm05_pytest_basic_05.py'])

3.7 特殊⽅法: 类级别

  • 说明: 类级别特殊⽅法的执⾏逻辑与 UnitTest 中的 Fixture 的类级别的执⾏逻辑⼀致!
"""
特殊⽅法: 类级别
"""
import pytest
class TestDemo(object):"""测试示例类"""# 说明: 特殊⽅法名写法固定, 没有代码提示, 需要⼿写!# 注意: 类级别执⾏顺序:# 先 setup_class() -> 测试⽅法1 -> 测试⽅法2 -> 
teardown_class() ⽅法def setup_class(self):"""开始⽅法"""print('类 -> 开始')def teardown_class(self):"""结束⽅法"""print('类 -> 结束')def test_method1(self):"""示例测试⽅法"""print('测试⽅法1')def test_method2(self):"""示例测试⽅法"""print('测试⽅法2')if __name__ == '__main__':pytest.main(['-s', 'hm06_pytest_basic_06.py'])

3.8 特殊⽅法: 函数级别和类级别同时使⽤

"""
特殊⽅法: 函数级别和类级别同时使⽤
"""
import pytestclass TestDemo(object):"""示例测试类"""# 执⾏顺序: 1 -> 3 -> 5 -> 4 -> 3-> 6 -> 4 -> 2def setup_class(self): # 1print('类级别 ->> 开始')def teardown_class(self): # 2print('类级别 ->> 结束')def setup(self): # 3print('函数级别 -> 开始')def teardown(self): # 4print('函数级别 -> 结束')def test_method1(self): # 5"""测试⽅法1"""print('测试⽅法1')def test_method2(self): # 6"""测试⽅法2"""print('测试⽅法2')if __name__ == '__main__':pytest.main(['-s', 'hm07_pytest_basic_07.py'])

4. pytest 配置⽂件

  • 说明: 使⽤配置⽂件后可以快速的使⽤配置的项来选择执⾏哪些测试模块
  • 注意:
      1. 在 Windows 系统下, pytest 配置⽂件中, 不允许写注释信息
      1. ⼀个⼯程内只需要⼀个 pytest 配置⽂件, 并且需要保证⽂件名正确
      1. ⼀般情况, 只需要将 pytest 配置⽂件, 置于⼯程根⽬录下
      1. 配置有 pytest 配置⽂件的⼯程, 只需要打开命令⾏, 输⼊ pytest 指令, 即可执⾏测试

4.1 选项字段获取

在这里插入图片描述

4.2 编写步骤

在这里插入图片描述

4.3 使⽤步骤

  • 说明: 打开命令⾏ -> 输⼊ pytest -> 执⾏即可

4.4 默认设置

  • 说明: 测试⽤例⽂件名/测试类名/测试⽅法名均为 Test/test 开头

[pytest]
testpaths = ./case
addopts = -s
python_files = test*.py
python_classes = Test*
python_functions = test*

4.5 ⾃定义规则

  • 说明: 测试⽤例⽂件名/测试类名/测试⽅法名, 需要根据具体项⽬进⾏设置, 以下以 Hm/hm为例

[pytest]
testpaths = ./case
addopts = -s
python_files = hm*.py
python_classes = Hm*
python_functions = hm*

4.6 扩展: 指定单个⽂件/类/⽅法执⾏

[pytest]
testpaths = ./case
addopts = -s
python_files = demo_case1.py
python_classes = DemoDemo1
python_functions = demo_method1

二、 pytest 常⽤插件

1. HTML 报告插件

1.1 安装步骤

  • ⽅式1 -> 安装: pip install pytest-html
  • ⽅式2 -> PyCharm 中安装

在这里插入图片描述

1.2 使⽤步骤

    1. 在 pytest 配置⽂件中, 增加命令选项
    • 选项: --html=./报告路径/报告⽂件名.html --self-contained-html
    • 说明: --self-contained-html 将 CSS ⽂件内嵌到报告⽂件中
    1. 执⾏ pytest 指令, 运⾏测试即可
  • 添加命令选项执⾏
    在这里插入图片描述

  • 查看⽣成的报告内容
    在这里插入图片描述

2. 控制⽅法执⾏顺序插件

2.1 安装步骤

  • ⽅式1 -> 安装: pip install pytest-ordering
  • ⽅式2 -> PyCharm 中安装

在这里插入图片描述

2.2 使⽤步骤

  • 说明: 直接在测试类或测试⽅法上⽅添加 @pytest.mark.run(order=序号)
"""
pytest 控制⽅法执⾏顺序插件
"""
import pytest@pytest.mark.run(order=2)
class TestDemo(object):"""示例测试类"""# 语法: @pytest.mark.run(order=序号)# 注意: run(order=序号) 没有代码提示, 需要⼿写!# @pytest.mark.run(order=-3)def test_method1(self):"""测试⽅法1"""print('测试⽅法1')# @pytest.mark.run(order=1)def test_method2(self):"""测试⽅法2"""print('测试⽅法2')# @pytest.mark.run(order=2)def test_method3(self):"""测试⽅法3"""print('测试⽅法3')# 扩展: 序号⽀持正数和负数, 以及正负混合# 1. 纯正数: 数越⼩, 优先级越⾼[掌握]# 2. 纯负数: 数越⼩, 优先级越⾼[了解]# 3. 正负混合: 正数先按照顺序执⾏, 负数最后执⾏[了解]# 注意: 控制⽅法执⾏顺序对测试类同样有效!
@pytest.mark.run(order=1)
class TestDemo2(object):"""测试类2"""def test_method(self):print('测试类2 -> 测试⽅法')

3. 失败重试插件

3.1 安装步骤

  • ⽅式1 -> 安装: pip install pytest-rerunfailures
  • ⽅式2 -> PyCharm 中安装

在这里插入图片描述

3.2 使⽤步骤

    1. 在 pytest 配置⽂件中, 增加命令选项
    • 选项: --reruns 次数
    1. 执⾏ pytest 指令, 运⾏测试即可
      在这里插入图片描述

三、pytest ⾼级功能

1. 跳过操作

  • 说明: 对于完成的代码或版本不对应的代码, 可以设置跳过使之不参与测试执⾏
"""
跳过功能
"""
import pytestversion = 25 # 模拟软件版本号变量class TestDemo1(object):"""示例测试类"""def test_method1(self):"""测试⽅法"""print('测试⽅法1')# 语法: @pytest.mark.skipif(符合的条件, reason='跳过的原因')# 说明: 如果满⾜条件, 以下⽅法或测试类执⾏跳过, 不执⾏!# 注意: reason= 不能省略, 否则报错!# @pytest.mark.skipif(version >= 25, 'xxx') # 错误样例@pytest.mark.skipif(version >= 25, reason='当前版本不执⾏') # 
正确样例def test_method2(self):"""测试⽅法"""print('测试⽅法2')# 说明: 同样可以跳过测试类
@pytest.mark.skipif(version >= 25, reason='当前版本不执⾏')
class TestDemo2(object):"""示例测试类2"""def test_method(self):print('测试类2 -> 测试⽅法')if __name__ == '__main__':pytest.main(['-s', 'hm10_pytest_skip.py'])

2. 参数化操作

  • 说明: 与 UnitTest 框架不同, pytest 框架⾃带参数化功能, 调⽤对应⽅法并传⼊数据, 即可完成参数化实现

2.1 单个参数

"""
pytest 参数化功能: 单个参数
"""
import pytestclass TestDemo(object):"""示例测试类"""# 语法: @pytest.mark.parametrize('参数变量', ['数值1', '数值
2', ...])@pytest.mark.parametrize('name', ['⼩明', '⼩刚', '⼩红'])def test_method(self, name):"""测试⽅法"""print('获取的名字是:', name)if __name__ == '__main__':pytest.main(['-s', 'hm11_pytest_para1.py'])

2.2 多个参数

"""
pytest 参数化: 多个参数
"""
import pytestclass TestDemo(object):"""示例测试类"""# 语法: @pytest.mark.parametrize('参数1, 参数n', [(数据1-1, 数1-2), (数据2-1, 数据2-2), ...])# 注意:# 1. 多个参数必须置于同⼀个字符串内!# 2. 数据格式必须是: [(), ()] 或者 [[], []]# 扩展: 另⼀种写法# @pytest.mark.parametrize(('name', 'pwd'), [('admin', 
123456), ('test', 654321), ('xxx', 'yyy')])@pytest.mark.parametrize('name, pwd', [('admin', 123456), 
('test', 654321), ('xxx', 'yyy')])def test_method(self, name, pwd):"""测试⽅法"""print('账号:{} 密码:{}'.format(name, pwd))if __name__ == '__main__':pytest.main(['-s', 'hm12_pytest_para2.py'])

3. 扩展: 断⾔⽅法的使⽤

  • 说明: 与 UnitTest 框架不同的是, pytest 框架使⽤ Python ⾃带的断⾔⽅法实现断⾔操作的

3.1 Python ⾃带的断⾔⽅法

# 语法: assert 表达式
# 说明: 断⾔后接的表达式的结果为 Ture(断⾔通过), 为 False(断⾔失败)
# 预期相等:
assert 1 == 1
# 预期包含:
assert 'admin' in '欢迎 admin 归来!'

3.2 pytest 框架中使⽤断⾔

"""
pytest 断⾔
"""
import pytestdef add_func(num1, num2):"""加法函数"""return num1 + num2class TestDemo(object):"""示例测试类"""def test_method(self):"""加法测试⽅法"""# 调⽤被测函数result = add_func(1, 2)# 断⾔判断结果assert 4 == resultif __name__ == '__main__':pytest.main(['-s', 'hm14_pytest_assert.py'])

四、PO 设计模式

1. v0 版本

  • 特点: 对于同⼀个待测模块, 对应的测试代码步骤完全⼀致, 只有测试数据存在差异, 因此对于反复出现的相同逻辑的测试代码, 需要考虑通过封装的思路对⻬进⾏整理, 以提⾼测试脚本的编写效率.
  • 注意: 通过直接定位元素并操作元素的⽅式实现的⾃动化脚本, 已经算是 UI ⾃动化的实现形式了!

2. 账户不存在脚本

"""
账号不存在测试⽤例
"""
from time import sleep
from selenium import webdriverdriver = webdriver.Chrome()
driver.get('http://127.0.0.1/')
driver.maximize_window() # 窗⼝最⼤化
driver.implicitly_wait(10) # 隐式等待# 1. 点击⾸⻚的‘登录’链接,进⼊登录⻚⾯
driver.find_element_by_link_text('登录').click()# 2. 输⼊⼀个不存在的⽤户名
driver.find_element_by_id('username').send_keys('13811110001')
# 3. 输⼊密码
driver.find_element_by_id('password').send_keys('123456')
# 4. 输⼊验证码
driver.find_element_by_id('verify_code').send_keys('8888')
# 5. 点击登录按钮
driver.find_element_by_name('sbtbutton').click()# 6. 获取错误提示信息
# 获取元素⽂本值: 元素对象.text
msg = driver.find_element_by_class_name('layui-layercontent').text
print('错误信息为:',
msg)sleep(3)
driver.quit()

3. 密码错误脚本

"""
密码错误测试⽤例
"""
from time import sleep
from selenium import webdriverdriver = webdriver.Chrome()
driver.get('http://127.0.0.1/')
driver.maximize_window() # 窗⼝最⼤化
driver.implicitly_wait(10) # 隐式等待# 1. 点击⾸⻚的‘登录’链接,进⼊登录⻚⾯
driver.find_element_by_link_text('登录').click()# 2. 输⼊⽤户名
driver.find_element_by_id('username').send_keys('13800001111')
# 3. 输⼊错误密码
driver.find_element_by_id('password').send_keys('error')
# 4. 输⼊验证码
driver.find_element_by_id('verify_code').send_keys('8888')
# 5. 点击登录按钮
driver.find_element_by_name('sbtbutton').click()# 6. 获取错误提示信息
# 获取元素⽂本值: 元素对象.text
msg = driver.find_element_by_class_name('layui-layercontent').text
print('错误信息为:',
msg)sleep(3)
driver.quit()

相关文章:

五、UI自动化测试05--PyTest框架

目录 一、PyTest 框架2. 特点2. 安装步骤3. 基本使⽤3.1 测试函数形式3.2 执⾏⽅式3.3 测试类形式3.4 执⾏⽅式3.5 另⼀种执⾏⽅式: 主函数执⾏3.6 特殊⽅法: 函数级别3.7 特殊⽅法: 类级别3.8 特殊⽅法: 函数级别和类级别同时使⽤ 4. pytest 配置⽂件4.1 选项字段获取4.2 编写…...

51LA使用方法与悟空统计,网站数据分析的双重选择

在网站运营与数据分析领域,51LA作为国内较早的流量统计工具,曾为许多用户提供基础的访问数据监测服务。然而,随着技术的发展和用户需求的升级,越来越多的企业开始寻求功能更全面、体验更优的统计工具。小编今天将给大家介绍一款更…...

MongoDB的下载安装与启动

MongoDB的下载安装与启动, 一、MongoDB下载安装 1. 官网下载 打开官网:https://www.mongodb.com/try/download/community选择: 版本(Version):选最新版或者根据需要选旧版。平台(OS&#xff0…...

解决ktransformers v0.3 docker镜像中 operator torchvision::nms does not exist 问题

问题背景 更新ktransformers docker镜像到v0.3版本后(之前为v0.2.4post1),使用更新前启动命令无法正确启动服务,提示以下错误: Traceback (most recent call last):File "/workspace/ktransformers/ktransforme…...

MySQL事务隔离级别的实现原理MVCC

一、什么是MVCC? MVCC(Multi-Version Concurrency Control),即多版本并发控制,是并发读写场景下,数据库层面提供的一种解决方案。 数据库的并发场景有以下三种: 读读 当多个事务同时进行读取操作时,它们之间不存在…...

EtherCAT 分布式时钟(DC)补偿技术解析

一、技术定义 EtherCAT 分布式时钟(Distributed Clock, DC)是一种基于硬件的高精度同步机制,旨在解决工业自动化系统中多设备协同控制的时间同步问题。其核心功能包括: 初始偏移补偿:消除从站本地时钟与主站系统时间的初始偏差,确保所有设备在启动阶段的时间基准一致。…...

7.进程概念(三)

一、进程优先级 是什么? 进程得到CPU资源的先后顺序。 为什么要有进程优先级? 目标资源稀缺,导致要通过优先级确定谁先谁后。 如何比较和分配? 进程优先级也是一种数字,int,task_struct 值越低,…...

MATLAB小试牛刀系列(2)

问题描述 捷运公司在下一年度 1 - 4 月的 4 个月内拟租用仓库堆放物资。已知各月所需仓库面积列于表 1.1。仓库租借费用随合同期而定,期限越长,折扣越大,具体数字见表 1.1。租借合同每月初都可办理,每份合同具体规定租用面积和期…...

一个SciPy图像处理案例的全过程

本文利用SciPy进行图像处理,并记录图像处理的全过程,处理过程包含高斯模糊、腐蚀等操作。 代码 import matplotlib.pyplot as plt import numpy as np from scipy import ndimage# 设置图像的大小为 128x128,即 128x128 的逻辑像素 l 128 …...

修改输入框选择框颜色

项目场景: 提示:这里简述项目相关背景: 有时候需要改写element原来输入框/选择框的颜色 问题描述 提示:这里描述项目中遇到的问题: 输入框的话需要hover时边框颜色修改,选择值的时候边框颜色修改以及选…...

rust 全栈应用框架dioxus

逛github时发现了一个号称全栈应用框架dioxus,适用于web / desktop / mobile。零配置、集成了热启动和基于信号的状态管理。是由rust编写的,所以也就不受平台限制。 既然说的这么好,那就来试试构建一下三种平台的应用,构建的应用编译成web 、…...

电子电器框架 --- 数据连接性和云集成在增强电气/电子架构方面的作用

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...

Nvidia 可能会发布具有增强内存配置的 RTX 5080 和 5070 Super

距离英伟达正式发布RTX 50系列显卡仅过去数月,有关"Super"系列升级版显卡的传闻已甚嚣尘上。据硬件爆料平台Chiphell论坛(该消息源可靠性参差不齐)用户透露,英伟达可能正在研发配备24GB显存的RTX 5080 Super和16GB显存的…...

预留库存的实现

1. 实体类 import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data;import java.sql.Timestamp;Data TableName("products") public class Product {private Long id;private String name;private int stock; }Data TableName("shopping_c…...

[逆向工程]如何理解小端序?逆向工程中的字节序陷阱与实战解析

[逆向工程]如何理解小端序?逆向工程中的字节序陷阱与实战解析 关键词:逆向工程、小端序、字节序、二进制分析、数据解析 引言:为什么字节序是逆向工程师的必修课? 在逆向工程中,分析二进制数据是最基础的任务之一。…...

【Python笔记 05】 if判断、比较运算符与逻辑运算符

一、if判断 1、基本格式 if 要判断的条件: #条件成立为true条件成立的时候要做的事情注:注意判断条件后面的冒号,以及条件成立要做的事情此行代码的缩进,最好是软件自动缩进。 2、练习题 用户在控制台输入成绩,…...

AI应用实战:Excel表的操作工具

有个小需求是这样的,需要在一份数据表里,将1000多个客户的月报数据分别单独截图存档,有客户需要的时候就要发给客户,截图下来的也是以客户为命名,这样查找时也比较容易匹配上。 在没有写工具之前,以往财务…...

P1903 [国家集训队] 数颜色 / 维护队列 Solution

Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1​,a2​,⋯,an​),有 m m m 个操作分两种: modify ⁡ ( i , x ) \operatorname{modify}(i,x) modify(i,x):执行 a i ← x a_i\gets x ai​←x. query ⁡ ( …...

Transformer数学推导——Q33 分析正弦编码的频率衰减对长程依赖建模的影响

该问题归类到Transformer架构问题集——位置编码——绝对位置编码。请参考LLM数学推导——Transformer架构问题集。 1. 背景知识:Transformer 与长程依赖 在自然语言处理和其他序列数据处理任务中,Transformer 模型凭借其强大的性能脱颖而出。与传统的…...

微服务架构下的熔断与降级:原理、实践与主流框架深度解析

微服务架构下的熔断与降级:原理、实践与主流框架深度解析 在现代分布式系统中,熔断 (Circuit Breaker) 和 降级 (Degrade) 是保障系统弹性与高可用性的核心机制。本文将系统解析两者的原理、区别与协同方式,并结合主流框架 (Resilience4j、S…...

大脑、机器人与贝叶斯信念及AI推理

在机器不再局限于重复性任务的世界里,机器人技术已经大胆地迈入了感知、学习和决策的领域。这篇文章探讨了智能机器人系统是如何构建的——从理解它们嘈杂的传感器和不确定的环境,到使它们能够做出明智的选择并随着时间的推移调整自己的行为。 AI推理 …...

stm32wb55rg (4) 启用usart串口

code repo: 访问gitee 上节课成功点亮了LED,这次来把usart 用起来,毕竟有交互才是系统。 技术准备 首先查看手册,发现mcu有1个usart和1个 lpuart。 usart 的使用需要两个pin,一个接收一个发送。继续查看pin and ball definition…...

LSTM预测模型

LSTM预测模型 时间序列预测通常需要捕获时间依赖性,而 L S T M LSTM LSTM(长短时记忆网络)是处理时间序列数据的经典深度学习方法之一。结合长短时注意力机制( L o n g − S h o r t A t t e n t i o n M e c h a n i s m Long-S…...

[计算机网络]物理层

文章目录 物理层的概述与功能传输介质双绞线:分类:应用领域: 同轴电缆:分类: 光纤:分类: 无线传输介质:无线电波微波:红外线:激光: 物理层设备中继器:放大器:集线器(Hub)&#xff1a…...

Day16(贪心算法)——LeetCode45.跳跃游戏II763.划分字母区间

1 LeetCode45.跳跃游戏II 1.1 题目描述 与跳跃游戏类似,跳跃游戏II给定长为n的从0开始索引的整数数组nums,nums[i]是你在i处能向右跳跃的最大步数,求到达数组最后一个索引处需要跳跃的最少次数。   一个示例:nums[2,3,1,1,4]&a…...

【MySQL】表的内外连接

表的内外连接 一. 内连接二. 外连接1. 左外连接2. 右外连接 三. 简单案例四. SQL 实战 表的连接分为内连接和外连接 一. 内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,之前博客中的查询都是内连接,也是在开发过程中使用的最多…...

Prometheus使用Recoding Rules优化性能

通过PromQL可以实时对Prometheus中采集到的样本数据进行查询,聚合以及其它各种运算操作。而在某些PromQL较为复杂且计算量较大时,直接使用PromQL可能会导致Prometheus响应超时的情况。这时需要一种能够类似于后台批处理的机制能够在后台完成这些复杂运算…...

Linux 怎么安装 Oracle Java 8

在 Linux 系统上安装 Oracle Java 8 的步骤如下: 1. 下载 Oracle Java 8 访问 Oracle 官方网站的 Java 下载页面: 下载链接:Oracle Java 8 下载页面选择适合 Linux x64 的安装包(通常是 .tar.gz 格式)。需要登录 Or…...

项目三 - 任务2:创建笔记本电脑类(一爹多叔)

在本次实战中,我们通过Java的单根继承和多接口实现特性,设计了一个笔记本电脑类。首先创建了Computer抽象类,提供计算的抽象方法,模拟电脑的基本功能。接着定义了NetCard和USB两个接口,分别包含连接网络和USB设备的抽象…...

基于蓝耘MaaS平台进行api调用创建本地智能ai

关于MaaS平台 MaaS 平台即 “模型即服务”(Model as a Service)平台,是一种依托云计算的人工智能服务模式。 模型即服务(MaaS)平台面向企业开发者、创业者及非技术背景用户,提供开箱即用的热门AI模型服务&…...

【Luogu】动态规划七

P1566 加等式 - 洛谷 思路: 其实这道题就是一个纸老虎,说这么多,其实最后就是问所有 a[i] 的组成方法之和有多少种 那么显然的一个dp就是 dp[j] dp[j - a[i]] 然后这题就结束了,就是这么简单,最后记得减去 n&…...

Kotlin 常见问题

以下从基础、中级、高级三个难度等级为你提供 Kotlin 面试题及参考答案: 基础难度 1. Kotlin 中 val 和 var 的区别是什么? 答案要点:val 用于声明不可变变量,类似于 Java 中的 final 变量,一旦赋值后就不能再重新赋…...

应急演练考试排查-DC01

DC01:攻击者最早通过哪种方式获取了机器权限?( ) A、远程登录(RDP登录) B、主机系统漏洞 C、软件服务漏洞 D、钓鱼 E、物理访问 F、内网横向手段 G、低权限账户提权 H、未获取到主机权限 DC01&…...

Spring MVC 中解决中文乱码问题

在 Spring MVC 中解决中文乱码问题,需要从 请求参数编码 和 响应内容编码 两方面入手。以下是完整的解决方案: 一、解决请求参数中文乱码 1. POST 请求编码(表单提交) 配置 CharacterEncodingFilter 在 web.xml 中添加 Spring 提…...

排序算法详解笔记(二)

归并排序 #include <vector> #include <iostream> #include <algorithm> // For std::inplace_merge in optimization// Helper function to merge two sorted subarrays void merge(std::vector<int>& arr, int left, int mid, int right) {int …...

Spark GraphX 机器学习:图计算

引言 在数字化时代&#xff0c;图数据&#xff08;Graph Data&#xff09;的价值日益凸显&#xff1a;社交网络中的用户关系、电商平台的商品关联、知识图谱的实体链接……这些以“节点&#xff08;Vertex&#xff09;”和“边&#xff08;Edge&#xff09;”为核心的非结构化…...

claude 3.7,极为均衡的“全能型战士”大模型,国内直接使用

文章目录 零、前言一、操作指南操作指导 二、小球弹跳三、生成 Mandelbrot set 集四、文本总结能力五、智力推理题六、感受 零、前言 Claude 3.7 Sonnet&#xff08;下面简称 Claude 3.7&#xff09;由 Anthropic 发布&#xff0c;“全球首个混合推理模型”的 AI 大模型&#x…...

机器学习-入门-决策树(1)

机器学习-入门-决策树(1) 4.1决策树的基本流程 决策树基于“树”结构进行决策 每个“内部结点”对应于某个属性上的“测试”(test)每个分支对应于该测试的一种可能结果&#xff08;即该属性的某个取值&#xff09;每个“叶结点”对应于一个“预测结果” 学习过程&#xff1…...

机器学习实操 第一部分 机器学习基础 第6章 决策树

机器学习实操 第一部分 机器学习基础 第6章 决策树 内容概要 第6章深入介绍了决策树&#xff0c;这是一种功能强大的机器学习算法&#xff0c;能够处理分类、回归以及多输出任务。决策树通过递归地分割数据集来构建模型&#xff0c;具有易于解释和可视化的特点。本章详细讲解…...

Python实例题:ebay在线拍卖数据分析

目录 Python实例题 题目 实现思路 代码实现 代码解释 read_auction_data 函数&#xff1a; clean_auction_data 函数&#xff1a; exploratory_analysis 函数&#xff1a; visualize_auction_data 函数&#xff1a; 主程序&#xff1a; 运行思路 注意事项 Python实…...

算法题(137):丢手绢

审题&#xff1a; 本题需要我们找到距离最远的两个孩子之间的距离&#xff0c;并打印 思路&#xff1a; 方法一&#xff1a;暴力枚举 我们可以找到每个孩子的距离其他孩子的最远距离&#xff0c;然后维护一个maxdis变量得到所有孩子距离其他孩子最远距离的最大值。 而距离分为顺…...

2025年具身智能科技研报

引言 本报告系统梳理了2025年具身智能领域的最新进展&#xff0c;基于国内外权威新闻源与行业研究报告&#xff0c;通过数据可视化与深度分析相结合的方式&#xff0c;呈现该领域多维发展态势。从技术突破层面看&#xff0c;多模态大模型的突破性进展为具身智能注入新动能&…...

TCL科技2025一季度归母净利润10.1亿,半导体显示业务业绩创新高

4月29日&#xff0c;TCL科技&#xff08;000100&#xff09;披露2024年年报及2025年一季报。2024全年&#xff0c;TCL科技实现营业收入1648亿元&#xff0c;归母净利润15.6亿元&#xff1b;实现经营现金流净额295亿元&#xff0c;同比增长16.6%。2025年一季度&#xff0c;TCL科…...

阿里云 CentOS YUM 源配置指南

阿里云 CentOS YUM 源配置指南 在使用 CentOS 7 时&#xff0c;由于 CentOS 官方源停止维护等原因&#xff0c;yum install 命令可能会报错 “Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64”。以下是通过更换阿里云源解决该问题的详细步骤。 一、备份原有配…...

阿里云 OpenManus 实战:高效AI协作体系

阿里云 OpenManus 实战&#xff1a;高效AI协作体系 写在最前面初体验&#xff1a;快速部署&#xff0c;开箱即用 真实案例分享&#xff1a;从单体开发到智能良好提示词过程展示第一步&#xff1a;为亚马逊美国站生成商品描述第二步&#xff1a;为eBay全球站生成商品描述结果分析…...

阿里云服务迁移实战: 05-OSS迁移

概述 Bucket 复制分为两种&#xff0c;同区域复制和跨区域复制 同账号复制比较简单&#xff0c;根据提示填写信息即可&#xff0c;本文主要介绍跨账号复制。 同区域复制 授权角色选择 “AliyunOSSRole”, 创建方法见 “跨区域复制”。然后点击确定即可。 跨区域复制 假设我…...

Vue高级特性实战:自定义指令、插槽与路由全解析

一、自定义指令 1.如何自定义指令 ⑴.全局注册语法 通过 Vue.directive 方法注册&#xff0c;语法格式为&#xff1a; Vue.directive(指令名, {// 钩子函数&#xff0c;元素插入父节点时触发&#xff08;仅保证父节点存在&#xff0c;不一定已插入文档&#xff09;inserted(…...

Python入门:流程控制练习

本文将介绍Python中流程控制的基础知识&#xff0c;包括条件判断和循环结构&#xff0c;并提供多个实用示例帮助初学者快速掌握这些概念。所有代码都使用基础语法&#xff0c;非常适合Python新手学习。 1. 简单条件判断&#xff1a; 编写一个程序&#xff0c;要求用户输入一个…...

Unity PBR基础知识

PBR原理 基于物理的渲染&#xff08;Physically Based Rendering&#xff0c;PBR&#xff09;是指使用基于物理原理和微平面理论建模的着色/光照模型&#xff0c;以及使用从现实中测量的表面参数来准确表示真实世界材质的渲染理念。 PBR基础理念 微平面理论&#xff08;Micr…...

智慧交警系统架构设计方案

一、引言&#xff1a;智慧交警为何成为城市治理的刚需&#xff1f; 当前&#xff0c;中国城市化进程加速&#xff0c;汽车保有量激增&#xff0c;交通拥堵、事故频发、执法效率不足等问题日益突出。传统交通管理依赖人力巡查与分散系统&#xff0c;已难以应对复杂需求。智慧交…...