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

B/S架构:定义、原理及其在软件测试中的应用

引言

在当今互联网时代,B/S架构已成为软件开发的主流模式之一。作为软件测试工程师,深入理解B/S架构的定义和工作原理,对于设计有效的测试策略至关重要。本文将全面解析B/S架构,并探讨其在软件测试中的特殊考量。

一、B/S架构的定义

B/S架构(Browser/Server Architecture,浏览器/服务器架构)是一种特殊的客户端/服务器(C/S)架构,其中客户端通过标准的Web浏览器与服务器进行交互。

与传统的C/S架构相比,B/S架构具有以下显著特点:
- 客户端轻量化:无需安装专用客户端软件,只需标准浏览器
- 跨平台性:支持各种操作系统和设备
- 集中部署:业务逻辑和数据集中在服务器端
- 维护简便:升级只需更新服务器端代码

二、B/S架构的核心组成

1. 浏览器端(Browser)
- 负责用户界面呈现
- 执行HTML、CSS和JavaScript代码
- 处理用户输入和交互
- 常见浏览器:Chrome、Firefox、Safari、Edge等

2. 服务器端(Server)
- Web服务器:处理HTTP请求,返回静态资源(如Apache、Nginx)
- 应用服务器:执行业务逻辑(如Tomcat、Node.js)
- 数据库服务器:存储和管理数据(如MySQL、Oracle)

3. 通信协议
- 主要基于HTTP/HTTPS协议
- 数据格式通常为HTML、JSON或XML
- 现代应用常采用RESTful API或GraphQL

三、B/S架构的工作原理

1. 用户发起请求:在浏览器地址栏输入URL或点击链接
2. DNS解析:将域名转换为IP地址
3. 建立连接:浏览器与服务器通过TCP/IP建立连接
4. 发送HTTP请求:浏览器发送包含请求方法、头部和体的HTTP请求
5. 服务器处理:
   - Web服务器接收请求
   - 静态资源直接返回
   - 动态请求转发给应用服务器
   - 应用服务器可能访问数据库
6. 生成响应:服务器生成HTTP响应(状态码、头部、HTML内容等)
7. 浏览器渲染:浏览器解析HTML、CSS,执行JavaScript,呈现页面
8. 持续交互:可能通过AJAX/WebSocket保持连接,实现动态更新

四、B/S架构的优势与劣势

优势:
- 部署维护成本低:只需维护服务器端
- 跨平台兼容性:支持各种设备和操作系统
- 访问便捷:无需安装,随时随地通过URL访问
- 安全性较高:业务逻辑在服务器端,客户端暴露较少

劣势:
- 性能依赖网络:网络状况直接影响用户体验
- 功能受限:相比原生应用,浏览器环境功能有限
- 首屏加载慢:需要下载HTML、CSS、JS等资源
- 浏览器兼容性问题:不同浏览器表现可能有差异

五、B/S架构的测试考量

作为软件测试工程师,针对B/S架构的测试需要特别关注以下方面:

1. 功能测试
- 表单提交和数据验证
- 导航和链接测试
- 业务逻辑测试
- Cookie和会话管理

2. 兼容性测试
- 浏览器兼容性(不同厂商、版本)
- 操作系统兼容性
- 移动设备适配测试
- 分辨率响应测试

3. 性能测试
- 页面加载时间
- 服务器响应时间
- 并发用户处理能力
- API接口性能

4. 安全测试
- SQL注入检测
- XSS跨站脚本攻击
- CSRF跨站请求伪造
- 认证和授权测试

5. 用户体验测试
- 界面布局和可用性
- 交互流畅度
- 错误处理和提示
- 辅助功能(如无障碍访问)

六、现代B/S架构的演进

随着Web技术的发展,B/S架构也在不断演进:

1. 单页应用(SPA):如React、Vue、Angular构建的应用
2. 渐进式Web应用(PWA):结合Web和原生应用优点
3. 服务端渲染(SSR):改善SEO和首屏性能
4. 微前端架构:将前端应用分解为更小、更易管理的部分

这些演进为软件测试带来了新的挑战和机遇,测试策略也需要相应调整。

结语

B/S架构凭借其便捷性和低成本优势,已成为现代软件开发的重要模式。作为测试工程师,深入理解B/S架构的原理和特点,能够帮助我们设计更全面、高效的测试方案,确保Web应用的质量和可靠性。随着技术的不断发展,我们也需要持续学习和适应新的测试方法和工具,以应对日益复杂的B/S架构应用场景。

