Android UI自动化测试框架—SoloPi简介
1、UI自动化测试简介
软件测试简介
软件测试是伴随着软件开发一同诞生的,随着软件规模大型化,结构复杂化,软件测试也从最初的简单“调试”,发展到当今的自动化测试。
自动化测试是什么呢?自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程,自动化测试通常会借助某些工具或者框架。虽然不能完全取代手工测试,但相比手工测试来讲,自动化测试可以减少人力成本,降低重复工作,从而更快速、高效的进行测试活动。
测试金字塔是一种自动化测试过程的金字塔形策略结构,用来指导软件开发过程中各层测试投入的工作量比例,其最早由Mike Cohn在2009年的著作《Scrum敏捷软件开发》中提出。Mike Cohn在书中指出:测试金字塔从上到下分为三层,分别是UI测试、服务/接口测试、单元测试,越接近金字塔底部的测试活动,投入的工作量应该越多,即单元测试投入工作量最多,接口测试次之,UI测试投入最少。
UI测试
UI测试是最接近软件真实用户使用行为的测试类型。通常是模拟真实用户使用软件的行为,即模拟用户在软件界面上的各种操作,并验证这些操作对应的结果是否正确。
接口测试(API测试)
API测试,主要针对的是各模块暴露的接口,通常采用灰盒测试方法。首先以黑盒方式设计如何调用API的测试用例,同时在测试执行过程中统计代码覆盖率,然后根据代码覆盖率情况来补充更多、更有针对性的测试用例。
单元测试
单元测试,属于白盒测试的范畴,通常由开发工程师自己完成,越早发现缺陷其修复成本越低。
为什么要做 UI 自动化?
随着不停的版本迭代,软件新增功能变的越来越多,对测试资源的需求也变得越来越大,执行人工测试的时间越来越长。对于人工测试的依赖开始变得棘手,因此大家开始寻找解决方案,UI 自动化也应运而生。
人工测试存在以下的弊端:
- 人工回归测试需要花费很长时间才能完成,很小的延迟就会让发布面临风险。
- 发布节奏受到人工回归测试的限制。两天以上的人工回归测试意味着最好的情况下能够一个月发布两次。而且,开发者需要一次性发布所有东西。要么全部发布,要么什么都发布不了,因为需要将所有东西一起测试。
UI 自动化测试存在以下的优点:
- 解放了测试团队针对临时的和探索性案例的测试时间;
- 可以一边开发一边进行回归测试,减少等待时间;
- 可重复性使用,快速进行回归测试;
- 更好的利用资源(周未/晚上的资源空闲时段)。
UI 自动化测试的特点
了解到为什么要选择UI自动化测试之后,我们需要了解UI自动化测试的使用场景。UI 即 User Interface(用户界面)的简称,UI 自动化做的事情就是模拟用户行为进行操作,完成对用户界面的测试。这也就从本质上限制了它的使用场景:
- 软件需求变动不频繁
- 产品更新维护周期长
- 比较频繁的回归测试
- 自动化测试脚本可重复使用
所以在开始之前,我们最好先认识清楚哪些业务场景是可以自动化测试的。
2、Android UI自动化测试工具
UI自动化测试经过多年的发展,也已经涌现出很多优秀的测试工具。下面简单介绍一下Android测试领域内的一些常见的测试工具。
1、Monkey
是Android SDK自带的测试工具,在测试过程中会向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试,也有日志输出。实际上该工具只能做程序做一些压力测试,由于测试事件和数据都是随机的,不能自定义,所以有很大的局限性。
2、MonkeyRunner
也是Android SDK提供的测试工具。严格意义上来说MonkeyRunner其实是一个Api工具包,比Monkey强大,可以编写测试脚本来自定义数据、事件。Monkeyrunner 足够强大了,但是录制的脚本是以坐标轴来作为定位方式,而安卓设备类型众多,各种分辨率,所以移植性不好。
3、Instrumentation
是早期Google提供的Android自动化测试工具类,虽然在那时候JUnit也可以对Android进行测试,但是Instrumentation允许你对应用程序做更为复杂的测试,甚至是框架层面的。通过Instrumentation你可以模拟按键按下、抬起、屏幕点击、滚动等事件。
Instrumentation是通过将主程序和测试程序运行在同一个进程来实现这些功能,你可以把Instrumentation看成一个类似Activity或者Service并且不带界面的组件,在程序运行期间监控你的主程序。
缺点是对测试人员来说编写代码能力要求较高,需要对Android相关知识有一定了解,还需要配置AndroidManifest.xml文件,不能跨多个App。
4、UiAutomator
也是Android提供的自动化测试框架,基本上支持所有的Android事件操作,对比Instrumentation它不需要测试人员了解代码实现细节(可以用UiAutomatorviewer抓取App页面上的控件属性而不看源码)。基于Java,测试代码结构简单、编写容易、学习成本低,一次编译,所有设备或模拟器都能运行测试,能跨App(比如:很多App有选择相册、打开相机拍照,这就是跨App)。缺点是只支持SDK 16(Android 4.1)及以上,不支持Hybird App、WebApp。
5、Espresso
是Google的开源自动化测试框架。相对于UIAutomator,它的特点是规模更小、更简洁,API更加精确,编写测试代码简单,容易快速上手。因为是基于Instrumentation的,所以不能跨App。
6、Selendroid
基于Instrumentation的测试框架,可以测试Native App、Hybird App、Web App,但是网上资料较少,社区活跃度也不大。
7、Robotium
也是基于Instrumentation的测试框架,目前国内外用的比较多,资料比较多,社区也比较活跃。缺点是对测试人员来说要有一定的Java基础,了解Android基本组件,不能跨App。
8、Appium
Appium 是目前最主流的移动测试自动化框架,不仅支持 Android 应用,而且适用于 iOS、混合和 Web 应用程序。
它底层完全使用了 Selenium 和 WebDriver 的 API,所以如果你之前有用过 selenium, 几乎不需要额外的学习成本就可以使用 appium。appium 通过 uiautomator(API 级别 16 或更高)和 Seledroid(API 级别低于 16)支持 Android,但是你不需要具体懂这两个框架的具体用法,appium 都已经帮你封装成了统一的使用规则。Appium 的优势之一是几乎可以使用任何编程语言(例如 Java、Objective-C、JavaScript、PHP、Ruby、Python 或 C# 等)编写 Appium 脚本。不需要重新编译或改变应用程序来匹配Appium,Appium有一个非常大而活跃的社区。
9、Airtest
是网易出品的一款基于图像识别和poco控件识别的一款UI自动化测试套件,由Airtest框架、poco框架、airtestIDE 组成。是一个跨平台的UI自动化测试框架,适用于游戏和App。用户不需要一行行的去写代码,而是用屏幕截屏的方式,用截出来的图形排列组合成执行的程序。 另外,Airtest也基于poco这个UI控件搜索框架,这个框架也是网易自家的跨平台U测试框架,原理类似于appium,通过控件的名称,id之类的来定位目标控件,然后调用函数方法,例如click(),swip()之类的方法来对目标控件进行点击或者是操作。
虽然Airtest刚开始是为了游戏测试,现在在app测试中也有很大的应用范围。只是进行录制、执行脚本的AirtestIDE没有开源,不方便进行深度定制。
10、Solopi
是蚂蚁金服开源的一款移动端APP测试工具,提供脚本录制、编辑、回放,结果展示以及一机多控(即通过设备间的socket通讯实现1台手机可以控制多台手机执行脚本)等功能,其测试用例的录制和执行等操作均在手机端的一个APP中完成。不需要借助电脑软件与测试设备交互,所以通信结构比Appium简单高效,对元素的识别也是使用类似于appium的控件的方式,并且引入了类似于airtest的图像识别的方式。
3、SoloPi的介绍
以往的性能测试工具,无外乎三种形态:PC 驱动工具、侵入式的测试模块、ROOT 工具。
PC 工具:除了 Android Studio 自带的性能测试工具,市面上大多数文档都是介绍命令行方法,而且各家方案存在差异,不少还存在错误,实际成型的工具也不多。
侵入式的测试模块:这类工具由于需要侵入到源码中,需要单独打包进行测试,工具本身也可能对性能产生影响。
ROOT 工具:首先是需要 Android 系统的 Root 权限,对于权限管控越来越严格的 Android 系统,其路必将越走越窄。
SoloPi提供了一种能够在 Android 手机上不需要 root 也能实现应用提权的方案。可以简单概括为:SoloPi是一种无线化、非侵入、免 Root 的 Android 专项测试方案。
传统的功能测试通常有两种方式:一种是人工手动执行测试,另一种则是编写基于测试框架的自动化脚本。前者成本巨大,为应付不断加速的产品迭代可能需要投入大量人力;而后者则对测试同学的代码能力有不小的要求,这也导致由手动测试转化为自动化测试从而节省人力的进度相对缓慢。
SoloPi将传统上仅能用于 PC 的自动化测试能力移植到了移动平台,并根据手机的使用习惯,开发了一套简单易用且功能强大的自动化测试框架。不需要测试同学有代码能力,降低了使用门槛,更方便推广。
Solopi主要有以下功能:自动化测试-录制回放、兼容性测试-一机多控、性能测试、稳定性测试。
虽然Appium和Airtest都有很大的应用范围,但是Solopi相比于appium和airtest有以下优势:
改进的控件匹配算法,更高的匹配成功率;
不需要依赖pc端的桌面应用,全部操作都在手机端的app中完成,实现了无线化,随时可测;
不需要代码基础,使用人群覆盖范围广;
提供性能测试的功能等。
(1)整体架构
这套方案中,底层依赖主要是 “无线 ADB、系统辅助功能、Chrome 调试以及图像识别技术”,后文将会介绍它们具体的应用场景。同时,在底层依赖的基础上,封装了一套核心能力,由 “控件定位、事件驱动、性能采集以及依赖注入” 组成,并在服务层实现了录制、回放、数据处理等公共服
务能力。在架构的最顶端,结合界面交互逻辑包装出了各个功能的入口。
(2)录制回放
在录制过程中,SoloPi 会对用户的操作进行拦截,识别用户操作的位置,高亮当前操作的控件,记录用户当前要做的操作类型,在每一步操作后,将操作类型及目标控件的各种信息都记录下来。这里的控件信息包括控件的 ID、文字等基本信息,以及相对布局、截图信息等。
在回放时,SoloPi会逐条解析之前录制的数据,通过智能查找算法,综合各种属性,定位目标控件,找到控件后,就会执行相应的操作,如点击、滑动等。在所有步骤执行后,会展示本次回放的结果,包括日志、截图等信息,作为本次回放的总结。
SoloPi 的录制和回放,基于同一套逻辑,包括控件结构构建、控件定位、事件驱动三个部分。两者的区别主要在于控件定位:
在录制过程中,SoloPi 会基于用户的点击行为进行定位;
在用例回放时,SoloPi 会根据录制时记录的控件信息,通过 SoloPi 的控件查找算法进行定位。
(3)底层依赖的核心功能
1)基础依赖
下面主要介绍SoloPi的控件查找功能和操作监控功能需要依赖的基础方案:无线ADB方案和AccessiblityService方案。
无线ADB方案
对于 Android 自动化,ADB shell 的执行能力是一切的基础。在 PC 上,通过 Android SDK 提供的ADB client 与同样运行于 PC 中的 ADB server 通信,再由 ADB server 通过 USB 与位于设备中的 Adbd 通信。要实现一套无线化的方案,必须要摆脱对 USB 线的依赖。好在 Android 系统还提供了一种基于 Socket 的 ADB 连接模式,既然是这样,那么只需要按照 ADB 通信协议在端上与本机的 5555 端口进行通信即可获得 ADB shell 的执行能力。
此无线ADB方案是SoloPi区别于其他UI自动化测试框架的核心方案之一,大家可以在其他项目中借鉴这种无线化方案。
AccessiblityService方案
辅助功能(AccessibilityService)其实是一个Android系统提供给的一种服务,本身是继承Service类的。这个服务提供了增强的用户界面,旨在帮助残障人士或者可能暂时无法与设备充分交互的人们。
从开发者的角度看,主要使用两种功能:查找界面元素,实现模拟点击。
UiAutomator(Appium、Airtest使用的方案)和AccessibilityService是有联系的:UiAutomator底层使用的是AccessibilityManagerService,AccessibilityService底层也是使用的AccessibilityManagerService,它们都是通过RPC与AccessibilityManagerService进行交互,获取界面元素和对界面元素进行操作的。区别是:UiAutomator只能在shell环境中执行,AccessibilityService是可以运行在app环境中的,但是需要用户手动开启服务。
2)基础功能
基于以上两种基础能力,下面介绍solopi底层依赖的两种功能:基础控件查找功能、用户操作监控功能。
控件查找功能
随着移动端动态化能力的稳步发展,越来越多的应用采用了 “Native + H5/小程序” 这种混合开发的方案。再考虑到近年来手游行业的飞速发展,手机游戏自动化测试的需求也越来越多。为了尽可能的适配各种场景,SoloPi提供了三种查找模式:
第一种方案的核心就是基于 AccessbilityService 生成当前控件视图树,并记录下id、文字等属性,适用于 Native 场景。
第二种方案基于 Chrome 的调试协议,通过注入js可以获得页面布局以及各元素属性,控件的定位思路与辅助功能这一套方案是一致的。适用于 H5/小程序场景。
第三种方案是图像匹配方案,SoloPi 在端上实现了一套图像比对能力,结合了模板匹配、特征匹配等算法,并做了一定的适配和调优。适用于游戏自动化的场景。
现阶段的开源代码中,native控件和webview中的控件都是使用AccessbilityService生成的控件视图树,断言功能和截图点击功能会使用到图像匹配方案,现阶段基于 Chrome 的调试协议方案未开源。
用户操作监控功能
a、事件获取机制:
关于用于操作监控与控件获取,AccessibilityService 能够获取用户的操作事件并关联对应的控件,可以实现大部分功能。
但 AccessibilityService 也有不足的地方,比如面向 HTML5 场景,辅助功能获取控件会出现延迟从而导致获取的控件结构不够精确;另外,对于部分自定义控件,辅助功能只能获取到对应的控件,但缺乏具体的坐标信息,从而导致控件操作不符合预期。
因此,SoloPi 采取了“结合 Android 系统 getevnet 功能”策略,通过直接解析系统原生事件,获取到用户的操作行为。
简单来说,通过 getevent,SoloPi 可以获取到用户操作屏幕的具体坐标,以及手指落下、抬起的具体时间。不过,getevent 命令的使用需要 SHELL 权限,这限制了普通 Android 应用获取相关数据的能力。SoloPi 通过Android 系统的无线调试功能实现了一套纯端的 SHELL 执行能力,能够在 Android 系统上执行 adb 相关命令。在SoloPi应用中集成了 AdbLib 开源库,包装成一套 ADB 命令执行工具。
通过 getevent 命令,SoloPi 获取到了用户点击的具体坐标,结合 AccessibilityService 获取到当前页面的控件结构树。遍历控件树找到坐标点击位置最上层的控件。
b、事件拦截机制:
在soloPi代码中,当需要拦截事件时,就会设置AccessibilityService进入触摸监控模式(通过此标志位 FLAG_REQUEST_TOUCH_EXPLORATION_MODE)。在此模式下,系统不会在view树中分发事件,各种事件会分发到AccessibilityService的实现类中。此时,soloPi会自己监听get event事件,进行事件的分发和处理。当不需要拦截系统分发事件时,就会重新设置AccessibilityService的标志位。
(4)回放能力的扩展
通过 SoloPi 录制的用例会以 JSON 的形式存储起来,用例不仅可以在设备本地直接回放,还可以通过 SoloPi 的解析器将用例转换为 Appium等目前主流自动化测试框架的脚本,轻松打通云测平台。另外,得益于文本抓取和图像识别能力,SoloPi还实现了在 Android 端录制一遍用例,生成的脚本能够同时在 Android、iOS 双端回放的能力。
(5)脚本编辑
SoloPi还提供了用例步骤的插入、删除、修改等用例编辑功能,可以有效降低用例的维护成本。另外,SoloPi还引入了循环、条件等流程控制能力,若对用例进行合理编排,可轻松实现需要重复操作的工具脚本或是需要暴力回放的稳定性测试脚本。
(6)一机多控
在各类专项测试中,兼容性测试是最为耗时费力的一项,测试人员需要关注各种系统版本、各大手机厂商,各种类型的屏幕等等,想要通过纯人工测试来保证兼容性测试的质量成本是非常高的。
SoloPi 在录制回放能力的基础上实现了一套兼容性测试的解决方案。在录制回放的场景中,先是在一台设备上记录了用户的操作,然后再在任意一台设备上实现操作的回放。如果把场景扩展到多台设备上,就可以实现通过一台设备操控多台设备,这套功能称为 “一机多控”。具体说来就是主机与从机建立 Socket 连接,然后在主机上将用户的操作实时发送到各个从机,在从机上完成操作的回放。
一机多控的环境搭建比较灵活,手边的手机在安装 SoloPi 后,通过简单的建联操作即可完成部署。一机多控适配了目前市面上主流机型和 ROM,并封装了一些提升测试效率的快捷功能,如应用安装、数据清理、设备信息查看等等。
(7)性能测试-数据采集
性能数据随手测,本地自动生成报表。数据采集支持手工和广播两种触发方式,易于结合自动化。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末领取】
【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图+全套资料】
一、Python编程入门到精通

