测试工作中常听到的名词解释 : )

2509 篇文章 2 订阅
2346 篇文章 14 订阅

很多名称其实看字面意思都挺抽象的,有时看群里的测试大佬在不停蹦这类术语,感觉很高大上,但其实很多你应该是知道的,只不过没想到别人是这样叫它的。又或者你的主编程语言不是 Java,所以看不懂他们在讲啥,因为大部分是 Java 后端的知识点或者是运维的知识 (这帮卷王)。

我尝试翻译成“人话”,方便刚入行的新人。也欢迎大家在评论区补充。

1.技术概念名词类

1.1 脚手架

该名词如果熟悉工地的,应该会知道脚手架是建筑时 房子周围搭的铁架子。软件开发中,脚手架的意思就是一组预设的代码和文件结构,方便开发人员更快地搭建一个基本的项目框架。前端框架大都有脚手架工具,如使用 React 脚手架创建一个 react 项目。

$ npx create-react-app react-basic  //   npx create-react-app 是固定命令,create-react-app是React脚手架的名称

生成如下:

图片

1.2 上下文

语义上,就是理解某件事物需要了解它的环境、背景、条件等因素,助于更准确解释信息。

  • 业务上下文:了解系统使用场景、业务需求、用户期望等

  • 业务代码上下文:程序或代码片段执行时,包括变量的值、程序状态等,有助于理解程序执行的条件和结果

1.3 设计模式

可以理解为 更好的解决问题的方法,大部分设计模式的目的是:解决复杂性、提高代码质量、降低耦合度,并促进可维护性和可扩展性。例如写接口自动化时,会想到用 yaml 做测试数据管理实现数据驱动,这就是一种将测试数据和测试逻辑分离的设计模式。

1.4 集群

集群就是多台相互独立的计算机,这些计算机通过网络连接在一起就,组成一个计算机服务系统。在集群中,每台计算机被称为一个节点(Node),每个节点都是运行各自服务的独立服务器,节点之间通过网络通信进行协作,共同完成任务或服务。

通俗讲就是:一个餐厅的老板为了提高服务质量,雇佣了多名服务员,他们相互配合,如果某个服务员忙不过来,其他服务员可以帮助他,或者接替他的工作,确保每个顾客都能得到及时的服务,以及每个服务员都负责特定的区域或特定类型的服务,更有效地分工合作,提高整个团队的工作效率。

1.5 分布式

分布式系统是由多台计算机组成的系统,这些计算机通过网络连接在一起,共同完成某个任务或提供某种服务,不同的是每个节点负责的东西不同,这些节点之间通过相互通信和协作来完成整个系统的任务。

通俗讲就是:一个餐厅的老板为了提高服务质量,请了多个厨师,A 厨师负责炒菜,B 厨师负责煮面,C 厨师负责烤肉等等。每位厨师都独立地准备自己负责的菜品,然后将做好的菜品交给服务员上菜

1.6 IO

在群里有时候看见那些大佬讨论性能时,会提到 IO。这个词如果大学时有听过《计算机科学导论》这门课,是会有印象的。

IO(Input/Output)即输入/输出,是计算机系统中的一个重要概念,用来描述计算机与外部设备(如磁盘、网络、键盘、显示器等)之间的数据传输过程。性能测试中需要关注 IO 的原因主要有几点:

  • 影响系统整体性能:IO 操作的性能直接影响着整个系统的性能。如在 Web 应用程序中,IO 操作包括从数据库读取数据、向客户端发送响应等,这些 IO 操作的性能直接影响着用户体验和系统的响应速度

  • 可能是称为瓶颈的原因:某些场景下,系统需要频繁地读取大量数据时,IO 操作的性能可能成为系统性能的瓶颈,导致系统响应速度变慢

  • 资源消耗:IO 操作通常需要消耗系统资源,如 CPU、内存、磁盘等。当系统的 IO 操作过多或者 IO 操作的性能较差时,可能会导致系统资源紧张,影响系统的稳定性和可靠性

1.7 DDD

DDD(领域驱动设计)是一种软件开发方法论,旨在通过强调领域模型的重要性来解决复杂业务需求和软件系统设计的挑战。

1.8 TDD

TDD(Test-Driven Development,测试驱动开发)是一种软件开发方法论,它强调在编写实际代码之前先编写测试用例,并且通过测试驱动实现代码的开发过程。TDD 的核心理念是 “红 - 绿-重构”,即先编写失败的测试(红),然后编写足够的代码以使测试通过(绿)

1.9 中台

