软件测试/测试开发丨学习笔记之Allure2测试报告

Allure2测试报告

1、使用 Allure2 运行方式-Python

1)–alluredir 参数生成测试报告。

在测试执行期间收集结果
pytest [测试用例/模块/包] --alluredir=./result/  (—alluredir这个选项 用于指定存储测试结果的路径)#生成在线的测试报告
allure serve ./result

2、使用 Allure2 运行方式-Java

1)使用 allure:report 参数生成测试报告

 在测试执行期间收集结果
# mvn命令行使用 maven插件安装
mvn clean test allure:report# 生成在线的测试报告
# mvn 直接找target/allure-results目录
mvn allure:serve 

2)运行mvn命令对应没有在target下面生成allure-results目录,解决方法

①在src/test/resources路径下配置allure配置文件allure.properties,指名allure报告生成路径。

allure.results.directory=target/allure-resultsa

3)运行mvn命令一直卡在下载中,解决方法·

①在项目下创建.allure文件夹。
②下载allure解压到.allure文件夹下。

3、生成测试报告

1)生成测试报告需要使用命令行工具 allure

2)命令格式:allure [option] [command] [command options]

步骤一:在测试执行期间收集结果
# —alluredir这个选项 用于指定存储测试结果的路径
pytest  [测试文件] -s –q --alluredir=./result/
# 如果要清除已经生成的报告的历史记录,可以添加参数--clean-alluredir
pytest  [测试文件] -s –q --alluredir=./result/ --clean-alluredir
# 步骤二:查看测试报告,注意这里的serve书写
allure serve ./result/

3)Allure 报告生成的两种方式

①方式一:在线报告,会直接打开默认浏览器展示当前报告。

# 方式一:测试完成后查看实际报告,在线查看报告,会直接打开默认浏览器展示当前报告。
allure serve ./result/

②方式二:静态资源文件报告(带 index.html、css、js 等文件),需要将报告布署到 web 服务器上。

a.应用场景:如果希望随时打开报告,可以生成一个静态资源文件报告,将这个报告布署到 web 服务器上,启动 web 服务,即可随时随地打开报告。
b.解决方案:使用allure generate 生成带有 index.html 的结果报告。这种方式需要两个步骤:第一步:生成报告。第二步:打开报告。# 生成报告
allure generate ./result
# 打开报告
allure open ./report/

4)常用参数

①allure generate 可以指定输出路径,也可以清理上次的报告记录。
②-o / –output 输出报告的路径。
③-c / –clean 如果报告路径重复。
④allure open 打开报告。
⑤-h / –host 主机 IP 地址,此主机将用于启动报表的 web 服务器。
⑥-p / –port 主机端口,此端口将用于启动报表的 web 服务器,默认值:0。# 生成报告,指定输出路径,清理报告。
allure generate ./result -o ./report --clean# 打开报告,指定IP地址和端口。
allure open -h 127.0.0.1 -p 8883 ./report/

4、Allure2 报告中添加用例标题

(1)通过使用装饰器 @allure.title 可以为测试用例自定义一个可阅读性的标题。allure.title 的三种使用方式:

1)方式一:直接使用装饰器 @allure.title 为测试用例自定义标题。

import allure
import pytest@allure.title("自定义测试用例标题")
def test_with_title():assert True

2)方式二:@allure.title 支持通过占位符的方式传递参数,可以实现测试用例标题参数化,动态生成测试用例标题。

import allure
import pytest@allure.title("参数化用例标题:参数一:{param1} ,参数二: {param2}")
@pytest.mark.parametrize("param1, param2, expected", [(1, 1, 2),(0.1, 0.3, 0.4)
])
def test_with_parametrize_title(param1, param2, expected):assert param1 + param2 == expected

3)方式三:allure.dynamic.title 动态更新测试用例标题。

@allure.title("原始标题")
def test_with_dynamic_title():assert Trueallure.dynamic.title("更改后的新标题")

5、allure2报告中添加用例步骤

1)方法一:使用装饰器定义一个测试步骤,在测试用例中使用。