希望本文能为您在B/S架构应用的测试工作中提供有价值的参考。在实际工作中,建议结合具体项目特点,灵活调整测试策略,以达到最佳的测试效果。

相关文章:

B/S架构:定义、原理及其在软件测试中的应用

引言 在当今互联网时代,B/S架构已成为软件开发的主流模式之一。作为软件测试工程师,深入理解B/S架构的定义和工作原理,对于设计有效的测试策略至关重要。本文将全面解析B/S架构,并探讨其在软件测试中的特殊考量。 一、B/S架构的…...

【Android】文件导出到本地或者U盘

项目需求 在使用Android 9平板开发的时候,项目更新了一个新的需求,现在需要检测设备是否插入U盘,如果没有U盘的话,就将文件导出到系统根目录,如果有U盘的话,就将文件导出到U盘里面。 项目实现 1.实现文件…...

在Electron中爬取CSDN首页的文章信息

背景 之前分享了Electron入门的相关文章:https://gitee.com/ruirui-study/electron-demo 后来,我就想在里面多做一些演示给大家看,集成了以下功能及演示: 窗口管理、各种方法封装托盘管理菜单管理获取屏幕演示多窗口及通信演示…...

论文阅读:2024 EMNLP User Inference Attacks on Large Language Models

总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 User Inference Attacks on Large Language Models https://arxiv.org/pdf/2310.09266 https://www.doubao.com/chat/4034601691207170 速览 这篇论文主要研究了大语言模…...

学习记录:DAY21

我的开发日志:类路径扫描、DI 容器与动态代理 前言 我失忆了,完全不记得自己早上干了什么。 日程 早上 10 点左右开始,学了一早上,主要是类路径扫描相关的调试。 晚上 8 点了,真不能再摸🐟了。 学习记录 计…...

服务器频繁重启日志分析与诊断