二、接口自动化项目实战
三、Web自动化项目实战

四、App自动化项目实战
五、一线大厂简历

六、测试开发DevOps体系
七、常用自动化测试工具

八、JMeter性能测试
九、软件测试全套资料
十、总结(文末尾部小惊喜)
生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!
生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!
只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!
相关文章:

Android UI自动化测试框架—SoloPi简介
1、UI自动化测试简介 软件测试简介 软件测试是伴随着软件开发一同诞生的,随着软件规模大型化,结构复杂化,软件测试也从最初的简单“调试”,发展到当今的自动化测试。 自动化测试是什么呢?自动化测试是把以人为…...
Android Studio Giraffe 正式版下载地址
Android Studio 是 Android 的官方 IDE。它专为 Android 而打造,可以加快您的开发速度,帮助您为每款 Android 设备构建最高品质的应用。 比以往更快地编码和迭代 Android Studio 基于 IntelliJ IDEA 而构建,可以提供较短的编码和运行工作流…...

【C语言】调试技巧
目录 一、什么是bug? 二、调试 1.一般调试的步骤 2.Debug 和 Release 三、调试环境准备 四、调试时要查看的信息 1.查看临时变量的值 2.查看内存信息 3.查看调用堆栈 4.查看反汇编信息 5.查看寄存器 五、练习 六、常见的coding技巧 七、const的作用 八、编程常见…...