# 方法一:使用装饰器定义一个测试步骤,在测试用例中使用
import allure
import pytest# 定义测试步骤:simple_step1
@allure.step
def simple_step1(step_param1, step_param2 = None):'''定义一个测试步骤'''print(f"步骤1:打开页面,参数1: {step_param1}, 参数2:{step_param2}")# 定义测试步骤:simple_step2
@allure.step
def simple_step2(step_param):'''定义一个测试步骤'''print(f"步骤2:完成搜索 {step_param} 功能")@pytest.mark.parametrize('param1', ["pytest", "allure"], ids=['search pytest', 'search allure'])
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)      # 调用步骤二

2)方法二:使用 with allure.step() 添加测试步骤。

# 方法二:使用 `with allure.step()` 添加测试步骤
@allure.title("搜索用例")
def test_step_in_method():with allure.step("测试步骤一:打开页面"):print("操作 a")print("操作 b")with allure.step("测试步骤二:搜索"):print("搜索操作 ")with allure.step("测试步骤三:断言"):assert True

6、allure2报告中添加用例链接

1)应用场景:将报告与 bug 管理系统或测试用例管理系统集成,可以添加链接装饰器 @allure.link、@allure.issue 和@allure.testcase。

①格式 1:@allure.link(url, name) 添加一个普通的 link 链接。
②格式 2:@allure.testcase(url, name) 添加一个用例管理系统链接。
③格式 3:@allure.issue(url, name),添加 bug 管理系统
 # 格式1:添加一个普通的link 链接
@allure.link('https://ceshiren.com/t/topic/15860')
def test_with_link():pass# 格式1:添加一个普通的link 链接,添加链接名称
@allure.link('https://ceshiren.com/t/topic/15860', name='这是用例链接地址')
def test_with_named_link():pass# 格式2:添加用例管理系统链接
TEST_CASE_LINK = 'https://github.com/qameta/allure-integrations/issues/8#issuecomment-268313637'@allure.testcase(TEST_CASE_LINK, '用例管理系统')
def test_with_testcase_link():pass# 格式3:添加bug管理系统链接
# 这个装饰器在展示的时候会带 bug 图标的链接。可以在运行时通过参数 `--allure-link-pattern` 指定一个模板链接,以便将其与提供的问题链接类型链接模板一起使用。执行命令需要指定模板链接:
`--allure-link-pattern=issue:https://abc.com/t/topic/{}`
@allure.issue("15860", 'bug管理系统')
def test_with_issue():pass

7、allure2报告中添加用例分类

(1)Allure 分类

1)应用场景:可以为项目,以及项目下的不同模块对用例进行分类管理。也可以运行某个类别下的用例。
2)报告展示:类别会展示在测试报告的 Behaviors 栏目下。
3)Allure 提供了三个装饰器:①@allure.epic:敏捷里面的概念,定义史诗,往下是 feature。②@allure.feature:功能点的描述,理解成模块往下是 story。③@allure.story:故事 story 是 feature 的子集。

(2)Allure 分类 - epic

1)场景:希望在测试报告中看到用例所在的项目,需要用到 epic,相当于定义一个项目的需求,由于粒度比较大,在 epic 下面还要定义略小粒度的用户故事。
2)装饰器:@allure.epic
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")

(3)Allure 分类 - feature/story

1)场景: 希望在报告中看到测试功能,子功能或场景。
2)装饰器: @allure.Feature、@allure.story
3)步骤:①功能上加   @allure.feature('功能名称')②子功能上加   @allure.story('子功能名称')
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")

4)Allure 运行 feature/story,allure 相关的命令查看 : pytest --help|grep allure

