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

Pytest自动化框架-权威教程02-Pytest 使用及调用方法

Pytest 使用及调用方法

使用python -m pytest调用pytest

2.0版本新增

你可以在命令行中通过Python编译器来调用Pytest执行测试:

Copypython -m pytest [...]

通过python调用会将当前目录也添加到sys.path中,除此之外,这几乎等同于命令行直接调用pytest [...]。

可能出现的执行退出code

执行pytest可能会出现6中不同的退出code:

  • 退出code 0: 收集并成功通过所有测试用例

  • 退出code 1: 收集并运行了测试,部分测试用例执行失败

  • 退出code 2: 测试执行被用户中断

  • 退出code 3: 执行测试中发生内部错误

  • 退出code 4: pytest命令行使用错误

  • 退出code 5: 没有收集到测试用例

获取版本路径、命令行选项及环境变量相关帮助

Copypytest --version   # 显示pytest导入位置
pytest --fixtures  # 显示可用的内置方法参数
pytest -h --help# 显示命令行及配置文件选项帮助信息

第1(N)次失败后停止测试

在第1(N)次用例失败后停止测试执行:

Copypytest -x            # 第1次失败后停止
pytest --maxfail=2    # 2次失败后停止

指定及选择测试用例

Pytest支持多种从命令行运行和选择测试用例的方法。

运行模块内所有用例

Copypytest test_mod.py

运行目录内所有用例

Copypytest testing/

按关键字表达式运行用例

Copypytest -k "MyClass and not method"

这将运行包含与指定表达式匹配的名称的测试用例,其中可以包括文件名、类名和函数名作为变量,并且支持Python运算符(and和or)操作。上面的示例将运行TestMyClass.test_something但不运行TestMyClass.test_method_simple。

按节点id运行测试

每次执行收集到的测试用例集合都会被分配一个唯一的nodeid,其中包含模块文件名,后跟说明符,如类名、函数名及参数,由:: 字符分隔。

执行模块中某条指定的测试用例如:

Copypytest test_mod.py::test_func

另一个通过命令行挑选所执行测试用例的示例如:

Copypytest test_mod.py::TestClass::test_method

通过标记(Mark)表达式运行测试

Copypytest -m slow

这将会执行所有带@pytest.mark.slow装饰器的用例。

有关更多信息,请参阅: 标记

从包中运行测试

Copypytest --pyargs pkg.testing

这将会导入pkg.testing并使用其文件系统位置来查找和运行测试。

修改Python原生追溯(traceback)信息

修改回追溯信息示例如:

Copypytest --showlocals # 在追溯信息中显示局部变量
pytest -l           # 显示局部变量 (简写)pytest --tb=auto    # (默认) 第1和最后1条使用详细追溯信息,其他使用简短追溯信息pytest --tb=long    # 详尽,信息丰富的追溯信息格式
pytest --tb=short   # 简短的追溯信息格式
pytest --tb=line    # 每个失败信息一行
pytest --tb=native  # Python标准库格式
pytest --tb=no      # 不使用追溯信息

详尽的测试结果摘要

2.9版本新增

-r标志可用于在测试会话结束时显示测试结果摘要,从而可以在拥有大量用例的测试套件中轻松获得所有失败、跳过、标记失败(xfails)等测试结果的清晰描述。

例如:

Copy$ pytest -ra
=========================== test session starts ============================
platform linux -- Python 3.x.y,pytest-3.x.y,py-1.x.y,pluggy-0.x.y
rootdir: $REGENDOC_TMPDIR,inifile:
collected 0 items======================= no tests ran in 0.12 seconds =======================

-r选项接受后面的多个字符,上面使用的a表示“除了执行通过(Pass)以外所有的结果”。

以下是可以使用的可用字符的完整列表:

-f - 失败的用例

-E - 出错的用例

-s - 跳过的用例

-x - 标记失败的用例

-X - 标记成功的用例

-p - 成功用例

-P - 成功用例并输出信息

-a - 所有pP状态以外的用例

可以使用多个字符,例如,只查看失败和跳过的用例,你可以执行:

Copy$ pytest -rfs
=========================== test session starts ============================
platform linux -- Python 3.x.y,pytest-3.x.y,py-1.x.y,pluggy-0.x.y
rootdir: $REGENDOC_TMPDIR,inifile:
collected 0 items======================= no tests ran in 0.12 seconds =======================

执行失败时进入PDB(Python调试器)

Python附带一个名为PDB的内置Python调试器。 pytest允许通过命令行选项进入PDB提示符:

Copypytest --pdb

这将在每次失败(或KeyboardInterrupt)时调用Python调试器。一般,你可能只希望在第一次失败的测试中执行此操作以了解某种故障情况:

Copypytest -x --pdb   # 在第一次用例失败时进入PDB
pytest --pdb --maxfail=3  # 在前3次失败是进入PDB

注意,在任何失败时,异常信息都存储在`sys.last_value1,1sys.last_type1和1sys.last_traceback1中。在交互模式中,这允许用户使用任何调试工具进行事后调试。也可以手动访问异常信息,例如:

Copy>>> import sys
>>> sys.last_traceback.tb_lineno
42
>>> sys.last_value
AssertionError('assert result == "ok"',)

测试开始时进入PDB(Python调试器)

pytest允许用户通过命令行选项在每次测试开始时立即进入PDB提示符:

Copypytest --trace

这将在每次测试开始时调用Python调试器。

设置断点

要在代码中设置断点,需要在代码中使用Python原生import pdb; pdb.set_trace()进行调用,Pytest会自动禁用显示print输出, 并捕获该用例输出结果:

  • 其他测试中的输出捕获不受影响。

  • 任何先前的测试输出已经被捕获并将被处理。

  • 在同一测试中生成的任何后续输出都不会被捕获,而是直接发送到sys.stdout。注意:即使是退出交互式PDB跟踪会话并继续常规测试后发生的测试输出,这也适用。

使用内置断点方法

Python 3.7引入了内置breakpoint()函数。 Pytest支持以下几种使用breakpoint()的方式:

  • 当PYTHONBREAKPOINT设置为默认值,调用breakpoint()时,pytest将使用其内部PDB跟踪交互界面(PDB trace UI)而不是Python自带的pdb。

  • 测试完成后,默认会重置为Python自带的PDB跟踪交互界面。

  • 在pytest后使用--pdb参数,在失败的测试/未处理异常中,pytest内部PDB跟踪交互界面与breakpoint()同时使用。

  • --pdbcls参数可指定要使用的调试器类。

分析测试用例执行时间

显示执行最慢的10条测试用例如:

Copypytest --durations=10

默认情况下,Pytest不会显示<0.01s的测试时间, 除非在命令行上传递-vv。

创建JUnit XML格式的测试报告

要创建可由Jenkins或其他持续集成软件读取的XML测试报告,可以使用:

Copypytest --junitxml=path

运行结束后,在指定路径path下创建一个XML报告文件

3.1版本新增

可以通过修改配置中junit_suite_name字段的名称来更改XML报告中root test suite的名称。

Copy[pytest]junit_suite_name = my_suite

record_property(添加新属性)

版本2.8新增

版本3.5更改: 在所有报告生成器(reporter)中用户属性record_xml_property项已改为record_property,record_xml_property现已弃用。

可以使用record_property项来在XML报告中增加更多的日志信息:

Copydeftest_function(record_property):record_property("example_key",1)assertTrue

在生成的testcase标签是会添加一个额外的属性example_key="1":

Copy<testcaseclassname="test_function"file="test_function.py"line="0"name="test_function"time="0.0009"><properties><propertyname="example_key"value="1" /></properties></testcase>

或者,你可以将此函数集成在自定义标记装饰器中:

Copy# conftest.py文件内容defpytest_collection_modifyitems(session,config,items):for item in items:for marker in item.iter_markers(name="test_id"):test_id = marker.args[0]item.user_properties.append(("test_id",test_id))

在你的测试用例中使用:

Copy# test_function.py文件内容import pytest@pytest.mark.test_id(1501)deftest_function():assertTrue

这将导致:

Copy<testcaseclassname="test_function"file="test_function.py"line="0"name="test_function"time="0.0009"><properties><propertyname="test_id"value="1501" /></properties></testcase>
警告:
record_property是一个实验性函数,将来可能会发生变化。
另外,这将破坏一些XML结构验证,与某些持续集成软件一起使用时,可能会导致一些问题。

record_xml_attribute(修改xml节点属性)

3.4版本新增

可以使用record_xml_attribute fixture向testcase`标签中添加其他xml属性。也可以用来覆盖原有属性值:

Copydeftest_function(record_xml_attribute):record_xml_attribute("assertions","REQ-1234")record_xml_attribute("classname","custom_classname")print("hello world")assertTrue

与record_property不同, 它不会在节点下添加子元素,而是在生成的testcase标签内添加一个属性assertions ="REQ-1234",并使用classname = custom_classname覆盖默认的classname属性:

Copy<testcaseclassname="custom_classname"file="test_function.py"line="0"name="test_function"time="0.003"assertions="REQ-1234"><system-out>hello world</system-out></testcase>
警告:
record_xml_attribute也是一个实验性函数,其界面可能会被更强大,更通用的未来版本所取代。但是,将保留函数本身。

通过使用record_xml_property可以为在使用持续集成工具解析xml报告时提供帮助。 但是,一些解析器对允许的元素和属性非常严格。 许多工具使用xsd模式(如下例所示)来验证传入的xml。 确保使用解析器允许的属性名称。

以下是Jenkins用于验证xml报告的结构:

Copy<xs:elementname="testcase"><xs:complexType><xs:sequence><xs:elementref="skipped"minOccurs="0"maxOccurs="1"/><xs:elementref="error"minOccurs="0"maxOccurs="unbounded"/><xs:elementref="failure"minOccurs="0"maxOccurs="unbounded"/><xs:elementref="system-out"minOccurs="0"maxOccurs="unbounded"/><xs:elementref="system-err"minOccurs="0"maxOccurs="unbounded"/></xs:sequence><xs:attributename="name"type="xs:string"use="required"/><xs:attributename="assertions"type="xs:string"use="optional"/><xs:attributename="time"type="xs:string"use="optional"/><xs:attributename="classname"type="xs:string"use="optional"/><xs:attributename="status"type="xs:string"use="optional"/></xs:complexType></xs:element>

LogXML: add_global_property

3.0版本新增

如果要在testsuite级别添加属性节点,该节点可能包含与所有测试用例相关的属性,则可以使用LogXML.add_global_properties

Copyimport pytest@pytest.fixture(scope="session")deflog_global_env_facts(f):if pytest.config.pluginmanager.hasplugin("junitxml"):my_junit = getattr(pytest.config,"_xml",None)my_junit.add_global_property("ARCH","PPC")my_junit.add_global_property("STORAGE_TYPE","CEPH")@pytest.mark.usefixtures(log_global_env_facts.__name__)defstart_and_prepare_env():passclassTestMe(object):deftest_foo(self):assertTrue

这会在生成的xml中的testsuite节点下的属性节中添加:

Copy<testsuiteerrors="0"failures="0"name="pytest"skips="0"tests="1"time="0.006"><properties><propertyname="ARCH"value="PPC"/><propertyname="STORAGE_TYPE"value="CEPH"/></properties><testcaseclassname="test_me.TestMe"file="test_me.py"line="16"name="test_foo"time="0.000243663787842"/></testsuite>
警告:
这依然是一个实验性的函数,其界面也可能会被更强大,更通用的未来版本所取代, 但也将保留该函数。

创建结果日志格式文件

3.0版本之后不推荐使用,计划在4.0版本中删除。

对于仍然需要类似函数的用户来说,可以使用提供测试数据流的pytest-tap插件。

