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

【测试】Pytest

建议关注、收藏!

目录

  • 功能
  • pytest

自动化测试工具。

功能

  1. 单元测试:用于验证代码的最小功能单元(如函数、方法)的正确性。
    简单的语法:不需要继承特定类或使用复杂的结构。断言语句简化。
    自动发现测试:Pytest 会自动查找以 test_ 开头的函数或文件。
def add(a, b):return a + bdef test_add():assert add(1, 2) == 3def test_subtract():result = 10 - 5assert result == 5
pytest #运行
  1. 参数化测试
    @pytest.mark.parametrize 可以在一个测试函数中测试多组输入和输出
@pytest.mark.parametrize("a, b, expected", [(1, 2, 3),(2, 3, 5),(10, 5, 15)
])
def test_add(a, b, expected):assert add(a, b) == expected
  1. 功能测试、集成测试、回归测试
  2. 插件
    pytest-django:测试 Django 项目。
    pytest-flask:测试 Flask 应用程序。
    pytest-cov:生成测试覆盖率报告。
    pytest-xdist:支持并行运行测试,提高测试效率。
  3. 测试用例分组和标记
    @pytest.mark给测试用例添加标记,以便运行特定分组的测试。
@pytest.mark.slow
def test_slow_function():# 测试代码pass
pytest -m slow
  1. 灵活的前置与后置处理(Fixture)
    用于在测试前后进行环境的初始化与清理。
import pytest@pytest.fixture
def sample_data():return {"key": "value"}def test_with_fixture(sample_data):assert sample_data["key"] == "value"
  1. 错误重试与失败处理
    使用插件(如 pytest-rerunfailures)可以重试失败的测试用例。
    生成 HTML 测试报告(使用 pytest-html 插件)。
pytest --html=report.html
  1. 集成 CI/CD
    Pytest 易于与持续集成工具(如 Jenkins、GitLab CI/CD、GitHub Actions)集成,自动化测试流程。

pytest

支持简单单元测试及复杂功能测试
结合requests实现接口测试
结合selenium硒,appium实现自动化功能测试
结合allure继承到jenkins实现持续集成
支持315+种插件
报告、多线程、顺序控制
兼容python的unittest
定制化插件开发

#text.py
def inc(x):return x+1
def test_answer():assert inc(3)==5pip install pytest #安装到了base环境
#command里输入
pytest main.py

在这里插入图片描述
命名规则注意:文件名必须得是 test_ 开头 或者 _test 结尾;类要用Test_开头,方法用test_开头,这样行号会出现绿色运行箭头
测试类中不可以添加__init__构造函数,如果添加则不认为是测试类,所有测试方法都识别不到了

pycharm->setting->tools->python intergrated tools->default test runner:pytest

  • 断言:执行到这个位置,对应的断言应为真。当不为真时,程序终止执行并给出错误信息。
def test_x(self):
#测试步骤
#断言 实际结果对比预期结果assert ActualResult==ExpectedResultclass Testx:def setup(self):#资源准备passdef teardown(self):#资源销毁passdef test_x(self):#测试步骤#断言 实际结果对比预期结果assert ActualResult==ExpectedResult#断言用法
assert <表达式>
assert <表达式>,<描述>def test_a():assert 'abc' in 'abcd'
import sys
def test_b():assert ('linux' in sys.platform),"该代码只能在linux下运行"
  • setup/teardown
    相当于就是某个事件开始前的资源准备->setup;事件完成后的资源销毁->teardown;
    以下是各个层级的setup/teardown:
    在这里插入图片描述
#需要哪个层级的触发 就在哪个地方放哪个def setup_module():#全局的最多只会执行一次print("资源准备:setup module")
#setup teardown不需要成对出现,根据需求选择
def teardown_module():print("资源销毁:teardown module")
  • 参数化
    使定量信息变量化。可以对其进行不同的赋值。
    e.g. 对搜索框进行输入测试。这个输入可以设成一个变量,每次只需要调整搜索的输入。
    注意:
  1. 参数化的名字要与方法中的参数名一一对应
  2. 如果传递多个参数,要放在列表中,作为嵌套列表/元组
  3. ids的参数个数要==传递的参数个数