#通过指定命令行参数,运行 epic/feature/story 相关的用例:
pytest 文件名
--allure-epics=EPICS_SET --allure-features=FEATURES_SET --allure-stories=STORIES_SET# 只运行 epic 名为 "需求1" 的测试用例
pytest --alluredir ./results --clean-alluredir --allure-epics=需求1# 只运行 feature 名为 "功能模块2" 的测试用例
pytest --alluredir ./results --clean-alluredir --allure-features=功能模块2# 只运行 story 名为 "子功能1" 的测试用例
pytest --alluredir ./results --clean-alluredir --allure-stories=子功能1# 运行 story 名为 "子功能1和子功能2" 的测试用例
pytest --alluredir ./results --clean-alluredir --allure-stories=子功能1,子功能2# 运行 feature + story 的用例(取并集)
pytest --alluredir ./results --clean-alluredir --allure-features=功能模块1 --allure-stories=子功能1,子功能2
Allure epic/feature/story 的关系

5)总结

①epic:敏捷里面的概念,用来定义史诗,相当于定义一个项目。
②feature:相当于一个功能模块,相当于 testsuite,可以管理很多个子分支 story。
③story:相当于对应这个功能或者模块下的不同场景,分支功能。
④epic 与 feature、feature 与 story 类似于父子关系。

8、Allure2 报告中添加用例描述

1)应用场景:Allure 支持往测试报告中对测试用例添加非常详细的描述语,用来描述测试用例详情。

2)Allure 添加描述的四种方式:

①方式一:使用装饰器 @allure.description() 传递一个字符串参数来描述测试用例。

@allure.description("""
多行描述语:<br/>
这是通过传递字符串参数的方式添加的一段描述语,<br/>
使用的是装饰器 @allure.description
""")
def test_description_provide_string():assert True

②方式二:使用装饰器 @allure.description_html 传递一段 HTML 文本来描述测试用例。

@allure.description_html("""html代码块""")
def test_description_privide_html():assert True

③方式三:直接在测试用例方法中通过编写文档注释的方法来添加描述。

def test_description_docstring():"""直接在测试用例方法中通过编写文档注释的方法来添加描述。:return:"""assert True

④方式四:用例代码内部动态添加描述信息。

import allure@allure.description("""这个描述将被替换""")
def test_dynamic_description():assert 42 == int(6 * 7)allure.dynamic.description('这是最终的描述信息')# allure.dynamic.description_html(''' html 代码块 ''')

9、Allure2报告中添加用例优先级

1)应用场景:用例执行时,希望按照严重级别执行测试用例。

2)解决:可以为每个用例添加一个等级的装饰器,用法:@allure.severity。

3)Allure 对严重级别的定义分为 5 个级别:

①Blocker级别:中断缺陷(客户端程序无响应,无法执行下一步操作)。
②Critical级别:临界缺陷( 功能点缺失)。
③Normal级别:普通缺陷(数值计算错误)。
④Minor级别:次要缺陷(界面错误与UI需求不符)。
⑤Trivial级别:轻微缺陷(必输项无提示,或者提示不规范)。

4)使用装饰器添加用例方法/类的级别。类上添加的级别,对类中没有添加级别的方法生效。

#运行时添加命令行参数 --allure-severities:pytest --alluredir ./results --clean-alluredir --allure-severities normal,blocker
import allure
def test_with_no_severity_label():pass@allure.severity(allure.severity_level.TRIVIAL)
def test_with_trivial_severity():pass@allure.severity(allure.severity_level.NORMAL)
def test_with_normal_severity():pass@allure.severity(allure.severity_level.NORMAL)
class TestClassWithNormalSeverity(object):def test_inside_the_normal(self):pass@allure.severity(allure.severity_level.CRITICAL)def test_critical_severity(self):pass@allure.severity(allure.severity_level.BLOCKER)def test_blocker_severity(self):pass

10、allure2报告中添加用例支持tags标签

(1)Allure2 添加用例标签-xfail、skipif

1)用法:使用装饰器 @pytest.xfail()、@pytest.skipif()

import pytest
# 当用例通过时标注为 xfail
@pytest.mark.xfail(condition=lambda: True, reason='这是一个预期失败的用例')
def test_xfail_expected_failure():"""this test is a xfail that will be marked as expected failure"""assert False# 当用例通过时标注为 xpass
@pytest.mark.xfail
def test_xfail_unexpected_pass():"""this test is a xfail that will be marked as unexpected success"""assert True# 跳过用例
@pytest.mark.skipif('2 + 2 != 5', reason='当条件触发时这个用例被跳过 @pytest.mark.skipif')
def test_skip_by_triggered_condition():pass

