探索Allure Report:提升自动化测试效率的秘密武器

图片

亲爱的小伙伴们,由于微信公众号改版,打乱了发布时间,为了保证大家可以及时收到文章的推送,可以点击上方蓝字关注测试工程师成长之路,并设为星标就可以第一时间收到推送哦!

一.使用 Allure2 运行方式-Python

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

二.使用 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文件夹下。

三.生成测试报告

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.htmlcssjs等文件),需要将报告布署到 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/

四.Allure2 报告中添加用例标题

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

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

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

方式二:@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

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

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

五.Allure2报告中添加用例步骤

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

# 方法一:使用装饰器定义一个测试步骤,在测试用例中使用
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)      # 调用步骤二

方法二:使用 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

六.Allure2报告中添加用例链接

应用场景:将报告与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

七.Allure2报告中添加用例分类

1.Allure分类

(1)应用场景:可以为项目,以及项目下的不同模块对用例进行分类管理。也可以运行某个类别下的用例。

(2)报告展示:类别会展示在测试报告的Behaviors栏目下。

(3)Allure提供了三个装饰器:

  • @allure.epic:敏捷里面的概念,定义史诗,往下是 feature

  • @allure.feature:功能点的描述,理解成模块往下是 story

  • @allure.story:故事 story 是 feature 的子集。

2.Allure分类 - epic

  • 场景:希望在测试报告中看到用例所在的项目,需要用到 epic,相当于定义一个项目的需求,由于粒度比较大,在epic下面还要定义略小粒度的用户故事。

  • 装饰器:@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

  • 场景: 希望在报告中看到测试功能,子功能或场景。

  • 装饰器: @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 与 featurefeature 与 story 类似于父子关系。