MySQL SUBSTRING_INDEX() 函数的详细介绍
MySQL SUBSTRING_INDEX() 从给定字符串中返回指定数量的分隔符出现之前的子字符串。 当指定数字为正数时从最终分隔符的左侧返回子字符串,当指定数字为负数时从最终分隔符的右侧返回子字符串。 如果指定的次数大于分隔符的出现次数,则返回的子字符串将…...

开源数据库Mysql_DBA运维实战 (DML/DQL语句)
DML/DQL DML INSERT 实现数据的 插入 实例: DELETE 实现数据的 删除 实例: UPDATE 实现数据的 更新 实例1: 实例2: 实例3: DQL DML/DQL DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELE…...

【LangChain】Memory
概要 大多数LLM应用都有对话界面。对话的一个重要组成部分是能够引用对话中先前介绍的信息。至少,对话系统应该能够直接访问过去消息的某些窗口。更复杂的系统需要有一个不断更新的世界模型,这使得它能够执行诸如维护有关实体及其关系的信息之类的事情。…...

Java并发编程(六)线程池[Executor体系]
概述 在处理大量任务时,重复利用线程可以提高程序执行效率,因此线程池应运而生。 它是一种重用线程的机制,可以有效降低内存资源消耗提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行线程池可以帮助我们更好地管理线程的生命周期和资源使用,…...