这个概念不是国外的,最早由阿里提出,衍生出很多概念如:技术中台、业务中台、组织中台、数据中台等。

具体可以看下这个,摘编自《中台架构与实现:基于 DDD 和微服务》

https://www.51cto.com/article/636223.html

1.10 网络可视化

之前有段时间好像比较流行,这种把代码生成这种可交互式的网络可视化图,了解这类工具的最佳方式就是自己写一下。

这里的 demo 是用 python 的【pyvis】创建交互式网络可视化和【inspect】提取对象的各种属性和信息。这里的 html 文件可以直接用 pyvis 的内置方法生成,其实你需要的只是用 inspect 去把代码拆解提取下,然后根据 pyvis 的方法连接好即可

  • 这里写个 demo 自行体验下:

from pyvis.network import Networknet = 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的配置,否则会报错

1.11 CDN

CDN 是内容分发网络(Content Delivery Network)的缩写。它就像是一个快递网络,它把互联网上的内容,比如网页、图片、视频等,分散存储在世界各地的特殊 “快递站”(节点)上。当你在网上访问一个网页或者看一个视频时,CDN 会找到离你最近的 “快递站”,从那里取得你需要的内容,然后迅速送到你手上。这样,你就能更快地获取网站的内容,而且网站也能分担更多的访问压力,保持稳定运行。这里的节点,在 CDN 中,一个节点通常指的是一个边缘节点(Edge Node),它可以是一个服务器,也可以是一个服务器集群。

2.测试相关

2.1 自动化测试的 PO 模式

学过 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()
2.2 造数工厂

这个词我也挺好奇是谁发明的,本质上就是生成测试数据的脚本封装成平台,所以干嘛不叫造数平台。

2.3 脏数据

测试执行或数据处理过程中,由于一些异常情况、错误操作、或者测试环境配置不当等原因,导致系统中出现了不符合预期的、异常或错误的数据。

2.4 流量录制回放

捕获和回放 HTTP 流量,模拟生产环境中的流量,以便进行性能测试、故障排除,或者在其他环境中重现实际用户的操作。

相关文章:https://www.cnblogs.com/nullllun/p/15205442.html

2.5 测试"左右"移

社区里这个词应该大家看多了,至于实际意思是什么,可能有些人不知道。正常的开发流程是:开发➥测试➥运维,
但现在我们的测试不想夹在中间,想从流程中做更多的干预,变成这样:开发➥ ☜㊖测试㊖☞➥运维,通俗的讲就是:

「开发不想做的事我做,运维不想管的事我管。一句话,开发/运维做得了的我要做,开发/运维不想做的我更要做,先做后测,产品特许!这就是测试左右移,够不够清楚?」☻

  • 左右移: 

    图片

2.6 插桩

插桩本质就是在不改动源码的基础上,插入或许修改你想要的代码,如在 Android 开发中,如下图第二步在转为.class 的字节码后,插入代码,使其生成的 dex 执行文件带有你插入的代码,这过程中源码并未受到任何影响。

网图:

图片

python 的 ast 做的 demo 例子:

import ast import astorexpr = '''
def addNumber(num1,num2):
  return num1 + num2
'''# 将字符串解析成 ASTtree = 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

2.7 自动化测试金字塔

这个直接谷歌,大部分解释都是这个⇲

【测试金字塔最初的原型分三层,底层是单元测试,中间层是 API 测试,上层 是 UI 自动化测试。而且底层的单元测试需要做最多的测试工作,越往上测试工作应该越少。根据《谷歌软件测试之道》的经验,三者对于精力投入的比例是:把 70% 的精力放在单元测试,20% 放在 API 测试,而剩下 10% 的精力放在 UI 测试】

2.8 精准测试

一种测试思想,简单来说就是:当代码变更,针对研发的代码变更点以及关联功能点进行测试。

类比看病时,头痛就检查头,肚子痛就检查肚子,看起来经济实惠又快捷。但是,症状之间可能存在相互关联,某些症状可能是其他问题的表现,如果医生缺乏对该病患整体状况的全面理解,会耽误病情,所以你在大城市医院看病,一般都会走下血常规的检查。
相关知识可以看下这篇文章,说得挺全:https://juejin.cn/post/7230986641900683320

2.9 混沌测试

该概念来源于网飞,就是拍出《纸牌屋》那家公司。其方式就是模拟系统中可能出现的故障和异常情况,然后评估系统在不稳定状态下的稳定性和可靠性。个人感觉其实就是容灾演练,这个名词出现在很多文章里,但基本方向都在随机制造故障上,描述成探索性测试那样。(这种其实就应该交给运维和架构师来干,不归测试才对)