八.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 代码块 ''')

九.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

十.Allure2报告中添加用例支持tags标签

1.Allure2 添加用例标签-xfailskipif

import pytest
# 用法:使用装饰器 @pytest.xfail()、@pytest.skipif()
# 当用例通过时标注为 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

应用场景: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("测试用例")

十一.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

十二.Allure2 报告中添加附件-图片

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

2.解决方案

  • Python:使用 allure.attach 或者 allure.attach.file() 添加图片。

  • Java:直接通过注解或调用方法添加。

3.python方法一

语法:allure.attach.file(source, name, attachment_type, extension),
参数解释:①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方法二

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

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

  • 图片上传过程中出现了网络中断或者传输过程中出现了错误。 解决方案:重新上传图片。

  • Allure 报告中的图片大小超过了 Allure 的限制。 解决方案:调整图片大小。

  • 图片本身存在问题。 解决方案:检查图片格式和文件本身。

十三.Allure2报告中添加附件-日志

1.应用场景:报告中添加详细的日志信息,有助于分析定位问题。 2.解决方案:使用 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-capture

pytest --alluredir ./results --clean-alluredir --allure-no-capture

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");

十四.Allure2报告中添加附件-html

1.应用场景:可以定制测试报告页面效果,可以将 HTML 类型的附件显示在报告页面上。

2.解决方案:使用 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)

十五.Allure2 报告中添加附件-视频

使用 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")

十六.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.修改页面标题,编辑 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;
}

来源:https://juejin.cn/post/7232696604045803580
作者:测试人

•(END)•

记得拉至文末为糖糖点个“在看”

如有任何疑问,点击添加【个人微信】咨询!

喜欢这篇文章欢迎转发、分享~

图片

接口自动化测试系列

UI自动化测试系列

自动化测试系列

抓包工具系列

功能测试系列

面试宝典系列

测试工具系列

团队管理系列

性能测试系列

  

图片

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

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

相关文章

阿里云服务器云盘ESSD Entry、SSD、高效云盘性能测评

阿里云服务器系统盘或数据盘支持多种云盘类型&#xff0c;如高效云盘、ESSD Entry云盘、SSD云盘、ESSD云盘、ESSD PL-X云盘及ESSD AutoPL云盘等&#xff0c;阿里云百科aliyunbaike.com详细介绍不同云盘说明及单盘容量、最大/最小IOPS、最大/最小吞吐量、单路随机写平均时延等性…

什么猫粮比较好?哪些牌子的主食冻干健康又实惠?

很多养猫的小伙伴们都磨刀霍霍准备给猫咪屯猫些猫冻干吧&#xff0c;特别是家里有挑食猫咪的家庭。有养猫的铲屎官们应该都知道&#xff0c;猫咪是对蛋白质的需求量很高&#xff0c;而且对植物蛋白的吸收效率比较低&#xff0c;所以蛋白质最好都是来自动物的优质蛋白。猫咪挑食…

基于rk3568 Android H265推流SRS低延迟网页播放方案

在音视频领域&#xff0c;融合推流&#xff0c;低码流&#xff0c;低延迟&#xff0c;浏览器H5化是一个降低成本&#xff0c;提升用户体验的重要手段。同时适配现有直播的生态也是一个必要条件。 在满足上述要求的情况下&#xff0c;我做了以下实践&#xff0c;取得了良好的效果…

赴一场AI星河之约:他们改变了什么?

你认识AI开发者吗&#xff1f; 在工作中&#xff0c;我们会采访形形色色的AI开发者。他们来自不同的地方&#xff0c;说着不同的口音。年纪小的还没上小学&#xff0c;年纪大的在退休之后又找到了新的兴趣与梦想。他们有人心怀温暖&#xff0c;用AI技术帮助听障人士恢复听力&am…

电商数仓可视化1--数据导入

1、数据来源介绍以及数据文件下载 1、业务数据 业务数据往往产生于事务型过程处理&#xff0c;所以一般存储在关系型数据库中&#xff0c;如mysql、oracle 业务数据源&#xff1a; 用户基本信息、商品分类信息、商品信息、店铺信息、订单数据、订单支付信息、活动信息…

小白也能看得懂的Jmeter性能测试中服务端资源监控技术

操作步骤&#xff1a; 1、安装插件管理器 插件管理器的作用&#xff1a;可以提供扩展插件的在线安装升级和卸载。因为我们需要在线安装监控插件&#xff0c;首先我们就要先安装插件管理器。 插件管理器的下载地址&#xff1a;https://jmeter-plugins.org/install/Install/ 如…

Allins 官网正式上线,铭文赛道进入 AMM 交易时代

“Allins正在通过全新的AMM方案为BRC20及多链铭文资产拓展DeFi场景&#xff0c;官网的全新上线意味着铭文资产的交易正式进入AMM时代。” 在2023年1月开始&#xff0c;Ordinals协议的推出成为了铭文赛道发展的开端&#xff0c;并为比特币这类非图灵完备的生态&#xff0c;带来了…

全院级医学影像PACS源码,影像采集传输与存储管理、影像诊断查询与报告管理

全院医学影像PACS源码&#xff0c;数字化影像信息系统源码&#xff0c;带三维影像后处理技术 全院影像设备联网与影像信息数字化存储&#xff0c;建立涵盖全院的PACS/RIS系统&#xff0c;实现从预约、登记、分诊、排队叫号、检查、诊断阅片、报告发布、自助胶片打印等流程化管…

Android逆向入门教程

前言 什么是 Android 逆向开发&#xff1f; Android 逆向开发是指对已发布的 Android 应用进行分析和破解&#xff0c;以了解应用程序的内部工作原理&#xff0c;获取应用程序的敏感信息&#xff0c;或者修改应用程序的行为。逆向开发可以帮助开发人员了解他人的代码实现&…

Java网络编程之IP,端口号,通信协议(UDP,TCP)

目录 1.软件架构2.网络编程三要素3.IP1.IPV42.IPV6 4.端口号5.协议1.UDP协议1.单播2.组播3.广播 2.TCP协议1.三次握手2.四次挥手 1.软件架构 ①C/S&#xff1a;客户端/服务器 在用户本地需要下载安装客户端程序&#xff0c;在远程有一个服务器端程序。 优点&#xff1a;画面精美…

Python学习笔记之(一)搭建Python 环境

搭建Python 环境 1. 使用工具准备1.1 Python 安装1.1.1 下载Python 安装包1.1.2 安装Python 1.2 VScode 安装1.2.1 下载VScode安装包1.2.2 给VScode安装Python 扩展 2. 第一次编写Python 程序 本篇文章以Windows 系统为例。 1. 使用工具准备 1.1 Python 安装 1.1.1 下载Pytho…

【设计模式】策略模式

文章目录 前言一、概述结构 二、实现案例三、优缺点使用场景 四、JDK源码分析总结 前言 【设计模式】策略模式——行为型设计模式。 一、概述 先看下面的图片&#xff0c;我们去旅游选择出行模式有很多种&#xff0c;可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 作为…

性能测评高效云盘、ESSD Entry云盘、SSD云盘、ESSD云盘、ESSD PL-X云盘及ESSD AutoPL云盘

阿里云服务器系统盘或数据盘支持多种云盘类型&#xff0c;如高效云盘、ESSD Entry云盘、SSD云盘、ESSD云盘、ESSD PL-X云盘及ESSD AutoPL云盘等&#xff0c;阿里云百科aliyunbaike.com详细介绍不同云盘说明及单盘容量、最大/最小IOPS、最大/最小吞吐量、单路随机写平均时延等性…

​如何把图片里背景的路人P掉?教你四种方法消除路人

在日常生活中&#xff0c;我们经常会遇到需要将图片中背景的路人P掉的情况。有时候&#xff0c;这些路人会破坏图片的整体美感&#xff0c;或者我们只想要图片中的某些元素&#xff0c;而路人的出现会分散注意力。那么&#xff0c;如何才能有效地将图片中的背景路人P掉呢&#…

天津大数据培训机构 大数据时代已到来!

大数据时代已经来临&#xff0c;越来越多的人开始关注大数据&#xff0c;并且准备转行大数据。但是&#xff0c;对于一个外行人或者小白来说&#xff0c;大数据是什么&#xff1f;大数据需要学什么&#xff1f;什么样的大数据培训机构是靠谱的&#xff1f;这几个简单的问题就足…

Ubuntu无网络解决办法

1.进入root并输入密码 sudo su 2.更新NetworkManager的配置 用vim打开NetworkManager.conf vim /etc/NetworkManager/NetworkManager.conf 将第五行 managedFalse 改为 managedTrue 。 如果本身就是True就不用改了。 3.删除NetworkManager配置 service NetworkManager st…

服务器终端快速下载coco数据集

######解压到当前文件夹 sudo apt-get install aria2 aria2c -c <url> #<url>即为官网下载地址# url # download images http://images.cocodataset.org/zips/train2017.zip http://images.cocodataset.org/zips/val2017.zip# download annotations http://i…

Python等高线图的绘制(Matplotlib篇-11)

Python等高线图的绘制(Matplotlib篇-11)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ…

力扣hot100 对称二叉树 递归 队列

&#x1f468;‍&#x1f3eb; 题目地址 &#x1f468;‍&#x1f3eb; 参考思路 递归的难点在于&#xff1a;找到可以递归的点 为什么很多人觉得递归一看就会&#xff0c;一写就废。 或者说是自己写无法写出来&#xff0c;关键就是你对递归理解的深不深。 对于此题&#xf…

蓝桥杯单片机进阶教程2——简单模块

第一章 温度模块DS18B20 1、比赛过程中的参考资料&#xff08;比赛会提供&#xff0c;按照这个就不用记忆了&#xff09; 原理图 文章第四页 文章第十到十二页 2、分析考题 &#xff08;1&#xff09;只考最简单的温度转换&#xff0c;温度读取 3、实验 进行最简单…