#单参数
import pytest
search_list=['appium','selenium','pytest']
@pytest.mark.parametrize('name',search_list)
def test_search(name):#这个name要和上述的name字段相等,对应上assert name in search_list
#多参数
params=[('3+5',8),('2+5',7),('6+5',12)]
@pytest.mark.parametrize("test_input,expected",params,ids=['p1','p2','p3'])
#用例重命名 ids
#ids是对params里面的每个参数进行重命名,可以用这个名字分别代表它们
def test_mark_more(test_input,expected):assert eval(test_input)==expected#笛卡尔积 在测试中叫全量测试 几乎不实际 过于浪费时间
#在排查不确定的问题时可以用
@pytest.mark.parametrize('wd',['appium','selenium','pytest'])
@pytest.mark.parametrize('code',['utf-8','gbk','gb2312'])
def test_dkej(wd,code):print(f"wd:{wd},code:{code}")
'''
print(f'.....')
注意:f后面一定要紧跟字符串,不能隔有空格,否则会报错
print语句中加入f就可以起到和format函数类似的作用。
'''
  • 标记测试用例
    只执行需要的一部分测试用例,可以把一个web项目划分成多个模块,制定模块名称执行。
    只需要在测试用例方法上加@pytest.mark.标签名
    -m 执行自定义标记的相关用例
pytest -s test_mark_zi_09.py -m=webtest #加不加=都可以
pytest -s test_mark_zi_09.py -m apptest
pytest -s test_mark_zi_09.py -m "not ios" #这个是指测试所有标签中不包括ios的用例
pytest -s test_mark_zi_09.py -vs -m apptest #-vs指打印详细日志
pytest -s test_mark_zi_09.py -m "str" #执行标签名为str的所有用例
#-k 可以进行部分匹配 只要标签名里包含这个 就执行
@pytest.mark.int #装饰器 不改变原有代码+增加相关功能 标记新标签"int"
def test_double_int():print('test_double_int')assert 2==double(1)#为了防止报出warning,虽然不影响执行
#新建pytest.ini
#这个文件中放入:
[pytest]
markers= str  #多个参数不要写在同一行,要换行且不顶格bignumfloatintzerominus
#顶格的换行参数会被认为是key 地位等同于markers#这样之后 pytest就可以识别出 def[test_double_标签名]这里面的标签名
#e.g. test_double_int 中的'int'/....它们注册成为了标签
  • 跳过及预期失败
    这是pytest的内置标签,可以处理特殊的测试用例
    skip:始终跳过
    skipif:如果…跳过
    xfail:如果…产生一个“期望失败”输出

使用场景:

  1. 调试时不想运行这个用例
  2. 标记无法在某些平台上运行的测试功能
  3. 在某些版本中执行,某些版本则跳过它
    e.g. 当前外部资源不可用时跳过
    如果测试数据是从数据库中取到的;连接数据库的功能,如果返回结果未成功则跳过;开发人员代码未写完;
#解决1:添加装饰器
@pytest.mark.skip 
@pytest.mark.skipif
#解决2:代码中添加跳过代码
pytest.skip(reason='代码未写完')#1.这些代码直接放在需要跳过的函数def的上一行。
#2.放在函数内部进行条件判断使用
def test_function():if not check_login():pytest.skip("unsupported configuration")print('end')import pytest
import sys
print(sys.platform)
@pytest.mark.skipif(sys.platform=='darwin',reason='does not run on mac')#mac在这里其实叫darwin
def test_case1():print('enter 1')assert 1==2@pytest.mark.skipif(sys.platform=='win',reason='does not run on windows')
def test_case2():print('enter 2')assert 1==1@pytest.mark.xfail #起到提示的作用,bug改完之后去掉
def test_aaa():print("test_xfail1 方法执行")assert 2==2 #打印为XPASS#assert 2==3 #打印为XFAILxfail=pytest.mark.xfail@xfail(reason="bug 404")
def test_sample404():assert 0@pytest.mark.xfail #起到提示的作用,bug改完之后去掉
def test_aaa():print("start")pytest.xfail(reason="have not done this")#这行之后的函数作用域将不会执行print("processing")
  • 运行用例
    运行某个/多个 用例包/用例模块/用例类/用例方法
  1. IDE的界面操作
    多个文件用command选中,右键->run
  2. 代码方式运行【选择这种,不容易出问题】
