做网站经营流量/百度投流
文章目录
- 一、allure的介绍
- 二、allure的运行方式
- 三、allure报告的生成
- 方式一、在线报告、会直接打开默认浏览器展示当前报告
- 方式二、静态资源文件报告(带index.html、css、js等文件),需要将报告布置到web服务器上。
- 四、allure中装饰器
- 1、实现给测试报告添加用例标题
- a.直接使用@allure.title为测试用例自定义标题。
- b.@allure.title支持通过占位符的方式传递参数,可以实现测试用例标题参数化,动态生成测试用例标题。
- c.allure.dynamic.title动态更新测试用例标题。
- 2、allure报告中添加用例步骤
- 方法一:使用装饰器定义一个测试步骤,在测试用例中使用。
- 方法二:使用with allure.step()添加测试步骤。
- 3、allure报告中添加用例链接
- 4、allure报告中添加用例分类
- 总结
- 5、allure报告中添加用例描述
- 6、allure报告中添加用例优先级
- 7、allure报告中添加用例支持tags标签
- 8、allure报告中添加pytest.fixture
- 五、失败用例重试功能
- 六、allure报告中添加附件
- 1、添加图片
- 2、添加日志
- 3、添加html
- 4、添加视频
- 七、定制allure报告
- 1、修改页面的logo
一、allure的介绍
Allure 是由Java 语言开发的一个轻量级,灵活的测试报告工具。
Allure多平台的 Report框架。
Allure 支持多语言,包括 python、JaveScript、PHP、Ruby 等。
可以为开发/测试/管理等人员提供详尽的的测试报告,包括测试类别、测试步骤、日志、图片、视
频等。
可以为管理层提供高水准的统计报告。
可以集成到Jenkins生成在线的趋势汇总报告。
二、allure的运行方式
收集结果:
pytest 测试模块/测试包/测试用例 --alluredir = 指定存储测试结果的路径
pytest --alluredir=./reports --clean-alluredir
生成在线的测试报告:
allure serve ./results
安装allure-pytest
三、allure报告的生成
方式一、在线报告、会直接打开默认浏览器展示当前报告
--clean-alluredir
:清理已经生成的报告的历史记录
1、pytest 测试模块/测试包/测试用例 --alluredir = 指定存储测试结果的路径
2、生成在线的测试报告:
allure serve ./results
方式二、静态资源文件报告(带index.html、css、js等文件),需要将报告布置到web服务器上。
应用场景:如果希望随时打开报告,可以生成一个静态资源文件报告,将这个报告布署到web服务器上,启动web服务,即可随时随地打开报告。
解决方案:使用allure generate 生成带有 index.html 的结果报告。这种方式需要
两个步骤:
第一步:生成报告。
--clean:如果报告路径重复,清理上一次的报告
allure generate ./results --clean
-o:将测试报告生成指定的目录
allure generate ./results --clean -o ./reports
第二步:打开报告。
allure open allure-report
打开报告指定IP地址和端口号
-h 127.0.0.1 -p 8888
allure open ./reports -h 127.0.0.1 -p 8888
四、allure中装饰器
@allure.epic() epic描述 敏捷里面的概念,定义史诗,往下是feature
@allure.feature() 模块名称 功能点的描述,往下是 story
@allure.story() 用户故事 用户故事,往下是title
@allure.title(用例的标题)用例的标题 重命名 html 报告名称
@allure.step() 操作步骤 测试用例的步骤
@allure.testcase() 测试用例的链接地址对应功能测试用例系统里面的case
@allure.issue() 缺陷 对应缺陷管理系统里面的链接
@allure.description() 用例描述 测试用例的描述
@allure.severity() 用例等级 blocker, critical, normal, minor, trivial
@allure.link() 链接 定义一个链接,在测试报告展现
@allure.attachment() 附件 报告添加附件
1、实现给测试报告添加用例标题
通过使用装饰器@allure.title可以为测试用例自定义一个可阅读性的标题。
allure.title的三种使用方式:
a.直接使用@allure.title为测试用例自定义标题。
import allure@allure.title('测试标题')
def test_with_title():assert True
b.@allure.title支持通过占位符的方式传递参数,可以实现测试用例标题参数化,动态生成测试用例标题。
@allure.title("参数化用例标题:参数1:{p1},参数2:{p2}")
@pytest.mark.parametrize('p1,p2,p3',[[1,1,2],[2,4,6]])
def test_with_title1(p1,p2,p3):assert p1+p2==p3
c.allure.dynamic.title动态更新测试用例标题。
@allure.title('原始标题')
def test_with_title2():assert Trueallure.dynamic.title('更改后的标题')
2、allure报告中添加用例步骤
应用场景:编写自动化测试用例的时候经常会遇到需要编写流程性测试用例的场景,一般流程性的测试用例的测试步骤比较多,我们在测试用例中添加详细的步骤会提高测试用例的可阅读性。
方法一:使用装饰器定义一个测试步骤,在测试用例中使用。
import allure
import pytest@allure.step
def simple_step1(step_param1,step_param2=None):"""定义一个测试步骤"""print(f'步骤1:打开页面,参数1:{step_param1},参数2:{step_param2}')@allure.step
def simple_step2(step_param):"""定义一个测试步骤"""print(f'步骤1:完成搜索{step_param}功能')@pytest.mark.parametrize('param1',['pytest','allure'],ids=['search pytest','search pytest'])
def test_parameterize_with_id(param1):simple_step2(param1)@pytest.mark.parametrize('param1',[True, False])
@pytest.mark.parametrize('param2', ['value 1', 'value 2'])
def test_parametrize_with_two_parameters(param1, param2):simple_step1(param1,param2)@pytest.mark.parametrize('param2',['pytest', 'unittest'])
@pytest.mark.parametrize('param1,param3', [[1,2]])
def test_parameterize_with_uneven_value_sets(param1, param2, param3):simple_step1(param1,param3)simple_step2(param2)
方法二:使用with allure.step()添加测试步骤。
@allure.title("搜索用例:{searchkey}")
@pytest.mark.parametrize("searchkey",['java','allure'])
def test_step_in_method(searchkey):with allure.step("测试步骤一:打开页面"):print("操作a")print("操作b")with allure.step(f"测试步骤二:搜索{searchkey}"):print(f"搜索操作{searchkey}")with allure.step("测试步骤三:断言"):assert True
3、allure报告中添加用例链接
应用场景:将报告与bug管理系统或测试用例管理系统集成,可以添加链接装饰器
allure. link、@allure.issue和allure.testcase。
格式1: @allure.link (url, name)添加一个普通的link链接,name:起别名
import allure@allure.link('http://www.baidu.com',name='这是一个链接')
def test_with_link():pass
格式2: allure.testcase( url,name)添加一个用例管理系统链接。
TEST_CASE_LINK='http://www.baidu.com'@allure.testcase(TEST_CASE_LINK,'用例管理系统')
def test_with_testcase():pass
格式3: @allure.issue(url,name),添加bug管理系统链接。
@allure.issue('66666','bug管理系统')
def test_with_issue():pass
4、allure报告中添加用例分类
应用场景:可以为项目,以及项目下的不同模块对用例进行分类管理。也可以运行某个类别下的用例。
报告展示:类别会展示在测试报告的Behaviors栏目下。
Allure提供了三个装饰器:
@allure.epic:敏捷里面的概念,定义史诗,往下是feature。
import allure@allure.epic('需求1')
class TestEpic:def test_case1(self):print('用例1')def test_case2(self):print('用例2')def test_case3(self):print('用例3')@allure.epic('需求1')
class TestEpic1:def test_case1(self):print('用例1')def test_case2(self):print('用例2')def test_case3(self):print('用例3')
场景:希望在报告中看到测试功能,子功能或场景。
子功能上加@allure.story、@allure.feature
@allure.feature:功能点的描述,理解成模块往下是story。
@allure.story:故事story是 feature的子集。
import allure@allure.epic('需求1')
@allure.feature('功能模块1')
class TestEpic:@allure.story('子功能1')@allure.title('用例1')def test_case1(self):print('用例1')@allure.story('子功能2')@allure.title('用例2')def test_case2(self):print('用例2')@allure.story('子功能2')@allure.title('用例3')def test_case3(self):print('用例3')@allure.story('子功能1')@allure.title('用例4')def test_case4(self):print('用例4')@allure.story('子功能3')@allure.title('用例5')def test_case5(self):print('用例5')@allure.epic('需求1')
@allure.feature('功能模块2')
class TestEpic1:@allure.story('子功能4')def test_case1(self):print('用例1')@allure.story('子功能5')def test_case2(self):print('用例2')def test_case3(self):print('用例3')@allure.epic('需求2')
@allure.feature('功能模块1')
class TestEpic2:def test_case1(self):print('用例1')def test_case2(self):print('用例2')def test_case3(self):print('用例3')
运行特定类别的用例
1、只运行epic名为”需求1“的测试用例
pytest demo1/test_allure_feature.py --alluredir=./reports --clean-all
uredir --allure-epics=需求1
2、只运行feature名为”功能模块2“的测试用例
pytest demo1/test_allure_feature.py --alluredir=./reports --clean-all
uredir --allure-features=功能模块2
3、只运行story名为”子功能1“的测试用例
pytest demo1/test_allure_feature.py --alluredir=./reports --clean-all
uredir --allure-stories=子功能1
4、只运行story名为”子功能2“和”子功能2“的测试用例
pytest demo1/test_allure_feature.py --alluredir=./reports --clean-all
uredir --allure-stories=子功能2,子功能3 -vs
5、运行story名为”子功能2“和 feature名”功能模块1“的测试用例
pytest demo1/test_allure_feature.py --alluredir=./reports --clean-all
uredir --allure-stories=子功能2 --allure-features=功能模块1
总结
epic:相当于定义一个项目。
feature:相当于一个功能模块,相当于testsuite,可以管理很多个子分支story
story:相当于对应这个功能或者模块下的不同场景,分支功能。
epic 与feature、feature 与story类似于父子关系。
5、allure报告中添加用例描述
应用场景:Allure支持往测试报告中对测试用例添加非常详细的描述语,用来描述测试用例详情。
Allure添加描述的四种方式:
方式一:使用装饰器
@allure.description()传递一个字符串参数来描述测试用例。
import allure@allure.description("""
多行描述信息:<br/>
通过传递字符串参数添加一段描述语句,</br>
使用装饰器@allure.description
""")
def test_description_string():assert True
方式二:使用装饰器
@allure.description_ html传递一段HTML文本来描述测试用例。
@allure.description_html("""
<img class="index-logo-src" src="//www.baidu.com/img/flexible/logo/pc/result.png" alt="到百度首页" title="到百度首页">
""")
def test_description_html():assert True
方式三:直接在测试用例方法中通过编写文档注释的方法来添加描述。会按照给定的格式展示,不需要添加<br/>
def test_description_desc():"""直接写在测试用例中通过编写文档注释的方法来添加描述会按照给定的格式展示,不需要添加<br/>:return:"""assert True
6、allure报告中添加用例优先级
应用场景:用例执行时,希望按照严重级别执行测试用例。
解决:可以为每个用例添加一个等级的装饰器,用法: allure.severity。
Allure对严重级别的定义分为5个级别:
Blocker级别:中断缺陷(客户端程序无响应,无法执行下一步操作)。
Critical级别:临界缺陷(功能点缺失)。
Normal级别:普通缺陷(数值计算错误)。
Minor级别:次要缺陷(界面错误与UI需求不符)。
Trivial级别:轻微缺陷(必输项无提示,或者提示不规范)。
使用装饰器添加用例方法/类的级别。
类上添加的级别,对类中没有添加级别的方法生效。
未加级别标签的用例,在运行时,是不会被收集上来的
但是在类中没有加标签,会随着类上加的标签来收集的
import allure未加级别标签的用例,在运行时,是不会被收集上来的
def test_with_no_serverity_label():pass@allure.severity(allure.severity_level.TRIVIAL)
def test_with_trivial_serverity():pass@allure.severity(allure.severity_level.NORMAL)
def test_with_trivial_serverity1():pass
对某一级别的用例运行时添加命令行参数–allure-severities:
pytest test_allure_severity.py --alluredir=./reports --clean-al
luredir --allure-severities=trivial
7、allure报告中添加用例支持tags标签
Allure报告支持的一些常见Pytest特性包括xfail、
skipif、fixture等。测试结果会展示特定的标识在用例详情页面。
8、allure报告中添加pytest.fixture
应用场景:fixture和finalizer是分别在测试开始之前和测试结束之后由Pytest调用的实用程序函数。Allure跟踪每个fixture的调用,并详细显示调用了哪些方法以及哪些参数,从而保持了调用的正确顺序。
import allure
import pytest@pytest.fixture()
def func():print('前置操作')yieldprint('后置操作')class TestDemo:def test_a(self,func):assert Truedef test_b(self):pass
五、失败用例重试功能
Allure可以收集用例运行期间,重试的用例的结果,以及这段时间重试的历史记录。
安装:
pip install pytest-rerunfailures
import pytest
import allure@pytest.mark.flaky(reruns=2,reruns_delay=2)
class TestDemo:def test_a(self):assert Truedef test_b(self):assert False
六、allure报告中添加附件
1、添加图片
应用场景:在做UI自动化测试时,可以将页面截图,或者出错的页面进行截图,将截图添加到测试报告中展示,辅助定位问题。
解决方案:使用allure.attach或者allure.attach.file()添加图片。
语法:allure.attach.file( source,name, attachment_type,extension)
参数解释:
source:文件路径,相当于传一个文件。
name:附件名字。
attachment_type:附件类型,是
allure.attachment_type其中的一种(支持PNG、JPG、BMP、GIF等)。
extension:附件的扩展名。
案例1
import pytest
import allureclass TestWithAttach:def test_pic(self):allure.attach.file(source="./1.jpeg",name='图片',attachment_type=allure.attachment_type.PNG,extension="jpeg")
案例2
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2023/2/20 18:46
# @Author : 杜兰特
# @File : test_allure_pic.pyimport pytest
import allureclass TestWithAttach:def test_pic(self):allure.attach.file(source="./1.jpeg",name='图片',attachment_type=allure.attachment_type.PNG,extension="jpeg")def test_pic1(self):with open('./1.jpeg',mode='rb') as f:file=f.read()print(file)allure.attach(file,name='页面截图',attachment_type=allure.attachment_type.PNG)
2、添加日志
应用场景:报告中添加详细的日志信息,有助于分析定位问题。
解决方案:使用python自带的logging模块生成日志,日志会自动添加到测试报告中。
import allurefrom utils.log_util import logger@allure.epic("需求1")
@allure.feature("功能模块一")
class TestEpic:@allure.story("子功能一")@allure.title("用例1")def test_case1(self):logger.info("这是 TestEpic 第一条用例")print("用例1")@allure.story("子功能二")@allure.title("用例2")def test_case2(self):logger.debug("这是 TestEpic 第二条用例")print("用例2")@allure.story("子功能二")@allure.title("用例3")def test_case3(self):logger.warning("这是 TestEpic 第三条用例")print("用例3")@allure.story("子功能一")@allure.title("用例4")def test_case4(self):logger.error("这是 TestEpic 第四条用例")print("用例4")@allure.story("子功能三")@allure.title("用例5")def test_case5(self):print("用例5")@allure.epic("需求1")
@allure.feature("功能模块二")
class TestEpic1:@allure.story("子功能四")def test_case1(self):print("用例1")@allure.story("子功能五")def test_case2(self):print("用例2")def test_case3(self):print("用例3")@allure.epic("需求2")
class TestEpic2:def test_case1(self):print("用例1")def test_case2(self):print("用例2")def test_case3(self):print("用例3")
3、添加html
应用场景:可以定制测试报告页面效果,可以将HTML类型的附件显示在报告页面上。
解决方案:使用allure.attach()添加html代码。
语法:
allure.attach (body ,name,attachment_type,extension),参数解释:
body:要写入附件的内容(HTML代码块)。
name:附件名字。
attachment_type:附件类型,是allure.attachment_type其中的一种。
extension:附件的扩展名。
import allure
from utils.log_util import loggerclass TestAllureHTML:def test_html(self):logger.info('测试日志')allure.attach(body="""<img class="index-logo-src" src="//www.baidu.com/img/flexible/logo/pc/result.png" alt="到百度首页" title="到百度首页">""",name='添加html',attachment_type=allure.attachment_type.HTML,extension='html')
4、添加视频
应用场景:在做UI自动化测试时,可以将页面截图,或者出错的页面进行截图,将截图添加到测试报告中展示,辅助定位问题。
解决方案:使用allure.attach. file()添加视频。
语法:
allure.attach (body ,name,attachment_type,extension),参数解释:
body:要写入附件的内容(HTML代码块)。
name:附件名字。
attachment_type:附件类型,是allure.attachment_type其中的一种。
extension:附件的扩展名。
import allureclass TestWithAttach:def test_video(self):allure.attach.file("xxx.mp4",name='视频资源',attachment_type=allure.attachment_type.MP4,extension='mp4')
七、定制allure报告
应用场景:针对不同的项目可能需要对测试报告展示的效果进行定制,比如修改页面的logo、修改项目的标题或者添加一些定制的功能等等。
1、修改页面的logo
1.修改allure.yml文件,添加logo插件custom-logo-plugin(在allure安装路径下,可以通过where allure或者which allure查看allure安装路径))。
2.编辑styles.css文件,配置logo图片。
相关文章:

pytest测试框架——allure报告
文章目录一、allure的介绍二、allure的运行方式三、allure报告的生成方式一、在线报告、会直接打开默认浏览器展示当前报告方式二、静态资源文件报告(带index.html、css、js等文件),需要将报告布置到web服务器上。四、allure中装饰器1、实现给…...

SQLI-Labs(3)8-14关【布尔盲注和时间盲注】
目录 第八关 第九关: 第十关 第十一关 第十二关 第十三关 第十四关 第八关 我们用测试语句来测试是否为注入点 从上图中得知存在注入点,那么接下来就是爆列 一共有三列,接下来用union select 和报错注入都试一下发现没有回显点&…...

ESP32学习笔记03-日志打印
ESP32日志 日志分为5个等级 ESP_LOGE - error (lowest)ESP_LOGW - warningESP_LOGI - infoESP_LOGD - debugESP_LOGV - verbose (highest)API 0.头文件 #include "esp_log.h"1.给一个日志标签设置等级...

mongoTemplate非string类型模糊查询
需求 为方便使用人员对任务Task的搜索,需要根据number实现模糊搜索。 背景 之前设计的number是long类型,但是mongodb只支持string类型的正则匹配。 方案 修改number为string类型;新增一个冗余字段,用于模糊查询;在…...