(2)Allure2 添加用例标签-fixture

1)应用场景:fixture 和 finalizer 是分别在测试开始之前和测试结束之后由 Pytest 调用的实用程序函数。Allure 跟踪每个 fixture 的调用,并详细显示调用了哪些方法以及哪些参数,从而保持了调用的正确顺序。

import pytest@pytest.fixture()
def func(request):print("这是一个fixture方法")# 定义一个终结器,teardown动作放在终结器中def over():print("session级别终结器")request.addfinalizer(over)class TestClass(object):def test_with_scoped_finalizers(self,func):print("测试用例")

11、allure2报告中支持记录失败重试功能

1)Allure 可以收集用例运行期间,重试的用例的结果,以及这段时间重试的历史记录。

2)重试功能可以使用 pytest 相关的插件,例如 pytest-rerunfailures。重试的结果信息,会展示在详情页面的”Retries” 选项卡中。

import pytest
@pytest.mark.flaky(reruns=2, reruns_delay=2)   # reruns重试次数,reruns_delay每次重试间隔时间(秒)
def test_rerun2():assert False

12、Allure2 报告中添加附件-图片

(1)应用场景:

复制代码在做 UI 自动化测试时,可以将页面截图,或者出错的页面进行截图,将截图添加到测试报告中展示,辅助定位问题。

(2)解决方案:

①Python:使用 allure.attach 或者 allure.attach.file() 添加图片。
②Java:直接通过注解或调用方法添加。

(3)python方法一:

1)语法:allure.attach.file(source, name, attachment_type, extension),
2)参数解释:①source:文件路径,相当于传一个文件。②name:附件名字。③attachment_type:附件类型,是 allure.attachment_type 其中的一种(支持 PNG、JPG、BMP、GIF 等)。④extension:附件的扩展名。
import allure
class TestWithAttach:def test_pic(self):allure.attach.file("pic.png", name="图片", attachment_type=allure.attachment_type.PNG, extension="png")

(4)python方法二

1)语法:allure.attach(body, name=None, attachment_type=None, extension=None)
2)参数解释:①body:要写入附件的内容②name:附件名字。③attachment_type:附件类型,是 allure.attachment_type 其中的一种(支持 PNG、JPG、BMP、GIF 等)。④extension:附件的扩展名。

(5)裂图的原因以及解决办法

1)图片上传过程中出现了网络中断或者传输过程中出现了错误。
解决方案:重新上传图片。2)Allure 报告中的图片大小超过了 Allure 的限制。
解决方案:调整图片大小。3)图片本身存在问题。
解决方案:检查图片格式和文件本身。

13、Allure2报告中添加附件-日志

(1)应用场景:

报告中添加详细的日志信息,有助于分析定位问题。

(2)解决方案:

1)Python:使用 python 自带的 logging 模块生成日志,日志会自动添加到测试报告中。

①日志配置,在测试报告中使用 logger 对象生成对应级别的日志。
# 创建一个日志模块: log_util.py
import logging
import osfrom logging.handlers import RotatingFileHandler# 绑定绑定句柄到logger对象
logger = logging.getLogger(__name__)
# 获取当前工具文件所在的路径
root_path = os.path.dirname(os.path.abspath(__file__))
# 拼接当前要输出日志的路径
log_dir_path = os.sep.join([root_path, f'/logs'])
if not os.path.isdir(log_dir_path):os.mkdir(log_dir_path)
# 创建日志记录器,指明日志保存路径,每个日志的大小,保存日志的上限
file_log_handler = RotatingFileHandler(os.sep.join([log_dir_path, 'log.log']), maxBytes=1024 * 1024, backupCount=10 , encoding="utf-8")
# 设置日志的格式
date_string = '%Y-%m-%d %H:%M:%S'
formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] [%(filename)s]/[line: %(lineno)d]/[%(funcName)s] %(message)s ', date_string)
# 日志输出到控制台的句柄
stream_handler = logging.StreamHandler()
# 将日志记录器指定日志的格式
file_log_handler.setFormatter(formatter)
stream_handler.setFormatter(formatter)
# 为全局的日志工具对象添加日志记录器
# 绑定绑定句柄到logger对象
logger.addHandler(stream_handler)
logger.addHandler(file_log_handler)
# 设置日志输出级别
logger.setLevel(level=logging.INFO)