pytest -v #直接执行当前目录下的所有测试文件
pytest filename.py #test single file
pytest filename.py::ClassName #执行某个类
pytest filename.py::ClassName -v #打印显示具体执行了哪个用例
pytest filename.py::ClassName::test_demo1 -v #执行具体用例
pytest filename.py::test_demo1 -v#执行不属于类的用例#命令行参数 命令后面加上的...
-help
-x #用例error/fail 则立刻停止执行
'''
冒烟测试:不是全功能的测试,只是大概的测一下,只需要主要核心功能没问题。
'''--maxfail==num #用例达到多少停止
-m #标记用例 运行这一类的用例-k #执行包含某个关键字的测试用例
pytest test.py -v -k "str" #运行命名包含"str"的用例
#并告知deselected的个数
pytest test.py -v -k "not str" #运行命名不包含"str"的用例--collect-only #只收集统计测试用例但不运行 (测试平台,pytest自动导入功能)
--lf #(--last-failed) #只重新运行故障
--ff #(--failed-first)#先运行故障后运行其余的测试
-v #输出更加详细的运行信息
-s #输出调试信息 即print输出的信息
-vs #它俩的组合版
  • 运行结果分析
    常用:fail/error/pass
    特殊:warning/deselect
  1. error:代码写错、某种不正确的断言
  2. fail 样例不通过
  3. warning只是警告,不影响运行
  4. deselect没有被选中的用例
  • 代码执行pytest
    方式一:编写main函数,命令行中使用“python test_name.py ”
if __name__=='__main__':#运行当前目录下所有符合规则的用例,包括子目录里的pytest.main()#运行test_mark1.py::test_dkej模块中某一条用例pytest.main(['test_mark1.py::test_dkej','-vs'])#运行某个标签pytest.main(['test_mark1.py','-vs','-m','dkej'])
# 什么时候这里的__name__!='__main__',当该文件被其他文件导入时

方法二:不使用main,使用python -m pytest test_name.py
(用到jenkins持续集成)

  • 异常处理
    方法1:try…except
try:...
except (ValueError,ArithmeticError):...
except:...

方法2:
获取异常的细节(类型和信息),后面的代码不会继续执行

def test_raise():with pytest.raises((ZeroDivisionError,ValueError),match='must be 0 or None'):#如果有match匹配文字的需要,匹配后才能passraise ValueError("value must be 0 or None")#raise ZeroDivisionError("除数为0")
def test_raise1():with pytest.raises(ValueError) as exc_info:raise ValueError("value must be 42")assert exc_info.type is ValueErrorassert exc_info.value.args[0]=="value must be 42"
  • 数据驱动
    数据改变而驱动自动化测试进行。
    数据量小的测试用例使用代码参数化实现数据驱动。
    数据量大的测试用例使用一种结构化的文件(如yaml,json等)来对数据进行存储,在测试用例中读取这些数据。
    • 应用场景:app,web,接口自动化测试
  • 包含测试步骤的数据驱动、测试数据的数据驱动、配置的数据驱动
import pytest
import yaml #.yml是一种配置文件
class TestDemo:@pytest.mark.parametrize("env",yaml.safe_load(open("./env.yml")))#parametrize中如果传入的是dict类型,则只读取keydef test_demo(self,env):if "test" in env:print("this is test env")print(env)print(env["test"])#读取到ip 127.0.0.1 elif "dev" in env:print("this is develop env")#env.yaml
test:127.0.0.1 #这是字典格式#env.yaml
- #前面加一杠 转换成列表格式,里面的元素是{'test':'127.0.0.1 '}
test:127.0.0.1 
    • 读取excel文件
      第三方库:xlrd,xlwings,pandas,openpyxl
    • openpyxl
conda install openpyxl
pip install ...import openpyxl
book=openpyxl.load_workbook('path')#读取工作簿sheet=book.active#获取当前活跃的工作表#读取单元格的两种方式
cell_a1=sheet['A1']
cell_a3=sheet.cell(column=1,row=3)#读取多个连续的单元格
cells=sheet["A1":"C3"] #返回嵌套元组#获取单元格里的值
cell_a1.value
    • 读取csv文件
      cvs(comma-Separated Values) 以逗号分隔
      以纯文本形式储存