Redis是单线程还是多线程?Redis的10种数据类型,有哪些应用场景?
目录专栏导读一、同样是缓存,用map不行吗?二、Redis为什么是单线程的?三、Redis真的是单线程的吗?四、Redis优缺点1、优点2、缺点五、Redis常见业务场景六、Redis常见数据类型1、String2、List3、Hash4、Set5、Zset6、BitMap7、Bi…...

到底什么才是幻读?
💗推荐阅读文章💗 🌸JavaSE系列🌸👉1️⃣《JavaSE系列教程》🌺MySQL系列🌺👉2️⃣《MySQL系列教程》🍀JavaWeb系列🍀👉3️⃣《JavaWeb系列教程》…...

RPC重试机制和控制方案
重试机制 因为网络抖动等原因导致 RPC 调用失败,这时候使用重试机制可以提高请求的最终成功率,减少故障影响,让系统运行更稳定。 重试简易实现方案 在重试的过程中,为了能够在约定的时间内进行安全可靠地重试,在每次…...

【无标题】动态给结构体赋值
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { int id; char name[20]; double score; } Student; int main() { Student *p (Student *)malloc(sizeof(Student)); if (p NULL) { printf(“Memory allocation failed.”…...

centos7 soft raid每周自动同步的问题
之前redhat老版本时也遇到过这样的问题https://blog.csdn.net/jolly10/article/details/108768360centos7解决的办法略有不同,记录一下:centos7默认是每周日凌晨1点进行raid检查,有点太频繁了[oracleqht117 data]$ ls /etc/cron*/etc/cron.de…...

嵌入式Linux内核代码风格
这是一个简短的文档,描述了linux内核的首选代码风格。代码风格是因人而异的,而且我 不愿意把我的观点强加给任何人,不过这里所讲述的是我必须要维护的代码所遵守的风格, 并且我也希望绝大多数其他代码也能遵守这个风格。请在写代码…...

Andorid:关于Binder几个面试问题
1.简单介绍下binderbinder是一种进程间通讯的机制进程间通讯需要了解用户空间和内核空间每个进程拥有自己的独立虚拟机,系统为他们分配的地址空间都是互相隔离的。如两个进程需要进行通讯,则需要使用到内核空间做载体,内核空间是所有进程共享…...

【剑指Offer-Java】包含min函数的栈?
题目 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。 MinStack minStack new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.min()…...

红队APT——邮件钓鱼攻击SwaksOffice漏洞RLO隐藏压缩释放
目录 (一)采用自己搭建Ewomail配合Swaks 0x01 搭建过程 0x02 配置转发信息 (二)网页钓鱼-克隆修改...

【Java|基础篇】超详细讲解运算符
文章目录1. 什么是运算符2. 算术运算符隐式类型转换强制类型转换字符串的拼接字符相加自增和自减运算符3.赋值运算符4. 关系运算符5. 逻辑运算符短路与(&&)和短路或(||)6.三目运算符7. 位运算符8. 移位运算1. 什么是运算符 运算符用于执行程序代码运算,会针…...

Promise-异步回调
1.理解Promise promise是ES6提出的异步编程的新的解决方案,通过链式调用解决ajax回调地狱 从语法上看,promise是一个构造函数,自己身上有all、reject、resolve方法,原型上有then、catch方法 从功能上看,Promise对象用…...

【设计模式之美 设计原则与思想:设计原则】21 | 理论七:重复的代码就一定违背DRY吗?如何提高代码的复用性?
在上一节课中,我们讲了 KISS 原则和 YAGNI 原则,KISS 原则可以说是人尽皆知。今天,我们再学习一个你肯定听过的原则,那就是 DRY 原则。它的英文描述为:Don’t Repeat Yourself。中文直译为:不要重复自己。将…...

深度学习 | 入个Pytorch的小门
本文主要参考 1’ 2’ 3 更新:2023 / 3 / 1 深度学习 | 入个Pytorch的小门 - 1. 常见数据操作创建操作算术操作加法索引形状查询形状改变形状广播机制广播条件运算数据类型转换Tensor转NumPyNumPy转Tensor线性回归线性回归的基本要素1. 模型2. 数据集3. 损失函数4.…...

应用上云指导
应用上云指导方法论。应用上云指传统应用迁移到云上,云上应用采用K8S部署。本文旨在提供一种方法、流程,指导应用上云,以求优化上云工作,提供应用上云效率。主要包含以下内容:应用上云工作角色、分工应用上云标准流程及…...

进程概念~
进程概念 (冯诺依曼体系结构,操作系统,进程概念,进程状态,环境变量,程序地址空间) 冯诺依曼体系结构:(计算机硬件体系结构) 输入设备,输出设备&a…...

三天吃透Java基础八股文
本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~ Github地址:https://github.com/…...

YOLOv8训练自己的数据集(超详细)
一、准备深度学习环境本人的笔记本电脑系统是:Windows10YOLO系列最新版本的YOLOv8已经发布了,详细介绍可以参考我前面写的博客,目前ultralytics已经发布了部分代码以及说明,可以在github上下载YOLOv8代码,代码文件夹中…...

【洛谷 P1088】[NOIP2004 普及组] 火星人 题解(全排列+向量)
[NOIP2004 普及组] 火星人 题目描述 人类终于登上了火星的土地并且见到了神秘的火星人。人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法。这种交流方法是这样的,首先,火星人把一个非常大的数字告诉人类科学…...

基于混合蛙跳算法优化SVM的滚动轴承故障诊断python实现
1.混合蛙跳算法(SFLA)原理 混合蛙跳算法(SFLA)是一种受自然生物模仿启示而产生的基于群体的协同搜索方法,由局部搜索和全局信息交换两部分组成。 混合蛙跳算法中,每个青蛙的位置代表了一个可行解。青蛙在沼泽中跳跃,沼泽在离散的地方有很多石头,青蛙可以跳过这些石头来找…...

如何让AI帮你干活-娱乐(2)
背景:好容易完成朋友的任务,帮忙给小朋友绘画比赛生成一些创意参考图片。他给我个挑战更高的问题,是否可以帮他用AI生成一些视频。这个乍一听以现在AI技术根本不太可能完成。奈何他各种坚持,无奈被迫营业。苦脸接受了这个不可能完…...

文件异步多备常用方案
业务需求上经常存在需要对同一个文件进行双上传,上传到不同云存储桶,以防出现某一个云厂商因各种意外导致自身服务出现不可用的情况,当然,还有其他措施可以避免,现在只针对通过程序业务代码而双写存储的这个场景。 业务…...

java面试八股文之------Redis夺命连环25问
java面试八股文之------Redis夺命连环25问👨🎓1.为什么redis这么快👨🎓2.redis的应用场景,为什么要用👨🎓3.redis6.0之前为什么一直不使用多线程,6.0为甚么又使用多线程了&…...

【数据结构】AVL平衡二叉树底层原理以及二叉树的演进之多叉树
1.AVL平衡二叉树底层原理 背景 二叉查找树左右子树极度不平衡,退化成为链表时候,相当于全表扫描,时间复杂度就变为了O(n) 插入速度没影响,但是查询速度变慢,比单链表都慢,每次都要判断左右子树是否为空 需…...

K8S篇-安装nfs插件
前言 有关k8s的搭建可以参考:http://t.csdn.cn/H84Zu 有关过程中使用到的nfs相关的nas,可以参考: http://t.csdn.cn/ACfoT http://t.csdn.cn/tPotK http://t.csdn.cn/JIn27 安装nfs存储插件 NFS-Subdir-External-Provisioner是一个自动配置…...

xmu 离散数学 卢杨班作业详解【4-7章】
文章目录第四章 二元关系和函数4.6.2911121618.120.222.1232834第五章 代数系统的一般概念2判断二元运算是否封闭348111214第六章 几个典型的代数系统1.5.6.7.11.12151618第七章 图的基本概念12479111215第四章 二元关系和函数 4. A{1,2,3} 恒等关系 IA{<1,1>,<2,2…...

多重背包问题中的二进制状态压缩
1.多重背包问题 经典的多重背包问题和01背包问题的相似之处在于二者的一维遍历顺序都是从右侧往左侧遍历。 同时多重背包的一维写法不比二维写法降低时间复杂度。 2.多重背包标准写法:(平铺展开形式) class Solution {public int maxValue(int N, int C, int[] s…...