macOS CLion 使用 bits/stdc++.h
macOS 下 CLion 使用 bits/stdc.h 头文件 terminal运行 brew install gccCLion里配置 -D CMAKE_CXX_COMPILER/usr/local/bin/g-11...

PS出现的问题——为什么PS另存的格式少了很多
在WIN11系统里面新安装的22和23版本PS会出现另存格式少的情况 解决方式:编辑——首选项——文件处理——开启旧版储存为 解决...
【Linux】进程通信篇Ⅱ:共享内存、消息队列、信号量
文章目录 一、共享内存1.1 一些接口1. shmget 函数:申请一个 system v 的共享内存块2. ftok 函数:设置唯一标识码3. shmctl 函数:控制 system v 的共享内存块(可以删除、查看...)4. shmat 函数:将进程与共享…...
8.14 校招 内推 面经
绿泡泡: neituijunsir 交流裙,内推/实习/校招汇总表格 1、半导体芯片一周资讯 - 小米OPPO之后,星纪魅族调整芯片业务,今年应届生或被全部优化,英伟达2024推出比H100更快的芯片 半导体芯片一周资讯 - 小米OPPO之后&…...

阿里云服务器安装部署Docker使用教程
本文阿里云百科分享如何在云服务ECS实例上,部署并使用Docker。Docker是一款开源的应用容器引擎,具有可移植性、可扩展性、高安全性和可管理性等优势。开发者可将应用程序和依赖项打包到一个可移植的容器中,快速发布到Linux机器上并实现虚拟化…...