②代码输出到用例详情页面。运行用例命令:pytest --alluredir ./results --clean-alluredir(注意不要加-vs)。
import allure
from pytest_test.log_util import logger@allure.feature("功能模块2")
class TestWithLogger:@allure.story("子功能1")@allure.title("用例1")def test_case1(self):logger.info("用例1的 info 级别的日志")logger.debug("用例1的 debug 级别的日志")logger.warning("用例1的 warning 级别的日志")logger.error("用例1的 error 级别的日志")logger.fatal("用例1的  fatal 级别的日志")
③日志展示在 Test body 标签下,标签下可展示多个子标签代表不同的日志输出渠道:log 子标签:展示日志信息。stdout 子标签:展示 print 信息。stderr 子标签:展示终端输出的信息。④禁用日志,可以使用命令行参数控制 --allure-no-capturepytest --alluredir ./results --clean-alluredir --allure-no-capture-- 日志文件为byte[]类型添加。
public void exampleTest() {byte[] contents = Files.readAllBytes(Paths.get("a.txt"));attachTextFile(byte[]的文件, "描述信息");}@Attachment(value = "{attachmentName}", type = "text/plain")public byte[] attachTextFile(byte[] contents, String attachmentName) {return contents;}
②调用方法添加。 --String类型添加。 日志文件为String类型Allure.addAttachment("描述信息", "text/plain", 文件读取为String,"txt");--InputStream类型添加。日志文件为InputStream流Allure.addAttachment("描述信息", "text/plain", Files.newInputStream(文件Path), "txt");

14、allure2报告中添加附件-html

(1)应用场景

可以定制测试报告页面效果,可以将 HTML 类型的附件显示在报告页面上。

(2)解决方案:

1)Python:使用 allure.attach() 添加 html 代码。

①语法:allure.attach(body, name, attachment_type, extension),
②参数解释:body:要写入附件的内容(HTML 代码块)。name:附件名字。attachment_type:附件类型,是 allure.attachment_type 其中的一种。extension:附件的扩展名。
import allure
class TestWithAttach:def test_html(self):allure.attach('<head></head><body> a page </body>','附件是HTML类型',allure.attachment_type.HTML)def test_html_part(self):allure.attach('''html代码块''','附件是HTML类型',allure.attachment_type.HTML)

15、Allure2 报告中添加附件-视频

(1)应用场景:

 在做 UI 自动化测试时,可以将页面截图,或者出错的页面进行截图,将截图添加到测试报告中展示,辅助定位问题。

(2)解决方案:

1)Python:使用 allure.attach.file() 添加视频。

①语法:allure.attach.file(source, name, attachment_type, extension)
②参数解释:source:文件路径,相当于传一个文件。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")

16、Allure2 报告定制

应用场景:针对不同的项目可能需要对测试报告展示的效果进行定制,比如修改页面的 logo、修改项目的标题或者添加一些定制的功能等等。

(1)页面 Logo

1)修改allure.yml 文件,在后面添加 logo 插件:custom-logo-plugin(在 allure 安装路径下:/allure-2.21.0/config/allure.yml,可以通过 where allure 或者which allure查看 allure 安装路径)
2)编辑 styles.css 文件,配置 logo 图片(logo图片可以提前准备好放在/custom-logo-plugin/static中)/* 打开 styles.css 文件,
目录在安装allure时,解压的路径:/xxx/allure-2.21.0/plugins/custom-logo-plugin/static/styles.css,
将内容修改图片logo和相应的大小:*/.side-nav__brand {background: url("logo.jpeg") no-repeat left center !important;margin-left: 10px;height: 40px;background-size: contain !important;
}