#读取数据
#采用内置函数
def get_csv():with open('demo.csv','r')as file:raw=csv.reader(file)for line in raw:print(line)values=[]for row in raw:values.append(line)return values #传入parametrize
    • 读取json文件
      json 是JS对象,javascript object notation
      json结构中对象是{“key”:value};数组是[value1,value2…]

json.loads() or json.load()
json.loads 从 JSON 字符串解析为 Python 对象。
json.load 从文件对象(如 .read() 的结果)解析 JSON 数据,输出字典dict。
data=json.loads(f.read())

#读取json
#内置函数open(),内置库json
#方法 json.loads() , json.dumps()def get_json():with open('demo.json','r')as f:data=json.loads(f.read())
#与 json.load(f) 相比,它多了一个中间步骤:
#先读取文件内容f.read()为字符串,再将字符串传递给 json.loads 进行解析。print(data) #type:dicts=json.dumps(data,ensure_ascii=False)#序列化 str->json#使得中文字符正常显示return list(data.values())
  • 工程目录结构
    在这里插入图片描述
#operation.py
def my_add(x,y):res=x+yreturn res# test_add.py
import openpyxl
import pytest
from mainfolder.func.operation import my_add
def get_excel():book=openpyxl.load_workbook('path')#读取工作簿sheet=book.activevalues=[]for row in sheet:line=[]for cell in row:line.append(cell.value)values.append(line)return valuesclass TestWithExcel:@pytest.mark.parametrize('x,y,expected',get_excel())def test_add(self,x,y,expected):assert my_add(int(x),int(y))==int(expected)

相关文章:

【测试】Pytest

建议关注、收藏&#xff01; 目录 功能pytest 自动化测试工具。 功能 单元测试&#xff1a;用于验证代码的最小功能单元&#xff08;如函数、方法&#xff09;的正确性。 简单的语法&#xff1a;不需要继承特定类或使用复杂的结构。断言语句简化。 自动发现测试&#xff1a;P…...

前端拖拽API你会用了么

大家好&#xff0c;今天跟大家分享一个小知识&#xff0c;前端页面的拖拽效果。这个效果可以说还是很常见的&#xff0c;比如说玩一些游戏的时候&#xff0c;将装备直接拖拽到一定区域就会丢掉或者装备上&#xff0c;再比如说一个列表&#xff0c;通过拖拽排序等。那么今天我们…...

NVIDIA推出全新紧凑型超算,加速生成式AI发展,价格大幅下降

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

第100+33步 ChatGPT学习:时间序列EMD-ARIMA-LSTM模型

基于Python 3.9版本演示 一、写在前面 上一节&#xff0c;我们学了经验模态分解&#xff08;Empirical Mode Decomposition&#xff0c;EMD&#xff09;。 如同结尾所说&#xff0c;“那么&#xff0c;做这些分解有什么作用呢&#xff1f;有大佬基于这些分解出来的序列分别作…...

Redis到底是单线程还是多线程?

Redis的线程模型是一个复杂的话题&#xff0c;它既包含了单线程的特性也引入了多线程的概念。理解这一点对于正确使用Redis和优化其性能至关重要。 1.单线程模型 在早期版本中&#xff0c;Redis被设计为单线程模型&#xff0c;这意味着所有客户端请求的处理&#xff08;包括网…...

Qt5与Qt6中的高DPI缩放属性解析

在Qt5中&#xff0c;高DPI缩放默认是禁用的。为了启用它&#xff0c;开发者需要设置Qt::AA_EnableHighDpiScaling应用程序属性。然而&#xff0c;在Qt6中&#xff0c;高DPI缩放默认是启用的&#xff0c;并且不能被禁用。这种变化使得开发者在处理高分辨率屏幕时更加方便&#x…...