WebRTC | ICE详解
目录 一、Candidate种类与优先级 二、ICE策略 1. iceServers 2. iceTransportPolicy 三、P2P连接 1.Nat类型 (1)完全锥型NAT (2)IP限制锥型NAT (3)端口限制锥型NAT (4)对称…...

网络设备(防火墙、路由器、交换机)日志分析监控
外围网络设备(如防火墙、路由器、交换机等)是关键组件,因为它们控制进出公司网络的流量。因此,监视这些设备的活动有助于 IT 管理员解决操作问题,并保护网络免受攻击者的攻击。通过收集和分析这些设备的日志来监控这些…...

2023年国赛数学建模思路 - 复盘:人力资源安排的最优化模型
文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 描述 …...

Compute shader SV 理解图
本图转子:【Computeshader】个人总结_蒋伟博的博客-CSDN博客...

生信豆芽菜-多种算法计算免疫浸润
网址:http://www.sxdyc.com/immuneInfiltration 一、使用方法 1、数据准备 一个全编码蛋白的表达谱基因,其中行为基因,列为样本 第一列为基因为行名,不能重复 2、选择计算的方法(这里提供了5种免疫计算的方法&#x…...

逆向破解学习-单机斗地主
试玩 破解思路 9000 是成功的代码 Hook代码 import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XposedHelpers; import de.robv.android.xposed.callbacks.XC_LoadPackage; public class HookComJuneGameDouDiZhu extends HookImpl{ Override p…...

matplotlib绘制位置-时序甘特图
文章目录 1 前言2 知识点2.1 matplotlib.pyplot.barh2.2 matplotlib.legend的handles参数 3 代码实现4 绘制效果5 总结参考 1 前言 这篇文章的目的是,总结记录一次使用matplotlib绘制时序甘特图的经历。之所以要绘制这个时序甘特图,是因为22年数模研赛C…...

数据库概述、部署MySQL服务、必备命令、密码管理、安装图形软件、SELECT语法 、筛选条件
Top NSD DBA DAY01 案例1:构建MySQL服务器案例2:密码管理案例3:安装图形软件案例4:筛选条件 1 案例1:构建MySQL服务器 1.1 问题 在IP地址192.168.88.50主机和192.168.88.51主机上部署mysql服务练习必备命令的使用 …...

【threejs】每天一个小案例讲解:创建基本的3D场景
代码仓 GitHub - TiffanyHoo/three_practices: Learning three.js together! 可自行clone,无需安装依赖,直接liver-server运行/直接打开chapter01中的html文件 运行效果图 知识要点 核心三要素 场景(Scene) 使用 THREE.Scene(…...
python数据结构和算法(1)
数据结构和算法简介 数据结构:存储和组织数据的方式,决定了数据的存储方式和访问方式。 算法:解决问题的思维、步骤和方法。 程序 数据结构 算法 算法 算法的独立性 算法是独立存在的一种解决问题的方法和思想,对于算法而言&a…...
生成对抗网络(GAN)损失函数解读
GAN损失函数的形式: 以下是对每个部分的解读: 1. , :这个部分表示生成器(Generator)G的目标是最小化损失函数。 :判别器(Discriminator)D的目标是最大化损失函数。 GAN的训…...
结合PDE反应扩散方程与物理信息神经网络(PINN)进行稀疏数据预测的技术方案
以下是一个结合PDE反应扩散方程与物理信息神经网络(PINN)进行稀疏数据预测的技术方案,包含完整数学推导、PyTorch/TensorFlow双框架实现代码及对比实验分析。 基于PINN的反应扩散方程稀疏数据预测与大规模数据泛化能力研究 1. 问题定义与数学模型 1.1 反应扩散方程 考虑标…...
Vuex:Vue.js 应用程序的状态管理模式
什么是Vuex? Vuex 是专门为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 在大型单页应用中,当多个组件共享状态时,简单的单向数据流…...
云原生技术驱动 IT 架构现代化转型:企业实践与落地策略全解
📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、背景:IT 架构演进的战略拐点 过去十年,企业 IT 架构经历了从传统集中式架构到分布式架构的转型。进入云计算…...

【读代码】从预训练到后训练:解锁语言模型推理潜能——Xiaomi MiMo项目深度解析
项目开源地址:https://github.com/XiaomiMiMo/MiMo 一、基本介绍 Xiaomi MiMo是小米公司开源的7B参数规模语言模型系列,专为复杂推理任务设计。项目包含基础模型(MiMo-7B-Base)、监督微调模型(MiMo-7B-SFT)和强化学习模型(MiMo-7B-RL)等多个版本。其核心创新在于通过…...

Git 使用大全:从入门到精通
Git 是目前最流行的分布式版本控制系统,被广泛应用于软件开发中。本文将全面介绍 Git 的各种功能和使用方法,包含大量代码示例和实践建议。 文章目录 Git 基础概念版本控制系统Git 的特点Git 的三个区域Git 文件状态 Git 安装与配置安装 GitLinuxmacOSWi…...
使用高斯朴素贝叶斯算法对鸢尾花数据集进行分类
高斯朴素贝叶斯算法通常用于特征变量是连续变量,符合高素分布的情况。 使用高斯朴素贝叶斯算法对鸢尾花数据集进行分类 """ 使用高斯贝叶斯堆鸢尾花进行分类 """ #导入需要的库 from sklearn.datasets import load_iris from skle…...

wsl开启即闪退
[ 问题 ]: 在一次电脑卡住,强制关机重启后,遇到打开WSL就闪退的问题在CMD中打开WSL,出现如上图的描述: C:\Users\admin>wsl wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持…...