很多名称其实看字面意思都挺抽象的,有时看群里的测试大佬在不停蹦这类术语,感觉很高大上
但其实很多你应该是知道的,只不过没想到别人是这样叫它的。又或者你的主编程语言不是 Java
所以看不懂他们在讲啥,因为大部分是 Java 后端的知识点或者是运维的知识 (这帮卷王)。
我尝试翻译成【人话】,方便刚入行的新人。也欢迎大家在评论区补充。
=𒐫=𒐫=𒐫=
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 该名词如果熟悉工地的,应该会知道脚手架是建筑时 房子周围搭的铁架子。软件开发中,脚手架的意思就是一组预设的代码和文件结构,方便开发人员更快的搭建一个基本的项目框架。前端框架大都有脚手架工具,如使用 React 脚手架创建一个 react 项目
$ npx create-react-app react-basic // npx create-react-app 是固定命令,create-react-app是React脚手架的名称
生成如下:
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 语义上,就是理解某件事物需要了解它的环境、背景、条件等因素,助于更准确解释信息。
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 可以理解为 更好的解决问题的方法,大部分设计模式的目的是:解决复杂性、提高代码质量、降低耦合度,并促进可维护性和可扩展性。例如写接口自动化时,会想到用 yaml 做测试数据管理实现数据驱动,这就是一种将测试数据和测试逻辑分离的设计模式。
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 集群就是多台相互独立的计算机,这些计算机通过网络连接在一起就,组成一个计算机服务系统。在集群中,每台计算机被称为一个节点(Node),每个节点都是运行各自服务的独立服务器,节点之间通过网络通信进行协作,共同完成任务或服务。
通俗的讲就是:一个餐厅的老板为了提高服务质量,雇佣了多名服务员,他们相互配合,如果某个服务员忙不过来,其他服务员可以帮助他,或者接替他的工作,确保每个顾客都能得到及时的服务,以及每个服务员都负责特定的区域或特定类型的服务,更有效地分工合作,提高整个团队的工作效率。
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 分布式系统是由多台计算机组成的系统,这些计算机通过网络连接在一起,共同完成某个任务或提供某种服务,不同的是每个节点负责的东西不同,这些节点之间通过相互通信和协作来完成整个系统的任务。
通俗的讲就是:一个餐厅的老板为了提高服务质量,请了多个厨师,A 厨师负责炒菜,B 厨师负责煮面,C 厨师负责烤肉等等。每位厨师都独立地准备自己负责的菜品,然后将做好的菜品交给服务员上菜
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 在群里有时候看见哪些大佬讨论性能时,会提到 IO。这个词如果大学时有听过《计算机科学导论》这门课,是会有印象的。
IO(Input/Output)即输入/输出,是计算机系统中的一个重要概念,用来描述计算机与外部设备(如磁盘、网络、键盘、显示器等)之间的数据传输过程。性能测试中需要关注 IO 的原因主要有几点:
影响系统整体性能: IO 操作的性能直接影响着整个系统的性能。如在 Web 应用程序中,IO 操作包括从数据库读取数据、向客户端发送响应等,这些 IO 操作的性能直接影响着用户体验和系统的响应速度
可能是称为瓶颈的原因:某些场景下,系统需要频繁地读取大量数据时,IO 操作的性能可能成为系统性能的瓶颈,导致系统响应速度变慢
资源消耗: IO 操作通常需要消耗系统资源,如 CPU、内存、磁盘等。当系统的 IO 操作过多或者 IO 操作的性能较差时,可能会导致系统资源紧张,影响系统的稳定性和可靠性
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ DDD(领域驱动设计)是一种软件开发方法论,旨在通过强调领域模型的重要性来解决复杂业务需求和软件系统设计的挑战
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ TDD(Test-Driven Development,测试驱动开发)是一种软件开发方法论,它强调在编写实际代码之前先编写测试用例,并且通过测试驱动实现代码的开发过程。TDD 的核心理念是 “红 - 绿-重构”,即先编写失败的测试(红),然后编写足够的代码以使测试通过(绿)
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 这个概念不是国外的,最早由阿里提出,衍生出很多概念如:技术中台、业务中台、组织中台、数据中台等
具体可以看下这个,摘编自《中台架构与实现:基于 DDD 和微服务》
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 之前有段时间好像比较流行,这种把代码生成这种可交互式的网络可视化图,了解这类工具的最佳方式就是自己写一下。
这里的 demo 是用 python 的【pyvis】创建交互式网络可视化和【inspect】提取对象的各种属性和信息。这里的 html 文件可以直接用 pyvis 的内置方法生成,其实你需要的只是用 inspect 去把代码拆解提取下,然后根据 pyvis 的方法连接好即可
from pyvis.network import Network
net = Network() #新建一个对象
net.add_node("a",label="节点1",title="我是节点1",color='#00ff1e')
net.add_node(2,label="呵呵呵2",title="我是节点2",color='#00ff1e')
net.add_node(3,label="呵呵呵3",title="我是节点3",color='#00ff1e')
net.add_edge("a", 2) #节点连接
net.add_edge("a", 3)
net.show_buttons(filter_=['physics'])
net.show("demo.html",notebook=False) #最新版本的pyvis需要加notbook=false的配置,否则会报错
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ CDN 是内容分发网络(Content Delivery Network)的缩写。它就像是一个快递网络,它把互联网上的内容,比如网页、图片、视频等,分散存储在世界各地的特殊 “快递站”(节点)上。当你在网上访问一个网页或者看一个视频时,CDN 会找到离你最近的 “快递站”,从那里取得你需要的内容,然后迅速送到你手上。这样,你就能更快地获取网站的内容,而且网站也能分担更多的访问压力,保持稳定运行。这里的节点,在 CDN 中,一个节点通常指的是一个边缘节点(Edge Node),它可以是一个服务器,也可以是一个服务器集群。
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 看下图:
𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫
▧▧ 学过 UI 自动化培训视频的都应该知道,其实就是一种设计模式。 为每个页面或一组相关页面创建一个 Page Object 类。这个类包含了页面的元素定位和与页面交互的方法。然后在测试用例中调用这些类,主要目的是如果页面发生变化,只需更新相应的 Page Object 类,而不用修改测试用例。
登录页类:
class LoginPage:
def __init__(self, driver):
self.driver = driver
self.username_field = driver.find_element(By.ID, 'username')
self.password_field = driver.find_element(By.ID, 'password')
self.login_button = driver.find_element(By.ID, 'loginButton')
def login(self, username, password):
self.username_field.send_keys(username)
self.password_field.send_keys(password)
self.login_button.click()
测试用例:
def test_login():
driver = webdriver.Chrome()
login_page = LoginPage(driver)
login_page.login('testuser', 'password123')
assert 'Welcome' in driver.page_source
driver.quit()
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 这个词我也挺好奇是谁发明的,本质上就是生成测试数据的脚本封装成平台,所以干嘛不叫造数平台。。。。
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 测试执行或数据处理过程中,由于一些异常情况、错误操作、或者测试环境配置不当等原因,导致系统中出现了不符合预期的、异常或错误的数据
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 捕获和回放 HTTP 流量,模拟生产环境中的流量,以便进行性能测试、故障排除,或者在其他环境中重现实际用户的操作
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 社区里这个词应该大家看多了,至于实际意思是什么,可能有些人不知道。正常的开发流程是:开发➥测试➥运维,
但现在我们的测试不想夹在中间,想从流程中做更多的干预,变成这样: 开发➥ ☜㊖测试㊖☞➥运维,通俗的讲就是:
「开发不想做的事我做,运维不想管的事我管。一句话,开发/运维做得了的我要做,开发/运维不想做的我更要做,先做后测,产品特许!这就是测试左右移,够不够清楚?」☻
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 插桩本质就是在不改动源码的基础上,插入或许修改你想要的代码,如在 Android 开发中,如下图第二步在转为.class 的字节码后,插入代码,使其生成的 dex 执行文件带有你插入的代码,这过程中源码并未受到任何影响。
网图:
python 的 ast 做的 demo 例子:
import ast
import astor
expr = '''
def addNumber(num1,num2):
return num1 + num2
'''
# 将字符串解析成 AST
tree = ast.parse(expr)
# 定义要插入的打印语句
insert_print = ast.parse("print('Adding numbers:', num1, '+', num2, '=', num1 + num2)")
# 在函数的主体中插入打印语句
for node in tree.body:
if isinstance(node, ast.FunctionDef):
# 在函数定义的主体中的第一行插入打印语句
node.body.insert(0, insert_print.body[0])
# 将修改后的 AST 转换回字符串
modified_expr = astor.to_source(tree)
print(modified_expr)
运行后,打印的结果是
def addNumber(num1, num2):
print('Adding numbers:', num1, '+', num2, '=', num1 + num2)
return num1 + num2
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 这个直接谷歌,大部分解释都是这个⇲
【测试金字塔最初的原型分三层,底层是单元测试,中间层是 API 测试,上层 是 UI 自动化测试。而且底层的单元测试需要做最多的测试工作,越往上测试工作应该越少。根据《谷歌软件测试之道》的经验,三者对于精力投入的比例是:把 70% 的精力放在单元测试,20% 放在 API 测试,而剩下 10% 的精力放在 UI 测试】
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 一种测试思想,简单来说就是:当代码变更,针对研发的代码变更点以及关联功能点进行测试。
类比看病时,头痛就检查头,肚子痛就检查肚子,看起来经济实惠又快捷。但是,症状之间可能存在相互关联,某些症状可能是其他问题的表现,如果医生缺乏对该病患整体状况的全面理解,会耽误病情,所以你在大城市医院看病,一般都会走下血常规的检查。
相关知识可以看下这篇文章,说得挺全:https://juejin.cn/post/7230986641900683320
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 该概念来源于网飞,就是拍出《纸牌屋》那家公司。其方式就是模拟系统中可能出现的故障和异常情况,然后评估系统在不稳定状态下的稳定性和可靠性。个人感觉其实就是容灾演练,这个名词出现在很多文章里,但基本方向都在随机制造故障上,描述成探索性测试那样。(这种其实就应该交给运维和架构师来干,不归测试才对)
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 全链路通常是指对系统端到端执行路径,从用户发起请求开始,经过系统的各个组件和服务,最终系统返回响应结果的过程。这一点会有些人会和接口测试混淆,接口测试是验证接口的输入输出是否符合预期,涉及的范围是一个独立的服务,不涉及接口之间的交互和整体业务流程。以电商购买商品为例,一个网上购物动作的一条链路
全链路压测,也是压测压测整个购物系统的端到端执行路径,从用户发起请求到系统响应完成的整个过程,包括前端界面、后端服务、数据库、第三方服务等各个组件和服务的性能表现。
𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫
▧▧ 下面三个词应该经常在各种文章里提到,如果本身的技术栈里没有学过 java,是挺容易被混淆的,多谷歌下就行了。
简而言之 jvm 就是一个虚拟机,java 语言的解释器。jvm-sandbox 是在 jvm 的虚拟环境中创建一个独立的隔离环境,类似你在 windows 下新建了一个虚拟环境运行其他系统一样。jvm-sandbox-repeater 可以理解为被个性化的 jvm-sandbox,专门封装了录制回放协议功能。
jvm : JVM 是 Java 编程语言的运行环境,它负责将 Java 源代码编译成字节码,并在运行时执行这些字节码。JVM 提供了内存管理、垃圾回收、线程管理等基础设施,使得 Java 程序能够在不同的平台上运行
jvm-sandbox:JVM-Sandbox 是一个工具或框架,用于在 JVM 环境中创建安全沙箱(sandbox)
jvm-sandbox-repeater : jvm-sandbox-repeater 是 JVM-Sandbox 生态体系下的重要模块,它具备了 JVM-Sandbox 的所有功能,插件式设计旨在快速配置各种中间件,封装提供请求录制/回放基础协议,也通用了可扩展的各种丰富的 API
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 主要用于 java 项目的管理和构建,这个词常见于技术栈是 Java 的测试文章中,写过 Testng 应该清楚,用 maven 来管理 TestNG 的依赖,并且可以使用 maven 的命令来执行 TestNG 的测试。如果没用过 Java 的,那类比最像的话,maven 就有点相当于 python 的 pip
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 在 java 写的测试平台中,会看到打包部署这个流程。主语言为 python 的朋友大多会懵逼这个是啥,毕竟 python 是解释性语言
可以直接以源码形式部署。而 Java Web 要用 Maven 相应的构建命令去编译打包应用,生成 WAR 文件。本质上是一个压缩包,里面可以包含 Servlet、JSP、HTML、JavaScript、CSS 等文件,以及相关的配置文件和依赖库。
以个人编码 Java Web 应用并发布到阿里云为例子,大概流程如下:
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 看下面搜索到的解释,让其与 urllib 做下对比就能理解了:
Servlet(Java): Servlet 是 Java Web 开发中处理 HTTP 请求和生成响应的规范和接口集合。开发人员可以根据 Servlet 规范编写自己的 Servlet,通过继承 HttpServlet 类或者实现 Servlet 接口来处理不同类型的 HTTP 请求,并生成相应的 HTTP 响应。与 Python 的 urllib 相比,Servlet 更加高级、全面,提供了更多的功能和灵活性,适用于开发更加复杂的 Web 应用程序。
urllib(Python): urllib 是 Python 中用于处理 HTTP 请求和响应的标准库之一,提供了一组函数和类,用于发送 HTTP 请求、处理服务器响应、管理 URL 等。urllib 包含了多个模块,比如 urllib.request、urllib.parse、urllib.error 等,分别用于发送请求、解析 URL、处理错误等。虽然 urllib 可以完成基本的 HTTP 请求和响应处理,但相比于 Servlet,它的功能和灵活性较为有限,通常用于简单的网络访问和数据获取。
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ SDK 是 Software(软件) Development(开发) Kit(工具)的缩写,SDK 通常包含:API 文档、示例代码、工具集、库文件、配置文件 。通俗来讲就是一个工具包。
大部分在社区里提到的 SDK 应该都是泛指 Java SDK,Java SDK 也是一个工具集合,它包含:javac 编译器、Java 运行时环境(JRE)、Java 开发工具 (JDK)、Java 文档、Java 示例代码等
𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫
▧▧ 在招聘信息里经常看到这逼词,XX 故弄玄虚的常用词,测试不了解只因我们不是学的开发/运维,很正常。CI/CD 其实就是
持续集成 (Continuous Integration - CI) 、
持续交付 (Continuous Delivery - CD) 或者 持续部署 (Continuous Deployment - CD) 的缩写。
两个 CD 相关但有区别,使用哪种方式取决于组织的需求和风险偏好
目的:持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试阶段,到交付和部署)从而提高开发团队的效率、质量和交付速度
持续集成 (CI) 包含通用流程:
持续交付 (CD):
持续部署 (CD)
测试人员在 CI/CD 里可以参与的方面:
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 这个逼词也是最近招聘信息里喜欢加上去的,对于测试,写上这个可能就是想要你会点 docker 的指令和知识。
DevOps 是开发 (Development) 和运维 (Operations) 的合成词,是一种软件开发和 IT 运维协同工作的文化和实践理念,不是什么工具或者技术名称,核心就是流程的统一和自动化。上面的 CI/CD 就可以称为 DevOps 流程的一部分,还有大家耳熟能详的
容器技术(如 Docker)和容器编排工具(如 Kubernetes),都是为了更加方便的部署,促进开发和运维之间的一致性。
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ K8S 其实就是 Kubernetes,之所以叫 K8S 是因为 K 和 S 之间有 8 个单词,是一种简称,Kubernetes 可以被视为一个类似于操作系统的管理平台。它负责管理和协调整个容器集群的资源,包括调度容器、管理存储、网络等方面的功能,类似于操作系统负责管理和协调计算机系统的资源
𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫
▧▧ Swagger 是一个工具集,用于设计、构建、文档化和消费 RESTful Web 服务。非特指一个工具名称,如 python 在 flask 想生成 swager 文档,常用库是 flasgger,使用注释的方式为你的接口添加描述,包括接口名、参数、响应等信息,最后生成类似下面格式的文档
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 这个词大部分可能会在早期用 django 写的测试平台文章里看到,它就是一个模板引擎(一个静态 HTML),模板中的特殊占位符允许编写类似于 Python 语法的代码。以下是例子
<!DOCTYPE html>
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
<h1>{{ greeting }}</h1>
<ul>
{% for item in items %}
<li>{{ item }}</li>
{% endfor %}
</ul>
</body>
</html>
from jinja2 import Environment, FileSystemLoader
# 创建 Jinja 环境并指定模板文件所在的目录
env = Environment(loader=FileSystemLoader('templates'))
# 加载模板
template = env.get_template('template.html')
# 提供数据
data = {
'title': 'Jinja Demo',
'greeting': 'Hello, Jinja!',
'items': ['Apple', 'Banana', 'Orange']
}
# 渲染模板并输出结果
output_html = template.render(data)
print(output_html)
𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫
▧▧ 简单来说就是查询时间超过指定阀值(可以设置)的 sql
𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝𒈝
▧▧ 面试时通常会问什么是事务和具有什么特性。
实际运用:
▧▧ "ES" 通常指的是 Elasticsearch,它是一个开源的分布式搜索和分析引擎
𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫
𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫𒐫
日活用户 Day Activite Users
周活跃用户
日新增用户
日登陆用户
日核心活跃用户
最高同时在线用户
页面访问量
独立访客
𒐮𒐮𒐮𒐮𒐮𒐮𒐮𒐮𒐮𒐰𒐰𒐰𒐰𒐰𒐰𒐰𒐰𒐰𒐰𒐰𒐰𒐰𒐰𒐰𒐰
𒐫𒐫𒐫