[146 LRU缓存](https://leetcode.cn/problems/lru-cache/)

分析 维护一个双向链表保存缓存中的元素。 如果元素超过容量阈值&#xff0c;则删除最久未使用的元素。为了实现这个功能&#xff0c;将get(), put()方法获取的元素添加到链表首部。 为了在O(1)时间复杂度执行get()方法&#xff0c;再新建一个映射表&#xff0c;缓存key与链表…...

顺序表-递增有序表合并

两个递增有序表合并操作 题目&#xff1a; 将两个递增有序的顺序表 A 和 B 合并成一个新的递增有序顺序表 C。 思路&#xff1a; 使用三个索引 i, j, k 分别遍历顺序表 A, B 和合并后的顺序表 C。比较 A 和 B 当前索引指向的元素&#xff0c;将较小的元素放入 C 中&#xf…...

从开始实现扩散概率模型 PyTorch 实现

目录 一、说明 二、从头开始实施 三、线性噪声调度器 四、时间嵌入 五、下层DownBlock类块 六、中间midBlock类块 七、UpBlock上层类块 八、UNet 架构 九、训练 十、采样 十一、配置&#xff08;Default.yaml&#xff09; 十二、数据集 (MNIST) keyword&#xff1a; Diffusion…...

LabVIEW智能焊接系统

焊接作为制造业中的核心工艺&#xff0c;直接影响到产品的性能与可靠性。传统的焊接过程通常依赖操作工的经验控制参数&#xff0c;导致质量波动较大&#xff0c;效率低下且容易产生人为误差。随着工业自动化和智能制造的不断发展&#xff0c;传统焊接方法的局限性愈加明显。本…...

如何快速排查 Wi-Fi 的 TPUT 问题?

1. 如何排查 Wi-Fi TPUT 问题 掌握每个 Wi-Fi 协议下的 Wi-Fi TPUT 的计算方法 一文让你轻松理解WLAN物理层速率计算方式_wifi速率计算公式-CSDN博客配查 CPU 的资源占用率&#xff1a;interrupt、CPU loading Linux/Android 系统使用 mpstat 工具 具体工具的使用方法&#xff…...

C语言单链表、双链表专题及应用

1.链表的概念及结构 概念&#xff1a;链表是一种物理存储结构上非连续&#xff0c;非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的 链表的结构跟火车车厢相似&#xff0c;淡季时车次的车厢会相应减少&#xff0c;旺季时车次的车厢会额外增…...

C++4--类

目录 1.类的引入 2.类的定义 3.类的访问限定符及封装 3.1访问的限定符 3.2封装 4.类的作用域 5.类的实体化 1.类的引入 C语言结构体中只能定义变量&#xff0c;在C中&#xff0c;结构体内不仅可以定义变量&#xff0c;也可以定义函数。比如&#xff1a;之间在数据结构中&…...

紫光展锐5G融云方案,开启云终端新时代

近年来&#xff0c;云终端凭借便捷、高效、高性价比的优势正逐步在各行各业渗透。研究机构IDC的数据显示&#xff0c;2024上半年&#xff0c;中国云终端市场总体出货量达到166.3万台&#xff0c;同比增长22.4%&#xff0c;销售额29亿元人民币&#xff0c;同比增长24.9%&#xf…...

雪泥鸿爪和屈指可数

paw这个单词&#xff0c;表示“爪或手”&#xff0c;是一个和hoof相对的单词&#xff1a; hoof n.(马等动物的)蹄paw n.爪子&#xff1b;(动物的)爪&#xff1b;(人的)手 v.挠&#xff0c;抓&#xff1b;动手动脚 所以&#xff0c;当你理解了 paw 和 hoof 是相对的概念时&…...

C++并发与多线程(高级函数async)

async 在 C 中&#xff0c;async 关键字用于实现异步编程&#xff0c;它允许你定义异步操作&#xff0c;这些操作可以在后台执行&#xff0c;而不会阻塞当前线程。这是 C11 引入的特性&#xff0c;与 std::async 函数和 std::future 类一起使用。与thread函数模板的区别在于as…...

LeetCode 力扣 热题 100道(二十)三数之和(C++)

给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 如下代码…...

类和对象(4)

大家好&#xff0c;今天来给大家介绍一下this引用&#xff0c;在学习类和对象的时候大家一定有一点疑惑吧&#xff0c;类为什么能知道我们传入的是哪个对象&#xff0c;又是怎么实例化我们的成员的&#xff0c;那么我们便来了解一下。 四.this引用 4.1为什么要有this引用 在…...

php基础:正则表达式

1.正则表达式 正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。到目前为止&#xff0c;我们前面所用过的精确&#xff08;文本&#xff09;匹配也是一种正则表达式。 在PHP中&#xff0c;正则表达式一般是由正规字…...

Vue3动态表单实现

实现方法&#xff1a;通过<component />标签动实现动态表单渲染 component标签&#xff1a; 在vue中 component 标签用于动态组件标签的渲染。它允许在同一个挂载点上条件渲染不同的组件&#xff0c;通过is属性可以渲染指定的属性 在上面的例子中&#xff0c;通过调用…...

【网络取证篇】取证实战之PHP服务器镜像网站重构及绕密分析

【网络取证篇】取证实战之PHP服务器镜像网站重构及绕密分析 在裸聊敲诈、虚假理财诈骗案件类型中&#xff0c;犯罪分子为了能实现更低成本、更快部署应用的目的&#xff0c;其服务器架构多为常见的初始化网站架构&#xff0c;也称为站库同体服务器&#xff01;也就是说网站应用…...

高数 | 用简单的话讲考研数学知识点(第一集:充分和必要)

目录 一、前言 二、充分和必要 三、基础符号 四、符号拓展 五、符号进阶 六、符号进阶拓展 七、本集总结 一、前言 up最近想去上学&#xff0c;就想考个研究生读一读&#xff0c;那就要复习高数&#xff0c;光复习挺没意思的&#xff0c;所以就想着边复习边写文章吧&…...

前端学习-操作元素内容(二十二)

目录 前言 目标 对象.innerText 属性 对象.innerHTML属性 案例 年会抽奖 需求 方法一 方法二 总结 前言 曾经沧海难为水&#xff0c;除却巫山不是云。 目标 能够修改元素的文本更换内容 DOM对象都是根据标签生成的,所以操作标签,本质上就是操作DOM对象&#xff0c;…...

PostgreSql-学习06-libpq之同步命令处理

目录 一、环境 二、介绍 三、函数 1、PQsetdbLogin &#xff08;1&#xff09;作用 &#xff08;2&#xff09;声明 &#xff08;3&#xff09;参数介绍 &#xff08;4&#xff09;检测成功与否 2、PQfinish &#xff08;1&#xff09;作用 &#xff08;2&#xff0…...

Python `str.strip()` 的高级用法详解

Python str.strip 的高级用法详解 1. str.strip() 的基本用法2. str.strip() 的高级用法2.1 移除指定字符2.2 移除多个指定字符2.3 移除换行符和制表符2.4 结合正则表达式的高级处理 3. lstrip() 和 rstrip() 的用法3.1 lstrip()&#xff1a;移除左端字符3.2 rstrip()&#xff…...

Vue 3 中的 `update:modelValue` 事件详解

在 Vue 3 中&#xff0c;update:modelValue​ 事件通常与 v-model​ 指令一起使用&#xff0c;以实现自定义组件的双向数据绑定。以下是对该事件的详细分析&#xff1a; 事件定义 首先&#xff0c;我们需要在组件中定义 update:modelValue​ 事件。可以使用 defineEmits​ 函…...

AI 助力医学伦理知情同意书的完善:守护受试者权益

在医学研究中&#xff0c;知情同意书是保障受试者权益的核心文件&#xff0c;其质量直接关系到研究的伦理合规性。一份完善的知情同意书应清晰、准确且全面地向受试者传达研究的关键信息&#xff0c;确保他们在充分理解的基础上自愿做出参与决策。然而&#xff0c;在实际撰写过…...

【信息系统项目管理师-论文真题】2017上半年论文详解(包括解题思路和写作要点)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 试题一:论信息系统项目的范围管理解题思路写作要点试题二:论项目采购管理解题思路写作要点试题一:论信息系统项目的范围管理 实施项目范围管理的目的是包括确保项目做且制作所需的全部工作,以顺利完成项目…...

rpc设计的再次思考20251215(以xdb为核心构建游戏框架)

1.服务提供者注册的方式 // 表明这是一个服务提供者&#xff0c;ServerType 和 ServerId从application.properties中读取 // 而且只有当当前服务是Game时&#xff0c;才生效。 或者 条件注解??? RpcProvider(typeServerType.Game) public class GameProvider{MsgReceiver…...

mysql 查看并设置 innodb_flush_log_at_trx_commit 参数

mysql 查看并设置 innodb_flush_log_at_trx_commit 参数 innodb_flush_log_at_trx_commit 是 MySQL 中的一个系统变量&#xff0c;用于控制 InnoDB 存储引擎的日志刷新行为。该变量有三个可选的值&#xff1a; 0&#xff1a;每隔一秒钟&#xff0c;日志缓冲被刷新到日志文件&a…...

spring使用rabbitmq当rabbitmq集群节点挂掉 spring rabbitmq怎么保证高可用,rabbitmq网络怎么重新连接

##spring rabbitmq代码示例 Controller代码 import com.alibaba.fastjson.JSONObject; import com.newland.mi.config.RabbitDMMQConfig; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageProperties; import org.springframewo…...

Java BigDecimal

1. BigDecimal 用于解决浮点型运算时&#xff0c;出现结果失真的问题。 2. BigDecimal创建的构造器、常用方法 构造器说明public BigDecimal(double val)---不推荐将double 类型转为BigDecimalpublic BigDecimal(String val)---推荐将String 类型转为BigDecimal 方法说明pub…...

RFMiD:多疾病检测的视网膜图像分析挑战|文献速递-生成式模型与transformer在医学影像中的应用

Title 题目 RFMiD: Retinal Image Analysis for multi-Disease Detection challenge RFMiD&#xff1a;多疾病检测的视网膜图像分析挑战 01 文献速递介绍 眼部疾病的普遍性与上升趋势 根据世界卫生组织 (WHO) 2019 年《全球视觉报告》&#xff0c;目前全球约有 22 亿人存…...

布隆过滤器

这篇博客我们来说一下布隆过滤器 之前我们在讲redis缓存穿透的时候说可以使用布隆过滤器来解决这个问题 那么我们先来简单复习一下什么时缓存穿透 &#xff08;一&#xff09;复习缓存穿透 我们都知道redis可以作为mysql的缓存帮忙抵挡大部分的请求&#xff0c;但是当redis中…...

构建一个rust生产应用读书笔记四(实战6)

本节我们开始使用tracing来记录日志&#xff0c;实际上在生产环境中&#xff0c;更推荐使用tracing作为日志记录的首先&#xff0c;它提供了更丰富的上下文信息和结构化日志记录功能。tracing 不仅可以记录日志信息&#xff0c;还可以跟踪函数调用、异步任务等&#xff0c;适用…...

如何使用git新建本地仓库并关联远程仓库的步骤(详细易懂)

一、新建本地仓库并关联远程仓库的步骤 新建本地仓库 打开终端&#xff08;在 Windows 上是命令提示符或 PowerShell&#xff0c;在 Linux 和Mac上是终端应用&#xff09;&#xff0c;进入你想要创建仓库的目录。例如&#xff0c;如果你想在桌面上创建一个名为 “my - project”…...

5.最长回文字串

给你一个字符串 s&#xff0c;找到 s 中最长的 回文 子串 。 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 解释&#xff1a;"aba" 同样是符合题意的答案。示例 2&#xff1a; 输入&#xff1a;s "cbbd"…...

数据仓库工具箱—读书笔记02(Kimball维度建模技术概述02、事实表技术基础)

Kimball维度建模技术概述 记录一下读《数据仓库工具箱》时的思考&#xff0c;摘录一些书中关于维度建模比较重要的思想与大家分享&#x1f923;&#x1f923;&#x1f923; 第二章前言部分作者提到&#xff1a;技术的介绍应该通过涵盖各种行业的熟悉的用例展开&#xff08;赞同…...

【C++】13___STL

一、基本概念 STL(Standard Template Library,标准模板库)STL从广义上分为&#xff1a;容器(container)、算法(algorithm)、迭代器(iterator)容器和算法之间通过迭代器进行无缝连接STL几乎所有的代码都采用了类模板或者函数模板 二、STL六大组件 分别是&#xff1a;容器、算法…...

在 Ubuntu 中启用 root 用户的远程登录权限

1. 概述&#xff1a;为什么需要启用 root 用户远程登录&#xff1f; 在 Ubuntu 中&#xff0c;出于安全原因&#xff0c;默认情况下 root 用户被禁止远程登录。然而&#xff0c;在某些情况下&#xff08;如需要进行高权限操作的远程管理任务&#xff09;&#xff0c;启用 root…...

android 混淆

前沿 很久没用过混淆功能了&#xff0c;因为之前的包都使用第三方加固了&#xff0c;而且项目开发好几年了&#xff0c;突然要混淆也很麻烦。换了家公司后&#xff0c;感觉还是得混淆代码才行&#xff0c;不然直接暴露源码也太不行了。 启动混淆功能 isMinifyEnabled true …...

6、AI测试辅助-测试报告编写(生成Bug分析柱状图)

AI测试辅助-测试报告编写&#xff08;生成Bug分析柱状图&#xff09; 一、测试报告1. 创建测试报告2. 报告补充优化2.1 Bug图表分析 3. 风险评估 总结 一、测试报告 测试报告内容应该包含&#xff1a; 1、测试结论 2、测试执行情况 3、测试bug结果分析 4、风险评估 5、改进措施…...

让人工智能帮我写一个矩阵按键扫描程序

1.前言 嘉立创做了一块编程小车的蓝牙按键遥控器&#xff0c;按键是4*4矩阵的&#xff0c;通过蓝牙发送按键编码值给蓝牙小车&#xff08;外围设备&#xff09;。 原理图如下&#xff1a; 板子回来后&#xff0c;因为懒得写按键矩阵扫描程序&#xff0c;想想还是交给人工智能…...

基于MindSpore NLP的PEFT微调

创建notebook 登录控制台 创建notebook 如果出现提示按如下操作 回到列表页面创建notebook参数如下&#xff1a; 配置mindnlp环境 打开GitHub - mindspore-lab/mindnlp: Easy-to-use and high-performance NLP and LLM framework based on MindSpore, compatible with model…...

2024年12月CCF-GESP编程能力等级认证C++编程八级真题解析

本文收录于专栏《C++等级认证CCF-GESP真题解析》,专栏总目录:点这里。订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第 1 题 小杨家响应国家“以旧换新”政策,将自家的汽油车置换为新能源汽车,正在准备自编车牌。自编车牌包括5位数字或英文字母,要求…...

基于微信小程序的小区疫情防控ssm+论文源码调试讲解

第2章 程序开发技术 2.1 Mysql数据库 为了更容易理解Mysql数据库&#xff0c;接下来就对其具备的主要特征进行描述。 &#xff08;1&#xff09;首选Mysql数据库也是为了节省开发资金&#xff0c;因为网络上对Mysql的源码都已进行了公开展示&#xff0c;开发者根据程序开发需…...

moment()获取时间

moment 是一个 JavaScript 日期处理类库。 使用&#xff1a; //安装 moment npm install moment -- save引用 //在main.js中全局引入 import moment from "moment"设定moment区域为中国 //import 方式 import moment/locale/zh-cn moment.locale(zh-cn); 挂载全…...

CAD学习 day3

细节问题 快捷键X 分解单独进行操作如果需要制定字体样式选择 gdcbig.shx快捷键AA 算面积 平面布置图 客户沟通 - 会面笔记 - 客户需求(几个人居住、生活方式、功能需求(电竞房、家政柜)、书房、佛龛、儿童房、风格方向)根据客户需求 - 平面方案布置 (建议做三个以上方案) -…...

windows免登录linux

windows 生成秘钥文件 ssh-keygen -t rsa 将公钥传送到服务器 scp C:\Users\xx/.ssh/id_rsa.pub xxxx:/home/ruoyi/id_rsa.pub linux 使用ssh-copy-id -i ~/.ssh/id_rsa.pub userhost 如果禁用root登录&#xff0c;先开启 vim /etc/ssh/sshd_config PermitRootLogin yes …...

边缘计算的方式

做边缘计算这个行业要想赚得到收益&#xff0c;那一定要找到适合自己参与的一种方式。目前参与边缘计算的话&#xff0c;它主要有两个渠道。 第一个就是用盒子来跑&#xff0c;这个盒子的话包括光猫、路由器、摄像头等等&#xff0c;盒子是一条网线带动一个盒子&#xff0c;它…...