(2)页面标题

1)编辑 styles.css 文件,添加修改标题对应的代码。/* 去掉图片后边 allure 文本 */
.side-nav__brand-text {display: none;
}/* 设置logo 后面的字体样式与字体大小 */
.side-nav__brand:after {content: "测试报告";margin-left: 18px;height: 20px;font-family: Arial;font-size: 13px;
}

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/839616.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决Ubuntu无法使用root登录的问题

1、登录普通用户 2、使用vi编辑器打开/etc/pam.d/gdm-autologin并注释掉auth required pam_succeed_if.so user ! root quiet_success 3、使用vi编辑器打开/etc/pam.d/gdm-password并注释掉auth required pam_succeed_if.so user ! root quiet_success 4、注销用户重新用roo…

Windows部署Jar包到系统服务(Service)

使用WinSW工具 1、工具下载地址&#xff1a;https://github.com/winsw/winsw/releases 选择最新版本下载 根据机器32位或者64位分别下载exe&#xff0c;再下载sample-minimal.xml文件 2、修改文件名 将两个文件名称修改为服务名&#xff0c;如&#xff1a; test.exe 和 test…

【誉天618·年中钜惠】无忧卡计算VIP会员上线

在数字化浪潮汹涌的当下&#xff0c;技术更新迭代的速度令人目不暇接。为了满足广大技术爱好者与专业人士对于最新技术的渴望与追求。2022年我们推出了誉天系列会员卡&#xff0c;受到了学员和企业的一致好评&#xff0c;现在我们又结合当下的热门ICT技术进行了会员卡升级。 誉…

Manjaro Linux上安装和配置输入法Fcitx5(稳定2014-5-17亲测)

在Manjaro Linux上安装和配置输入法&#xff0c;通常会选择Fcitx5或Ibus作为输入法框架。以下是详细步骤&#xff0c;包括安装和配置输入法框架以及安装中文输入法。 安装过程中冲突 卸载老版本 fcitx-4.*即可&#xff0c; 应为全面拥抱Fcitx5 参考文献&#xff1a; Fcitx5 do…

WinInet 编程:MFC 中的互联网编程

目录 概述 MFC WinInet 所包含的类 使用 WinInet 编程的一般步骤 创建 CInternetSession 类对象 头文件包含 对象创建 初始化 WinInet 查询设置 Internet 请求对象 设置代理服务器 设置超时时间 创建 CInternetConnection 类对象 对象创建 连接到服务器 创建 CInt…

文件中海量数据的排序

文件中海量数据的排序 题目&#xff1a; 跟之前堆排序可以解决TopK问题一样&#xff0c;我们来看看归并排序会用来解决什么问题&#xff1f; 思路&#xff1a; 我们说归并排序是外排序。其实就是将数据分成一个个小段&#xff0c;在内存中进行排序&#xff0c;再拿出内存&am…

【Linux】深入理解 Linux 的 find 指令

我一直都在流浪 可我不曾见过海洋 我以为的遗忘 原来躺在你手上 我努力微笑坚强 寂寞筑成一道围墙 也敌不过夜里 最温柔的月光 &#x1f3b5; 林宥嘉《残酷月光》 find 是 Linux 系统中功能非常强大的文件搜索工具。它可以递归地在指定目录中查找文件和目…

【Linux001】centos常用命令总结总结(已更新)

1.熟悉、梳理、总结下centos知识体系。 2.Linux相关知识&#xff0c;在日常开发中必不可少&#xff0c;如一些必知必会的常用命令&#xff0c;如环境搭建、应用部署等。同时&#xff0c;也要谨慎使用一些命令&#xff0c;如rm -rf&#xff0c;防止一些生产事故的发生。 3.欢迎点…

Mysql8.0离线安装 centos

Mysql8.0离线安装 centos 上传mysql安装包并解压 tar xvf mysql-8.0.37-1.el7.x86_64.rpm-bundle.tar运行安装对应的rpm包&#xff0c;按照一下顺序 rpm -ivh mysql-community-common-8.0.37-1.el7.x86_64.rpm rpm -ivh mysql-community-client-plugins-8.0.37-1.el7.x86_64.rp…