2.10 全链路

全链路通常是指对系统端到端执行路径,从用户发起请求开始,经过系统的各个组件和服务,最终系统返回响应结果的过程。这一点会有些人会和接口测试混淆,接口测试是验证接口的输入输出是否符合预期,涉及的范围是一个独立的服务,不涉及接口之间的交互和整体业务流程。以电商购买商品为例,一个网上购物动作的一条链路

  • 1. 用户浏览商品

  • 2. 添加商品到购物车

  • 3. 查看购物车

  • 4. 结算购物车

  • 5. 提交订单

  • 6. 订单处理

  • 7. 支付订单

  • 8.订单确认

全链路压测,也是压测压测整个购物系统的端到端执行路径,从用户发起请求到系统响应完成的整个过程,包括前端界面、后端服务、数据库、第三方服务等各个组件和服务的性能表现。

3.java 相关

3.1 jvm

下面三个词应该经常在各种文章里提到,如果本身的技术栈里没有学过 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。

3.2 maven

主要用于 java 项目的管理和构建,这个词常见于技术栈是 Java 的测试文章中,写过 Testng 应该清楚,用 maven 来管理 TestNG 的依赖,并且可以使用 maven 的命令来执行 TestNG 的测试。如果没用过 Java 的,那类比最像的话,maven 就有点相当于 python 的 pip

3.3 war 文件

在 java 写的测试平台中,会看到打包部署这个流程。主语言为 python 的朋友大多会懵逼这个是啥,毕竟 python 是解释性语言。

可以直接以源码形式部署。而 Java Web 要用 Maven 相应的构建命令去编译打包应用,生成 WAR 文件。本质上是一个压缩包,里面可以包含 Servlet、JSP、HTML、JavaScript、CSS 等文件,以及相关的配置文件和依赖库。

以个人编码 Java Web 应用并发布到阿里云为例子,大概流程如下:

1. 需求分析、架构设计、编码实现

2. 软件测试: 点点点

3. 准备环境:合适的实例 ECS,安装 JDK,Tomcat/jboss(Servlet 的容器),数据库等

4. 编译打包:本地开发环境使用 Maven 构建 Java Web 应用,并生成 WAR 文件

5. 上传文件:将生成的 WAR 文件上传到阿里云服务器

6. 部署应用:将 WAR 文件复制到 Tomcat 的 webapps 目录中,并启动 Tomcat 服务

7. 配置环境:配置 Java Web 应用的运行环境,包括数据库连接、日志配置、域名绑定等

8.监控和管理:部署之后,监控 Java Web 应用的运行状态

3.4 Servlet

看下面搜索到的解释,让其与 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,它的功能和灵活性较为有限,通常用于简单的网络访问和数据获取。

3.5 SDK

SDK 是 Software(软件) Development(开发) Kit(工具)的缩写,SDK 通常包含:API 文档、示例代码、工具集、库文件、配置文件 。通俗来讲就是一个工具包。

大部分在社区里提到的 SDK 应该都是泛指 Java SDK,Java SDK 也是一个工具集合,它包含:javac 编译器、Java 运行时环境(JRE)、Java 开发工具 (JDK)、Java 文档、Java 示例代码等

图片

4.持续集成/持续交付

4.1 CI/CD

在招聘信息里经常看到,XX 故弄玄虚的常用词,测试不了解只因我们不是学的开发/运维,很正常。CI/CD 其实就是
持续集成 (Continuous Integration - CI) 、
持续交付 (Continuous Delivery - CD) 或者 持续部署 (Continuous Deployment - CD) 的缩写。