如有任何疑虑,可以[建立一个问题(open an issue)。

Copypytest --resultlog=path

执行后,在path路径中会创建一个纯文本结果日志文件,这些文件可以用于:例如,在PyPy-test网页显示多个修订版的测试结果。

将测试报告发送到在线pastebin服务

为每条测试失败用例建立一个日志URL链接:

Copypytest --pastebin=failed

这会将测试运行信息提交到一个提供粘贴服务的远程服务器上,并为每条测试失败用例提供一个URL。 你可以像平常一样查看搜集结果,或者使用-x参数,来只显示某个特定的测试失败结果。

为整个测试执行日志建立一个URL链接:

Copypytest --pastebin=all

目前只实现了粘贴到http://bpaste.net网站的服务。

禁用插件

可以通过-p选项与前缀no:一起使用,来在运行时禁用加载特定插件。

例如:要禁用加载从文本文件执行doctest测试的doctest插件,可以通过以下方式运行Pytest:

Copypytest -p no:doctest

在Python代码调用pytest

版本2.0新增

你可以在Python代码中直接调用pytest:

Copypytest.main()

这就和你从命令行调用“pytest”一样。但它不会引发SystemExit,而是返回exitcode。 你可以传入选项和参数。

Copypytest.main(['-x','mytestdir'])

你可以为pytest.main指定其他插件:

Copy# myinvoke.py文件内容import pytest
classMyPlugin(object):defpytest_sessionfinish(self):print("*** test run reporting finishing")pytest.main(["-qq"],plugins=[MyPlugin()])

运行它将显示已添加MyPlugin并调用其中的hook方法:

Copy$ python myinvoke.py
.                                                                   [100%]
*** test run reporting finishing
注意:
调用pytest.main()将会导入所有测试用例及其导入的其他模块。由于python导入系统的缓存机制,从同一进程后续调用pytest.main()不会反映调用之间对这些文件的更改。 因此,不建议从同一进程(例如,为了新运行测试)多次调用pytest.main()。

实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

电商项目实战

web测试项目

web+App+h5+小程序 测试项目

接口自动化测试实战项目

Linux实战项目

面试资料

我们进阶学习自动化测试必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

以上资料,对于想要测试进阶的朋友们来说应该会很有帮助,需要的小伙伴可以后台私信找我免费领取

总结

我见过很多leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了好几年,更夸张的是7、8年工作内容的重复性比较高,没有什么技术含量的工作。

凡事要趁早,特别是技术行业,一定要提升技术功底,丰富自动化项目实战经验,这对于你未来几年职业规划,以及测试技术掌握的深度非常有帮助。

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!!

相关文章:

Pytest自动化框架-权威教程02-Pytest 使用及调用方法

Pytest 使用及调用方法使用python -m pytest调用pytest2.0版本新增你可以在命令行中通过Python编译器来调用Pytest执行测试:Copypython -m pytest [...]通过python调用会将当前目录也添加到sys.path中,除此之外,这几乎等同于命令行直接调用pytest [...]。可能出现的执行退出cod…...

大数据技术——概述

根据IBM前首席执行官郭士纳的观点&#xff0c;IT领域每隔十五年就会迎来一次重大变革三次信息化浪潮1.存储设备容量不断增加2.CPU处理能力大幅提升3.网络带宽不断增加运营式系统阶段数据库的出现使得数据管理的复杂度大大降低,数据往往伴随着一定的运营活动而产生并记录在数据库…...

java-代理模式

背景 代理模式指的是提供一个代理对象用于访问目标对象,可以很方便的在不修改目标对象的情况下,提供额外的功能,扩展目标对象。 case1:静态代理 约束:代理对象和目标对象要实现相同的接口 优点:不修改目标对象的情况下扩展功能 缺点:必须实现相同的接口,如果接口发生变…...

路由网络的构建与配置

Part.1 ⑴ 需求分析 在构建的局域网中&#xff0c;通过路由器间配置静态路由&#xff0c;实现PC1和PC2主机直接连通&#xff0c;主机网段不能与路由器直接互联网段通信。 ⑵ 环境要求 配置虚拟网卡的计算机&#xff0c;安装华为eNSP模拟软件。 规划拓扑 Part.2 ⑴ 拓扑描述…...

软件测试-接口测试-数据库管理

文章目录 1.数据库介绍2.数据库基本操作2.1安装2.2 操作流程2.3数据准备2.4数据的基本操作2.4.1 连接数据库并查询数据库版本2.4.2 连接数据库执行数据库查询操作2.4.3 连接数据库执行数据库插入操作2.4.4 连接数据库执行数据库更新操作3.数据库事务操作3.1 案例:数据不一致性…...

【华为OD机试 】天然蓄水库(C++ Java JavaScript Python)

文章目录 题目描述输入描述输出描述备注用例题目解析C++JavaScriptJavaPython题目描述 公元2919年,人类终于发现了一颗宜居星球——X星。 现想在X星一片连绵起伏的山脉间建一个天热蓄水库,如何选取水库边界,使蓄水量最大? 要求: 山脉用正整数数组s表示,每个元素代表山脉…...

普元EOS中导出excl页面下载

起因 需要做一个筛选功能的导出表格 解决办法 这个垃圾eos我是真受不了,sb玩意的缺点三天三夜也说不完 后边就没法整response的这些个东西,可真是够愁人的 在网上搜了搜 在普元的帮助文档里也看了看 普元提供的像是老太太的裹脚布一般又臭又长 参照这个可以看一下...

内存的管理

取指令——译码——执行——返存 计组课我们学过cpu真正读指令并非是从内存中读入&#xff0c;而是从cache读和存&#xff0c;再由cache进行取指或返存&#xff0c;因为cpu指令周期比内存周期速度快很多&#xff0c;cpu若要取指或返存都需要等待内存完成他的动作才可以进行下一…...

OpenFeign 切换HttpClient遇到的问题

背景 OpenFeign支持三种Http请求方式&#xff0c;默认情况下通过jdk中的HttpURLConnection向下游服务发起http请求&#xff08;详见下图&#xff0c;源码详见feign.Client.Default&#xff09;&#xff0c; 默认的Client 采用 HttpURLConnection&#xff0c; 这种是无法复用的…...

流计算框架storm概览

Attention: supervison 和 nimbus的状态都实时保存在zookeeper集群中和本地. Enchance, this means you can kill -9 Nimbus or the Supervisors and theyll start back up as nothing happened. Topologies 1. storm jar all-my-code.jar org.apache.storm.MyTopology a…...

如何使用Coercer强制Windows Server认证任意主机

关于Coercer Coercer是一款功能强大的Python脚本&#xff0c;该工具可以通过九种不同的方法来强制让一台Windows Server认证任意主机。 功能介绍 1、自动检测远程设备的开放SMP管道&#xff1b; 2、一一调用存在安全漏洞的RPC功能来强制一台Windows Server认证任意主机&#…...

【小程序】已有公众号认证,一步一步申请小程序(图文)

一、登陆公众号后台&#xff0c;找到左侧广告与服务&#xff0c;小程序管理&#xff0c;开通 二、选择快速注册认证小程序 三、快速创建 四、选择微信认证资质&#xff08;复用&#xff09;&#xff0c;这样不用再付认证费了 五、需要一个新的邮箱&#xff0c;这点挺让人无语&a…...

Redis学习笔记:缓存运用常见问题

这是本人学习的总结&#xff0c;主要学习资料如下 马士兵教育 目录1、数据一致性的问题1.1、新增数据一致性的问题1.2、修改/删除一致性问题1.2.1、操作分析1.2.1、总结和再深入2、缓存穿透&#xff0c;缓存击穿和缓存雪崩2.1、缓存穿透&#xff08;查不到&#xff09;2.1.1、…...

使用python 脚本挑出coco 数据集中的某一类数据

文章大纲 简介代码样例制作一个走路玩手机数据集简介 MS COCO的全称是Microsoft Common Objects in Context,起源于微软于2014年出资标注的Microsoft COCO数据集,与ImageNet竞赛一样,被视为是计算机视觉领域最受关注和最权威的比赛之一。 COCO数据集是一个大型的、丰富的物…...

Python虚拟环境(pipenv、venv、conda一网打尽)[通俗易懂]

一、什么是虚拟环境 1. 什么是Python环境 要搞清楚什么是虚拟环境&#xff0c;首先要清楚Python的环境指的是什么。当我们在执行python test.py时&#xff0c;思考如下问题&#xff1a; python哪里来&#xff1f;这个主要归功于配置的系统环境变量PATH&#xff0c;当我们在命…...

Android Kotlin实战之高阶使用泛型扩展协程懒加载详解

前言&#xff1a; 通过前面几篇文章&#xff0c;我们已基本掌握kotlin的基本写法与使用&#xff0c;但是在开发过程中&#xff0c;以及一些开源的API还是会出现大家模式的高阶玩法以及问题&#xff0c;如何避免&#xff0c;接下来讲解针对原来的文章进行一些扩展&#xff0c;解…...

数字映射:数字孪生技术的应用场景及作用

对于许多行业来说&#xff0c;数字孪生技术是未来。数字孪生定义数字孪生不仅仅是某物的副本或克隆&#xff0c;它是对象或系统的动态实时表示。数字孪生是一种虚拟模型&#xff0c;旨在准确反映物理对象。是物理对象、流程、服务或环境的数字表示&#xff0c;其行为和外观与现…...

配置二层远程端口镜像案例

实验拓扑&#xff1a; 实验需求&#xff1a; 如图1所示&#xff0c;某公司行政部通过SwitchA与外部Internet通信&#xff0c;监控设备Server通过SwitchB与SwitchA相连。 现在希望Server能够远程对行政部访问Internet的流量进行监控。 操作步骤&#xff1a; 配置观察端口 # 在…...

Linux-0.11 kernel目录fork.c详解

Linux-0.11 kernel目录fork.c详解 fork.c中主要实现内核对于创建新的进程的行为。其中copy_process是其最核心的函数。 copy_process int copy_process(int nr,long ebp,long edi,long esi,long gs,long none,long ebx,long ecx,long edx,long fs,long es,long ds,long eip,…...

如何或者无插件Web页面监控播放软件LiveNVR的固定视频流地址,实现大屏上墙、播放、视频分析等目的

1、LiveNVR介绍 LiveNVR的安防监控的视频直播&#xff0c;可以按标准的Onvif/RTSP协议接入监控设备&#xff0c;也可以通过海康、大华、天地伟业等厂家私有SDK接入监控&#xff0c;实现web页面的播放和录像回放。 可以分发HTTP-FLV、WS-FLV、WebRTC、RTMP、HLS(M3U8)、RTSP等多…...

postman断言脚本(2)

https://learning.postman.com/docs/writing-scripts/script-references/test-examples/#parsing-response-body-data状态码pm.test("Status code is 200",function(){pm.response.to.have.status(200);});pm.test("Status code is 200",()>{pm.expect(…...

js中?.、??的具体用法

1、?. &#xff08;可选链运算符&#xff09; 在javascript中如果一个值为null、undefined&#xff0c;直接访问下面的属性&#xff0c; 会报 Uncaught TypeError: Cannot read properties of undefined 异常错误。 而在真实的项目中是会出现这种情况&#xff0c;有这个值就…...

刷题笔记1 | 704. 二分查找,27. 移除元素

704. 二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 输入: nums [-1,0,3,5,9,12], target 9 输出: 4 …...

柔性电路板的优点、分类和发展方向

柔性电路板是pcb电路板的一种&#xff0c;又称为软板、柔性印刷电路板&#xff0c;主要是由柔性基材制作而成的一种具有高可靠性、高可挠性的印刷电路板&#xff0c;具有厚度薄、可弯曲、配线密度高、重量轻、灵活度高等特点&#xff0c;主要用在手机、电脑、数码相机、家用电器…...

OpenCV入门(二)快速学会OpenCV1图像基本操作

OpenCV入门&#xff08;一&#xff09;快速学会OpenCV1图像基本操作 不讲大道理&#xff0c;直接上干货。操作起来。 众所周知&#xff0c;OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大。今天就从读取图片&#xff0c;显示图片&#xff0c;输出图片信息和简单的…...

Redis源码---有序集合为何能同时支持点查询和范围查询

目录 前言 Sorted Set 基本结构 跳表的设计与实现 跳表数据结构 跳表结点查询 跳表结点层数设置 哈希表和跳表的组合使用 前言 有序集合&#xff08;Sorted Set&#xff09;是 Redis 中一种重要的数据类型&#xff0c;它本身是集合类型&#xff0c;同时也可以支持集合中…...

从计费出账加速的设计谈周期性业务的优化思考

1号恐惧症 你有没有这样的做IT的朋友&#xff1f;年纪轻轻&#xff0c;就头发花白或者秃顶&#xff0c;然后每个月周期性的精神不振&#xff0c;一到月底&#xff0c;就有明显的焦虑。如果有&#xff0c;他可能就是运营商行业做计费运营的&#xff0c;请对他好点&#xff0c;特…...

垃圾回收的概念与算法(第四章)

《实战Java虚拟机&#xff1a;JVM故障诊断与性能优化 (第2版)》 第4章 垃圾回收的概念与算法 目标&#xff1a; 了解什么是垃圾回收学习几种常用的垃圾回收算法掌握可触及性的概念理解 Stop-The-World&#xff08;STW&#xff09; 4.1. 认识垃圾回收 - 内存管理清洁工 垃圾…...

让您的客户了解您的制造过程“VR云看厂实时数字化展示”

一、工厂云考察&#xff0c;成为市场热点虚拟现实&#xff08;VR&#xff09;全景技术问世已久&#xff0c;但由于应用范围较为狭窄&#xff0c;一直未得到广泛应用。国外客户无法亲自到访&#xff0c;从而导致考察难、产品取样难等问题&#xff0c;特别是对于大型制造企业来说…...

CV——day80 读论文:DLT-Net:可行驶区域、车道线和交通对象的联合检测

DLT-Net:可行驶区域、车道线和交通对象的联合检测I. INTRODUCTIONII. ANALYSIS OF PERCEPTIONIV. DLT-NETA. EncoderB. Decoder1) Drivable Area Branch(可行驶区域分支)2) Context Tensor(上下文张量)3) Lane Line Branch(车道线分支)4) Traffic Object Branch(目标检测对象分…...

浏阳做网站推荐/外链推广论坛

本站使用「署名 4.0 国际 (CC BY 4.0)」许可协议&#xff0c;欢迎转载、或重新修改使用&#xff0c;但需要注明来源。 署名 4.0 国际 (CC BY 4.0)本文作者: 苏洋创建时间: 2018年07月19日统计字数: 2595字阅读时间: 6分钟阅读原始链接: https://soulteary.com/2018/07/19/clean…...

深圳汇网网站建设/搜索引擎哪个最好用

转载“共享博客” 原文 http://www.sharedblog.cn/?post120 容器溢出 语法&#xff1a; overflow: visible | hidden | scroll | auto | inherit; visible: 默认值&#xff0c;容器溢出不裁剪&#xff0c;正常显示; hidden: 溢出部分隐藏不可见; scroll: 当容器没有溢…...

网站建设推广优化招聘模板/百度在线

1、打开secureCRT&#xff0c;连接到数据库所在的linux机器。切换到了oracle用户下。 su - oracle 2、关掉oracle的监听进程 lsnrctl stop 这时外部没法连接到数据库了。 3、杀掉所有session。 ps -ef|grep $ORACLE_SID|grep -v ora_|grep LOCALNO|awk {print $2}|xargs …...

网页游戏排行榜前十推荐/seo怎么做关键词排名

kafka采坑记录&#xff1a; 1、kafka服务端server.properties中的broker.id集群内需要唯一。 2、kafka config文件中listeners和advertised.listeners需要配置本机ip:9092地址&#xff0c;不然消费不到数据。&#xff08;如:192.168.217.128:9092&#xff09; 3、java代码客户端…...

用c 做网站设计系统的项目作业/成都网站seo排名优化

关于Debug和Release之本质区别的讨论本文主要包含如下内容&#xff1a;1. Debug 和 Release 编译方式的本质区别2. 哪些情况下 Release 版会出错2. 怎样“调试” Release 版的程序 一、Debug 和 Release 编译方式的本质区别Debug 通常称为调试版本&#xff0c;它包含调试信息&a…...

生成图片链接的网站/windows优化大师是病毒吗

金九银十的招聘旺季&#xff0c;作为Java工程师的你想要跳槽大厂&#xff0c;但不知道大厂Java面试究竟考些什么&#xff1f;Java学习内容复杂、网上资料良莠不齐&#xff0c;想要靠自己梳理清楚确实不容易。 为了帮助想要跳槽进大厂的你在金三银四顺利通过Java面试&#xff0c…...