从你提供的日志来看,系统确实经历了多次重启。这个日志行显示的是: reboot system boot 6.8.0-58-generic Tue Apr 29 17:54 - 14:26 (20:31)这表示系统在4月29日17:54启动,运行了约20小时31分钟后,于次日14:26结束(可…...

阿里云服务迁移实战: 07-其他服务迁移

概述 当完成了服务器、数据库、IP、OSS等迁移后,剩下的就是其他服务了。 短信网关 短信模板只能一个个创建,不能批量操作。但是可以使用以下方式优化操作。 在原账号导出模板列表 概述 当完成了服务器、数据库、IP、OSS等迁移后,剩下的…...

第六章 QT基础:9、Qt中数据库的操作

Qt数据库模块概述与使用详解 软件安装教程:https://subingwen.cn/qt/sql-driver/ 1. 概述 Qt框架中对数据库操作提供了很好的支持,我们可以通过Qt提供的类非常方便地和本地或者远程数据库进行连接。 众所周知,数据库是 C-S(cl…...

DINOv2 - 无监督学习鲁棒视觉特征

本文翻译整理自:https://github.com/facebookresearch/dinov2 文章目录 一、关于 DINOv2相关链接资源关键功能特性 二、预训练模型预训练骨架网络通过 PyTorch Hub 加载预训练模型预训练分类头 - ImageNet预训练头 - 深度估计预训练头 - 语义分割 三、安装1、推荐安…...

AI与无人零售:如何通过智能化技术提升消费者体验和运营效率?

引言:无人零售不只是无人值守 你走进一家无人便利店,没有迎宾、没有收银员,甚至没有一个人在场,但你刚拿起商品,货架旁的摄像头就悄悄“看懂”了你的动作,系统已经在后台为你记账。你以为只是没人管&#x…...

STM32F10X OLED屏幕点亮

本节实现点亮OLED屏 首先去原理图中查找对应引脚 配置上述的IO口 查看对应的原理图 ​​​​​​​ OLED_CS 和 OLED_RES(PB6,PB7)就是配置为推挽输出OLED_SCLK 和 OLED_SDIN (PB13 PB15)OLED_D/C (PE12) 推挽输出就…...

Nginx核心功能02

目录 一:正向代理 1.编译安装nginx 2.配置正向代理 二:反向代理 1.配置nginx七层代理 2.配置nginx四层代理(传输层,TCP/UDP) 三:nginx缓存 1.缓存功能的核心原理和缓存类型 2.代理缓存功能设置 四…...

微格式:为Web内容赋予语义的力量

一、什么是微格式? 微格式是一种建立在已有 Web 标准基础上的简单、开放的数据格式。它的核心思想是通过在 HTML 标签中添加特定的属性和类名,为网页内容添加语义注解,从而兼顾 HTML 文档的人机可读性。 简单来说,微格式就是一套约定俗成的 HTML 标记方式,让我们能够在不…...

Linux基础 -- Generic Netlink 框架详解与开发实践

Generic Netlink 框架详解与开发实践 本文旨在系统性介绍 Linux 内核中的 Generic Netlink 框架,包括其设计背景、结构设计、核心数据结构 genl_ops 的使用,以及完整的内核与用户态通信示例,适合用于驱动开发、用户空间控制接口构建及系统通信…...

CMake解析参数用法示例

cmake_parse_arguments 是 CMake 中用于解析函数或宏参数的工具,特别适合处理带有选项(OPTIONS)、单值参数(SINGLE_ARGS)和多值参数(MULTI_ARGS)的复杂参数列表。以下是用法说明和一个示例&…...

开源项目实战学习之YOLO11:ultralytics-cfg-models-fastsam(九)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 1. __init__.py2. model.py3. predict.py4. utils.py5. val.py FastSAM 是一种目标检测和图像分割模型,Ultralytics 是一个在计算机视觉领域广泛使用的库&#x…...

使用frpc链接内网的mysql

以下是配置 frpc 连接内网 MySQL 服务的详细步骤: 1. 准备工作 frps 服务器:已部署在公网 IP 11.117.11.245,假设 frps 的默认端口为 7000。 内网 MySQL 服务:运行在内网机器的 3306 端口。 目标:通过公网 IP 11.117…...

分享:VTK版本的选择 - WPF空域问题

在早期版本中,ActiViz 对 Windows Presentation Foundation (WPF) 框架的支持是通过 WindowsFormHost 组件实现的,这种方式依赖于 WindowsForm 和 WPF 的互操作性。然而,这种方法存在一个众所周知的“空域问题”(airspace issue&a…...

MIPS架构详解:定义、应用与其他架构对比

一、MIPS架构的定义 MIPS(Microprocessor without Interlocked Pipeline Stages) 是一种经典的精简指令集(RISC)处理器架构,由斯坦福大学John Hennessy团队于1981年提出,强调高效流水线设计和硬件简化。 核…...

项目剖析:基于Agent的个人知识管理系统如何设计

为什么写这篇文章?最近在思考如果想要构建一个个人知识管理的Agent应该怎样设计才好,然后最近看到这样一个项目,就想剖析一下它的架构,看一下它的设计思想。然后一些剖析得过程就沉淀到本文当中。本文档主要从整体架构、dataflow的视角剖析khoj项目,分析应该一个知识管理A…...

Python魔法函数深度解析

一、魔法函数是什么? 魔法函数(Magic Methods)是Python中以双下划线(__xx__)包裹的特殊方法,它们为类提供了一种与Python内置语法深度集成的能力。这些方法由解释器自动调用,无需显式调用&…...

PCB设计工艺规范(一)概述

PCB设计工艺规范(一) 1.概述2.关键词及引用标准3.PCB板材要求3.1 确定PCB使用板材以及TG值3.2 确定 PCB 的表面处理镀层 4.热设计要求5.器件库选项要求 资料来自网络,仅供学习使用。 1.概述 规范产品的 PCB 工艺设计,规定 PCB 工…...

Github开通第三方平台OAuth登录及Java对接步骤

调研起因: 准备搞AI Agent海外项目,有相当一部分用户群体是程序员,所以当然要接入Github这个全球最大的同性交友网站了,让用户使用Github账号一键完成注册或登录。 本教程基于Web H5界面进行对接,同时也提供了spring-…...

DeepSeek V1:初代模型的架构与性能

DeepSeek V1(又称DeepSeek-MoE)是DeepSeek系列的首代大规模语言模型,它采用Transformer结合稀疏混合专家(MoE)的创新架构,实现了在受控算力下的大容量模型。本文将深入解析DeepSeek V1的架构设计与技术细节,包括其关键机制、训练优化策略,以及在各类NLP任务上的表现。 …...

Java ResourceBundle 资源绑定详解

Java ResourceBundle 资源绑定详解 ResourceBundle 是 Java 提供的国际化(i18n)资源管理工具,位于 java.util 包。它专门用于加载本地化的 .properties 资源文件,支持多语言切换,是国际化和本地化开发的核心类。 1. 核心特性 (1)基本特点 基于 .properties 文件管理键…...

flutter 专题 六十一 支持上拉加载更多的自定义横向滑动表格

在股票软件中,经常会看到如下所示的效果(ps:由于公司数据敏感,所以使用另一个朋友的一个图)。 分析需要后,我先在网上找了下支持横向滑动的组件,最后找到了这个:flutter_horizontal…...

暗夜模式续

之前写过一篇笨拙的方式实现暗夜模式,但是当真正去适配的时候发现简直恶心至极;然后想通过一些方式可以把笨拙的方式变得优雅; 之前实现暗夜模式的快速通道,这篇文章在基于这个基础上优化而来 目录 背景 优化步骤 OK&#xf…...

[吾爱出品] 文件夹迁移工具(DirMapper)

文件夹迁移工具(DirMapper) 链接:https://pan.xunlei.com/s/VOP4Uf6vu3dalYLaZ1iZUhJ1A1?pwdfhzi# 文件夹迁移工具(DirMapper) 智能识别源文件夹分类 复制/移动两种迁移模式 冲突解决方案(覆盖/跳过/合…...

DeepSeek 4月30日发布新模型:DeepSeek-Prover-V2-671B 可进一步降低数学AI应用门槛,推动教育、科研领域的智能化升级

DeepSeek-Prover-V2-671B模型特点: 一、超大参数规模与数学推理能力 参数规模跃升 模型参数量高达6710亿,是前代数学推理模型Prover-V1.5(70亿参数)的近100倍,表明其具备更强的复杂问题处理能力。 前代Prover-V1.5在高…...

GitHub修炼法则:第一次提交代码教学(Liunx系统)

前言 github是广大程序员们必须要掌握的一个技能,万事开头难,如果成功提交了第一次代码,那么后来就会简单很多。网上的相关资料往往都不是从第一次开始,导致很多新手们会在过程中遇到很多权限认证相关的问题,进而被卡…...

百家号等新媒体私信入口是否可以聚合到企业微信的客服,如何实现

一、技术实现路径 1. 百家号 API 对接 接口权限申请: 登录百度开发者平台,创建应用并获取 API 密钥(app_id和app_token)。申请私信相关接口权限(如消息通知、粉丝查询),需满足百家号的审核要求…...

【来自AI】RS485,Rs232,Modbus的区别和联系是什么

RS485、RS232 和 Modbus 是常用于工业自动化和通信中的技术标准,它们有不同的特点和应用。下面是它们的区别和联系: RS232 (Recommended Standard 232) 定义:RS232 是一种串行通信标准,通常用于短距离(一般最多15米&…...

java实现序列化与反序列化

va 实现序列化与反序列化 序列化(Serialization) 是将 Java 对象转换为字节流(二进制数据),以便存储或网络传输。 反序列化(Deserialization) 则是将字节流恢复为 Java 对象。 Java 提供了 ja…...

harmonyOS 手机,双折叠,平板,PC端屏幕适配

由于HarmonyOS设备的屏幕尺寸和分辨率各不相同,开发者需要采取适当的措施来适配不同的屏幕。 1.EntryAbility.ets文件里:onWindowStageCreate方法里判断设备类型, 如果是pad,需全屏展示(按客户需求来,本次…...

Qt Creator环境编译的Release软件放在其他电脑上使用方法

本文解决的问题:将Qt Creator环境编译的exe可执行程序放到其他电脑上不可用情况 1、寻找windeployqt工具所在路径" D:\Qt5.12.10\5.12.10\msvc2015_64\bin" ,将此路径配置到环境变量; 2、用Qt Creator环境编译出Release版本可执行…...

electron+vite+vue3 快速入门教程

Electron、Vite 和 Vue 3 结合使用可以创建强大的跨平台桌面应用程序,下面是一个快速入门教程,帮助你搭建一个基于 Electron Vite Vue 3 的项目。 环境准备 Node.js: 首先确保你的机器上已经安装了 Node.js。你可以通过以下命令来检查是否已安装&…...

添加了addResourceHandlers 但没用

B站黑马的视频 public class WebMvcConfig extends WebMvcConfigurationSupport { /** * 设置静态资源映射 * param registry */ Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { log.info("开始进…...

uniapp如何获取安卓原生的Intent对象

通过第三方app唤起,并且获取第三方app唤起时携带的参数 因为应用a唤起应用b时,应用b第一时间就要拿到参数token,所以需要将获取参数的方法写在APP.vue中的onLaunch钩子里,如果其他地方要用可以选择vuex或者采用本地缓存。 uniapp中plus.run…...

国标GB28181视频平台EasyGBS在物业视频安防管理服务中的应用方案​

一、方案背景​ 在现代物业服务中,高效的安全管理与便捷的服务运营至关重要。随着科技的不断发展,物业行业对智能化、集成化管理系统的需求日益增长。EasyGBS作为一款基于国标GB28181协议的视频监控平台,具备强大的视频管理与集成能力&#…...

Linux容器大师:K8s集群部署入门指南

引言 在云原生时代,Kubernetes就像一位"集群调度大师"🎮,轻松管理成千上万的容器化应用!本文将带你从零开始搭建生产级K8s集群,从基础概念到实战部署,从核心组件到安全运维。无论你是要搭建开发…...

Vue 3 中纯 template 标签

发现 Vue 3 中纯 template 标签不会被渲染。 可以加 v-if"1" 即可 https://andi.cn/page/622155.html...

极光PDF编辑器:高效编辑,轻松管理PDF文档

在日常工作和学习中,PDF文件的使用越来越普遍。无论是学术论文、工作报告还是电子书籍,PDF格式因其稳定性和兼容性而被广泛采用。然而,编辑PDF文件往往比编辑Word文档更加复杂。今天,我们要介绍的 极光PDF编辑器,就是这…...

《可信数据空间 技术架构》技术文件正式发布

可信数据空间 技术架构发布了 国家数据基础设施技术文件发布有几个月了,成为数据要素圈内必读的白皮书,接着今日国家数据局正式发布了《可信数据空间 技术架构》,笔者有幸见证了该文件出炉的过程,在这两个文件重,对数…...

OpenCV 图形API(74)图像与通道拼接函数-----合并三个单通道图像(GMat)为一个多通道图像的函数merge3()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 从3个单通道矩阵创建一个3通道矩阵。 此函数将多个矩阵合并以生成一个单一的多通道矩阵。即,输出矩阵的每个元素将是输入矩阵元素的…...

Redis应用场景实战:穿透/雪崩/击穿解决方案与分布式锁深度剖析

一、缓存异常场景全解与工业级解决方案 1.1 缓存穿透:穿透防御的三重门 典型场景 恶意爬虫持续扫描不存在的用户ID 参数注入攻击(如SQL注入式查询) 业务设计缺陷导致无效查询泛滥 解决方案进化论 第一层防护:布隆过滤器&am…...

负载均衡技术全景指南:架构、算法与发展趋势

负载均衡技术全景指南:架构、算法与发展趋势 一、负载均衡技术概述二、应用层负载均衡(一)HTTP 重定向(二)反向代理服务器 三、传输层负载均衡(一)DNS 域名解析负载均衡(二&#xff…...

DeepSeek-V3 解析第二篇:DeepSeekMoE

这篇文章是我们 DeepSeek-V3 系列的第二篇,聚焦于 DeepSeek 模型 [1, 2, 3] 的一个关键架构突破:DeepSeekMoE。 📚 本文也是我们【LLM 架构演化系列】的第二篇,聚焦 DeepSeek-V3 的 MoE 架构创新。如果你正研究大模型性能优化或架…...

【ArcGISPro学习笔记】布局输出时图例总是有省略号怎么办?

在用ArcGISPro制图时,发现布局输出时图例总是有省略号,例如下图: 调整半天都搞不定,必须把图例框拉很宽才没有省略号,非常影响布局体验 后来发现只需调整一个地方就把省略号弄没了,就是在图例排列这里&…...

驱散养生伪识阴霾,重铸科学养生晴空

在健康意识日益觉醒的当下,养生已然成为人们生活中备受瞩目的焦点。然而,各类养生伪知识如同阴霾,遮蔽了科学养生的光芒,误导着人们的养生实践。只有彻底驱散这些伪识阴霾,才能重铸科学养生的朗朗晴空,让健…...

【补题】Codeforces Round 664 (Div. 1) A. Boboniu Chats with Du

题意:给出n,d,m三个值,分别代表,有多少个值ai,使用超过m的ai,需要禁言d天,如果不足也能使用,m代表区分点,问能得到最大的值有多少。 思路: …...