两个 CD 相关但有区别,使用哪种方式取决于组织的需求和风险偏好

  • 推送代码到代码存储库:开发者将其更改推送(push)到版本控制系统(如 Git)。这触发了 CI 流程的开始

  • 静态分析:在代码提交到版本库后,静态分析工具 (如 FindBugs) 会对代码进行检查, 寻找潜在的问题、代码问题和规范违规等

  • 部署前测试:在实际部署到测试环境之前,执行各种测试,包括单元测试、集成测试和其他自动化测试

  • 打包并部署到测试环境:通过构建工具(如 Maven、Gradle)打包应用程序,并将其部署到测试环境。这个步骤可能涉及到配置管理、环境变量的设置等

  • 部署后测试:在应用程序成功部署到测试环境后,执行一系列的后续测试,以确保应用程序在真实环境中运行正常

  • 自动化部署:设置自动化部署流程,在通过了所有测试并准备好发布时,可以自动将应用程序部署到测试环境

  • 部署到生产环境:交付的版本通过自动化测试确保正确后,需要手动触发部署到生产环境

  • 自动化部署到生产环境 :进一步的自动化部署流程,在通过了所有测试后,可以直接将应用程序部署到生产环境,无需手动干预

  • 回滚机制 : 设置自动回滚机制,可以在发生问题时快速回退到先前的稳定版本

  • 自动化测试:编写如单元测试、集成测试、端到端测试的自动化脚本

  • 测试自动化集成到 CI 流程 : 大白话就是确保每次代码提交都会触发自动化测试,如我们常学的 Jenkins 就是实现这个功能

  • CI/CD 流程中嵌入监控步骤:监测系统性能和稳定性

  • 目的:持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试阶段,到交付和部署)从而提高开发团队的效率、质量和交付速度

  • 持续集成 (CI) 包含通用流程:

  • 持续交付 (CD):

  • 持续部署 (CD)

  • 测试人员在 CI/CD 里可以参与的方面:

4.2 DevOps

这个词也是最近招聘信息里喜欢加上去的,对于测试,写上这个可能就是想要你会点 docker 的指令和知识。

DevOps 是开发 (Development) 和运维 (Operations) 的合成词,是一种软件开发和 IT 运维协同工作的文化和实践理念,不是什么工具或者技术名称,核心就是流程的统一和自动化。上面的 CI/CD 就可以称为 DevOps 流程的一部分,还有大家耳熟能详的

容器技术(如 Docker)和容器编排工具(如 Kubernetes),都是为了更加方便的部署,促进开发和运维之间的一致性。

5.工具模板

5.1 Swagger

Swagger 是一个工具集,用于设计、构建、文档化和消费 RESTful Web 服务。非特指一个工具名称,如 python 在 flask 想生成 swager 文档,常用库是 flasgger,使用注释的方式为你的接口添加描述,包括接口名、参数、响应等信息,最后生成类似下面格式的文档

图片

5.2 Jinja

这个词大部分可能会在早期用 django 写的测试平台文章里看到,它就是一个模板引擎(一个静态 HTML),模板中的特殊占位符允许编写类似于 Python 语法的代码。以下是例子

  • template.html

<!DOCTYPE html><html><head>
    <title>{{ title }}</title></head><body>
    <h1>{{ greeting }}</h1>
    <ul>
        {% for item in items %}        <li>{{ item }}</li>
        {% endfor %}    </ul></body></html>
  • python

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)

6.数据库相关

6.1 慢查询

简单来说就是查询时间超过指定阀值(可以设置)的 sql

6.2 事务

面试时通常会问什么是事务和具有什么特性。

下订单:当用户下订单时,需要同时更新商品库存和用户订单信息。这两个操作必须要么同时成功,要么同时失败,以确保订单的一致性和完整性。在这种需求背景下,可以将更新商品库存和插入订单信息的操作放在一个事务中执行,如果任何一个操作失败,则回滚整个事务,避免出现库存不足或订单丢失的情况。

银行账户转账: 把事务隔离等级设置为串行化 (最严格),即每次只允许一个事务访问数据库,其他事务需要等待当前事务执行完成后才能继续执行。用户 A 发起转账操作时,数据库会为其分配一个事务,并且开始执行转账操作。在此期间,数据库会将账户 A 的记录加锁,阻止其他事务对其进行读取或修改,此时用户 B 想给账户 A 转账,就要等用户 A 的转帐事务提交解锁。

  • 事务是指数据库管理系统中的一组操作,这些操作要么全部成功执行,要么全部失败回滚,以保持数据库的一致性和完整性

  • 四个特性:原子性、一致性、隔离性、持久性

  • 实际运用:

6.3 ES

"ES" 通常指的是 Elasticsearch,它是一个开源的分布式搜索和分析引擎

看文章:https://www.cnblogs.com/buchizicai/p/17093719.html

7.职场类

PM:产品经理
CEO:首席执行官
CTO:首席技术官
CFO:首席财务官
HRBP:人力资源业务伙伴
IT:信息技术(修电脑买软件都找 IT)
PM:项目经理

8.数据类

DAU:日活用户 Day Activite Users
WAU:周活跃用户
DNU:日新增用户
DLU:日登录用户
DKAU:日核心活跃用户
PCU:最高同时在线用户
PV:页面访问量
UV:独立访客

欢迎大家补充~

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取 【保证100%免费】

在这里插入图片描述

 ​​​​软件测试面试文档

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

在这里插入图片描述

在这里插入图片描述

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值