预约直播丨ETLCloud训练营:ETL中多流数据合并与运算专题

在大数据处理领域&#xff0c;一个至关重要的步骤是对多源数据流进行汇聚与融合&#xff0c;进而开展深度处理与剖析。此操作对于构建高效数据仓库、实现数据动态变化的实时洞察&#xff0c;以及驾驭复杂事件流的处理机制尤为关键。过程涉及从多样化的数据源中抽取信息&#xf…

顺序表详解(Java)

目录 顺序表 初始化 方法实现 1> display 遍历(简单) 2> isFull 是否为满 3> size 顺序表的大小 4> add 增加在最后位置(考虑是否满了) (难) 5> add 增加到指定位置(是否为满) 6> isEmpty 是否为空 7> contain 是否包含某个元素 (简单) 8> …

Spring Boot 3.x使用knife4j

Spring Boot 3.x使用knife4j 1.添加knife4j依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.4.0</version> </dependency>2.在…

【Unity Shader入门精要 第9章】更复杂的光照(四)

1. 透明度测试物体的阴影 对于物体有片元丢弃的情况&#xff0c;比如透明度测试或者后边会讲到的消融效果&#xff0c;使用默认的 ShadowCaster Pass 会产生问题&#xff0c;这是因为该Pass在生成阴影映射纹理时&#xff0c;没有考虑被丢弃的片元&#xff0c;而是使用完整的模…

建投数据收获客户感谢信

建投数据自2021年提出“以数据为核心的智能科技服务商”&#xff0c;并一直在为“成为国内领先的数字化转型合作伙伴”而努力&#xff0c;在赋能行业客户创造更大价值的同时&#xff0c;也陆续收到来自客户的肯定。 建投数据始终践行“成就客户&#xff0c;创新为要&#xff0…

【网络协议】【OSI】一次HTTP请求OSI工作过程详细解析

目录 1. 一次HTTP请求OSI工作过程 1.1 应用层&#xff08;第7层&#xff09; 1.2 表示层&#xff08;第6层&#xff09; 1.3 会话层&#xff08;第5层&#xff09; 1.4 传输层&#xff08;第4层&#xff09; 1.5 网络层&#xff08;第3层&#xff09; 1.6 数据链路层&am…

移除链表元素-力扣

一道基础的链表相关题目&#xff0c;在删除时对头节点进行单独处理。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* …

【vue部署】Apache部署vue项目

Apache部署vue项目 Apache 下载安装(windows)1. 下载2. 安装3. 启动服务 vue 部署配置1. 基础配置2. 解决页面刷新问题 Apache 下载安装(windows) 1. 下载 Apache 2.4.59 下载地址&#xff1a;httpd-2.4.59-240404-win64-VS17.zip Visual C Redistributable for Visual Studi…

Go语言通过goroutine实现多协程文件上传

文章推荐 1 作为程序员&#xff0c;开发用过最好用的AI工具有哪些&#xff1f; 2 Github Copilot正版的激活成功&#xff0c;终于可以chat了 3 idea,pycharm等的ai assistant已成功激活 4 新手如何拿捏 Github Copilot AI助手&#xff0c;帮助你提高写代码效率 5 Jetbrains的a…

AWS EC2 连接 AWS RDS(Mysql)

1 创建RDS数据库 点击创建数据库 引擎选项 模板 设置 连接 2 EC2连接Mysql $ sudo yum list mariadb* Installed Packages mariadb-connector-c.x86_64 3.1.13-1.amzn2023.0.3 amazonl…

swig4.2.1压缩包中里面没有找到swig.exe

官网&#xff1a;Simplified Wrapper and Interface Generator C转 C# 采用Swig.exe 打开Example示例的解决方案&#xff1a;sln 生成 即可查看如何调用和使用.i文件 但是&#xff1a;迅雷不管下载哪个版本都是没有exe 官网说了自带。很迷很迷~ 下载其他版本的时候发现&…