移动端自动化测试实战

UI自动化测试的价值


1、提升回归测试的效率
2、可以进行兼容性测试

UI 自动化测试应用场景

• 冒烟测试自动化:提测之前自动断言提测质量,提供准入参考。

• 功能测试自动化:辅助 QA 与测试工程师的快速验证。

• 验收测试自动化:兼容性测试等。

• 移动端性能专项测试自动化:性能、卡顿、健壮性测试、竞品分析。

测试框架

• 阿里 Macaca

• 腾讯开源微信小程序自动化测试工具

• 百度内部的 Cafe 框架

自动化测试常见误区

强调自动化测试不代表手工测试无用

• 手工测试非常有用,仅有手工测试是不够的。

• 手工测试 + 自动化测试才是企业快速迭代的根基

UI 自动化测试的“瓶颈”

• 技术成本高:

• 人力成本高:优秀测试开发工程师难招

• 技术门槛高:80%的自动化测试工程师在自动化能力上都不及格

• 维护成本高

• 复用率不高:UI 和业务流程变更是最主要变更

• 稳定性不足:容易被干扰,执行慢

• 常见行业错误观点

• 错误观点一:UI 自动化测试无用论

• 错误观点二:UI 自动化测试只能模拟人工

合理地使用 UI 自动化

• 使用分层测试策略,控制 UI 自动化测试规模:

• 少数核心用例交给自动化测试

• 大部分的基础回归测试交给自动遍历

• 新功能测试交给人工测试

• 技术改进方案:

• 良好的维护模型:PageObject、数据驱动

• 更好的框架支持:增加 Watch,智能等待,失败重试等机制

自动化测试就是机器点点点?

• 传统自动化测试

• 自动探索测试 自动化对新功能进行测试?

• codeless 方向的自动化测试  不需要写代码就可以完成自动化测试

• 自动化测试用例智能生成 

如何高效实用的落地自动化

• 学习方向

• 了解待测产品和平台:Android、iOS、App

• 精通最好的测试框架:Appium、UI Automator、WebDriverAgent

• 掌握自动化测试落地经验:PageObject、稳定性提升、数据驱动……

• 达到的结果

• 一天搞定一款 app 的自动化测试脚手架

• 一天完成单个功能的业务测试自动化用例集合

• N 周内搞定公司的 app 自动化测试

移动自动化测试的技术体系

UI 自动化分类

• Web 自动化:Selenium

• App 自动化:Appium

• GUI 自动化:Windows、Mac

• 微信小程序自动化:App + Web 测试技术的外延形态

• 更多平台:智能设备、机器人、工业 app

UI 自动化测试方面的成就

• Google:Espresso、UI Automator

• Facebook:WebDriverAgent

• 焰焮ibaba:Macaca

• Ebay:Selendroid

• Walmart:Robotium

• Sauce Labs:Appium

• ThoughtWorks:Selenium

Appium

Appium 的设计理念

Appium client:对应语言的client包和脚本,如python的Appium-Python-Client并编写脚本

Appium server:启动服务开放端口,接收appium client客户端的http请求

driver:appium需要driver来驱动移动端,Appium team目前维护了很多driver,需要根据平台来选择driver。Android平台一般使用Uiautomator2 driver。。IOS使用XCUITest driver

 

 

自动化测试框架选择

• 推荐 Appium

• 跨语言:Java、Python、Node.js 等

• 跨平台:Andoid、iOS、Windows、Mac

• 底层多引擎可切换

• 生态丰富,社区强大

• iOS:KIF、WDA、XCTest

• Android:Robotium、UI Automator

• 特色框架:calabash、Macaca、ATX

Appium 引擎列表

• Android

• Selendroid、Espresso [推荐]

• UI Automator、UI Automator2 [推荐]

• iOS

• UI Automation [已废弃]

• XCUITest [推荐]

• 更多平台:Mac、Windows、游戏引擎等

Appium 多端架构与自动化

UI 分层测试体系

移动 App 分层测试

 移动 App 快速迭代模型

自动遍历测试与其价值

• 定义:以自动化的方式对 app 进行充分的功能遍历以探索 bug

• 价值

• 降低自动化维护成本,可替代 80% 的自动化测试

• 实现新功能的探索

• 实现老功能的回归

• 用途:多设备兼容测试、自动化专项测试

常见遍历工具与技术

• Android 原生 Monkey

• 百度 SmartMonkey

• 腾讯 New Monkey

• 阿里 Macaca 的 NoSmoke

• TesterHome 社区 vigossjjj smart_monkey

• TesterHome 社区 zhangzhao Maxim

• TesterHome 社区 seveniruby AppCrawler

• Google 出品的 App Crawler

合理的使用 UI 自动化

• 单元测试:使用 App 分层测试策略,增加单测规模,控制 UI 自动化测试规模。

• 移动 App 自动化测试:核心集成与验收测试用例交给自动化测试。

• 自动遍历测试:大部分的基础回归测试交给自动遍历。

• 人工测试:测试团队主负责,整个产品团队参与。

Android app 的常见概念

Android 自动化前提依赖

• Android SDK:Android Studio 可辅助安装

• 模拟器

• Android Studio 自带 Emulator [推荐]

• Genymotion、网易 MuMu、BlueStacks

• 真机

获取 App 的信息

• App 信息

• 获取当前界面元素:adb shell dumpsys activity top

• 获取任务列表:adb shell dumpsys activity activities

• App 入口

• adb logcat |grep -i displayed

adb logcat | findstr Displayed  (windows cmd用这个)

• aapt dump badging mobike.apk | grep launchable-activity

• apkanalyzer 最新版本的 SDK 中才有

• 启动应用

 Android 调试桥 adb 命令详解

环境准备

• 真机 or 模拟器

• 下载 Android SDK

• 设置 PATH 变量加入 SDK 的工具目录

Android 常用命令

• adb:Android Debug Bridge

• adb devices:查看设备

• adb kill-server:关闭 adb 的后台进程

• adb tcpip:让 Android 脱离 USB 线的 TCP 连接方式

• adb connect:连接开启了 TCP 连接方式的手机

• adb logcat:Android 日志查看

• adb bugreport:收集日志数据,用于后续的分析,比如耗电量

adb shell

• adb shell 本身就是一个 Linux 的 shell,可以调用 Android 内置命令

• adb shell

• adb shell dumpsys

• adb shell pm

adb shell pm clear com.android.contacts

 

 清除包的缓存数据和权限,获得一个比较新的环境。

• adb shell am

 • adb shell am start -W -n  com.android.contacts/.activities.PeopleActivity -S

• adb shell ps

• adb shell monkey

常用命令列表

• adb

• pm 包管理工具

• am  启动一个APP

• dumpsys 获取整个系统的性能数据

• uiautomator  获取APP的界面结构,执行自动化测试 

• input 完成简单的自动化指令

Android 性能统计 dumpsys

• 获取所有的 dumpsys 子命令 dumpsys | grep -i DUMP

• 获取当前 activity adb shell dumpsys activity top

• 获取 activities 的记录,可以获取到 appium 依赖的原始 activity dumpsys activity activities

• 获取特定包基本信息 adb shell dumpsys package com.xueqiu.android

• 获取系统通知 adb shell dumpsys notification

• 获得内存信息 adb shell dumpsys meminfo com.android.settings

• 获取 cpu 信息 adb shell dumpsys cpuinfo

• 获取 gpu 绘制分析 adb shell dumpsys gfxinfo com.android.settings

• 获取短信 adb shell dumpsys activity broadcasts | grep senderName=

uiautomator

• adb shell uiautomator runtest ...

运行自动化测试用例

• adb shell uiautomator dump

adb shell uiautomator dump

 

 把Android APP控件生成xml文件

UiAutomator是测试Android原生态APP的功能测试工具。Android 4.1发布时包含了这种新的测试工具—UiAutomator。UiAutomator用来做UI功能测试的。

uiautomator2是uiautomator的升级版,uiautomator是Google开发的一款用来做安卓自动化测试的Java库。适用于Android4.4+

简单的自动化工具 input 命令

• text (Default: touchscreen)

• keyevent [--longpress] ... (Default: keyboard)

• tap (Default: touchscreen)

adb shell input tap 529 1176

点击屏幕上该坐标  

• swipe [duration(ms)] (Default: touchscreen)

• draganddrop [duration(ms)] (Default: touchscreen)

• press (Default: trackball)

• roll (Default: trackbal

Appium 架构介绍

文档:The Context API - Appium Documentation

Appium 生态工具

• adb:Android 的控制工具,用于获取 Android 的各种数据和控制

• Appium Desktop:内嵌了 Appium Server 和 Inspector 的综合工具

• Appium Server:Appium 的核心工具,命令行工具

• Appium Clients:各种语言的客户端封装库,用于连接 appium server

• Java、Python、Ruby、robotframework-appium

• AppCrawler 自动遍历工具

Desktop 主要功能

• UI 分析

• 录制用例

• 元素查找测试

• Attach 已有的 session

• 云测试

python 客户端安装

• 客户端安装:pip install Appium-Python-Client

• IDE:PyCharm

• Python 多版本隔离工具:venv

• 国内依赖源:http://pypi.douban.com/simple/

• 测试框架:unittest、pytest、nose,推荐 pytest

APP自动化

控件定位方法

常用定位手段

• id

• Accessibility ID

• XPath

元素定位

• 测试步骤三要素:

• 定位、交互、断言

• 定位

• ID (重要)

• XPath(重要)

• Accessibility ID: content-desc(重要)

• 不推荐:Class -iOS -Android

常用自动化 API

常见自动化动作支持

• click

• sendKeys

• swipe

• touch action

手势操作 TouchAction

• press release longPress

• tap wait

• moveTo

• perform

capabilities 设置

Capabilities - Appium Documentation

Capabilities是appium启动server会话时设置的参数,告诉server需要启动的APP入口,android版本等信息。

• App APK 地址 appPackage 包名 appActivity Activity 名字

• automationName 默认使⽤ uiautomator2

• noReset fullReset 是否在测试前后重置相关环境

• autoGrantPermissions ⾃动赋予 App 权限

• unicodeKeyBoard resetKeyBoard 是否需要输⼊⾮英⽂之外的语⾔并在测试完成后重置输⼊法

 Appium 设备交互 API

可见Appium Python Client 文档Welcome to Appium python client’s documentation! — Python client 1.0 1.0 documentation

常用的设备交付命令

• 模拟电话、短信

用下面的命令模拟 GSM 电话和短信,注意:只能在模拟器上使用!

self.driver.make_gsm_call("5551234567", GsmCallActions.CALL);
 
self.driver.send_sms('555-123-4567', 'Hey lol')
 

Original error: gsmCall method is only available for emulators 这里在夜神模拟器上执行是失败的。

• 横竖屏切换

• App 处理

# 实现 APP 的安装
self.driver.install_app('/Users/johndoe/path/to/app.apk') 
 
# 检测 APP 是否被安装
self.driver.is_app_installed('com.example.AppName');
 
# 启动 APP
self.driver.launch_app()
 

• 键盘、粘贴板

设置系统剪贴板的内容:

self.driver.set_clipboard('happy testing')
self.driver.set_clipboard_text('happy testing')
 
获取到剪贴板的内容:

self.driver.get_clipboard()
self.driver.get_clipboard_text()

• 录屏

显式等待

• 功能差别

• 显式等待的条件非常灵活

• 隐式等待只用于元素定位

• 执行差别

• 显式等待本地轮询条件

• 隐式等待通过 appium server 轮询条件

def assert_exist_element(self,loc):
    try:
        WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(loc))
        return True
    except:
        print("元素{}不存在".format(loc))
        return False

XPath 介绍

• 绝对定位:根据严格的父子关系定位

• 相对定位:根据条件匹配定位

• 慢的原因:XPath 定位比其他定位慢,因为需要递归解析每个元素的属性

• 慢的不明显的原因:有 Cache 机制

常用 XPath 相对定位表达式

• 查找:

• //*[@text='登录’]

• //*[contains(@resource-id, 'login’)]

• 条件匹配:

• //*[contains(@resource-id, ‘login’) and contains(@text, ‘登录’)]]

• //*[contains(@text, ‘登录’) or contains(@label, '登录’)]]

• 寻找所有元素://*

Toast 识别方法

• automationName:uiautomator2

• getPageSource 是无法找到的

• 必须使用 xpath 查找

• 推荐 //*[@class= ‘android.widget.Toast']

• 或者 //*[contains(@text, "xxxxx")]

断言体系

元素是否存在:find_elements

assert len(self.driver.find_elements(by=AppiumBy.XPATH, value='//*[@text="Battery"]'))>=1 #断言存在该元素
assert "哈哈" in self.driver.find_element(by=AppiumBy.XPATH, value='//*[@text="Battery"]').text

• 元素属性正确性:get_attribute

参数化与数据驱动

参数化

• 参数化:根据传入的数据,对测试用例进行迭代调用

• 数据驱动:基于数据完成流程调度,通常数据来源自外部数据文件

• 参数化是数据驱动的基础和特例

数据驱动

• 参数化数据读取自外部文件:使用 YAML、JSON 读取

• 测试步骤读取自外部文件:定制执行引擎

• 断言步骤读取自外部文件:定制执行引擎

• 整个用例读取自外部文件:动态创建用例

Native 原生 App 的自动化测试

多种架构支持

Native 原生应用的分类

• Android 标准组件

• 非标准组件:

• Flutter:闲鱼

• React Native:Facebook

• Weex:极客时间

• 游戏

非标准控件的特征

• 非 WebView 组件

• 原生控件可识别

• HTML 控件被编译为 Native 控件

• HTML 的文本属性被解析为 Native 属性

• text 还是 content-desc 取决于 API 版本

常见 Native 自动化测试方式

• Android 原生组件:Appium 默认支持

• Native非标准组件:Appium默认支持

• 自定义 View 识别:

• 使用相对定位,父控件加百分比偏移

• OCR、图像识别、AI

• 游戏控件识别:使用游戏引擎特定技术

游戏自动化测试支持

• Appium 提供了简单的游戏自动化测试支持

• 图像识别

• AI 识别

• 游戏测试的推荐做法

• 提高可测性:编码输出游戏引擎下的控件布局信息,与 Appium 对接

• 使用成熟的 airtest 框架

Hybrid 混合 App 的自动化测试

WebView 控件在 Appium 中的抽象

• Native 层面支持

• uiautomator 解析 WebView 中的内容并映射为原生控件

• getPageSource 为 DOM 结构可发现 WebView 组件和控件

• 切换为 WebView 上下文

• 切换后才是正规的 Web

• getPageSource 为 HTML

• 可以使用 CSS 定位等

Hybrid 测试流程

• 首先进去带有 WebView 的页面

• 使用 Contexts API 寻找 WebView

• 使用 Context 切换到 WebView

• 使用 CSS 等 Web 定位方式

• 使用 Context 重回 Native

真机进行 WebView 测试的前提

• 模拟器默认支持

• 物理机需要打开 app 内开关

• 检测是否打开:反编译检查对应的 API 调用

 WebView 测试 - Python

找对 ChromeDriver 的版本

• Android 默认浏览器:

• 老版本 Android 用 Browser,新版本 Android 用 Chrome

• adb shell dumpsys package com.android.webview | grep versionName

• adb shell dumpsys package com.android.chrome | grep versionName

• App 自带 WebView 组件:每个 App 自带的 WebView 的版本也都不相同

Android WebView进程信息

• getContextHandles

• 查看所有的 WebView 进程

• adb shell cat /proc/net/unix | grep webview

• Context 切换

• 把 domain socket 映射为本地的 socket 端口

• adb forward tcp:$port localabstract:webview_devtools_remote_$pid

• 获取对应的 WebView 组件版本 http://localhost:$port/json/version

• ChromeDriver 协议交互

设置 ChromeDriver

• ChromeDriver 安装

• 提前下载所有的 ChromeDriver 版本备用

• 运行时指定

• 隐式选择:1.8版本以后支持自动选择 ChromeDriver

• 显式指定:chromedriverExecutableDir 设置

• 调试开关:

• showChromedriverLog

纯 H5 站自动化测试

浏览器自动化技术原理

浏览器调试工具 DevTools

 对网站进行分析

 移动浏览器测试 - Python

 

 小程序自动化测试

小程序自动化的三个方法

• 利用 Uiautomator 的原生定位

• 利用微信提供的小程序自动化 SDK

• 基于WebView的测试方法

基于原生定位的方法

• Appium 使用 Uiautomator2 定位可以识别内部 WebView 组件

• 缺点:元素定位符不够精确,content-desc、resource-id 多数都没有

• NoReset 默认为 false,会默认清空微信聊天记录,所以请使用测试机测试帐号

基于微信提供的小程序自动化 SDK

• 使用 Node.js 体系

• 微信小程序自动化 SDK + 标准的测试框架

• 支持真机与 Web 模拟器

微信小程序自动化 SDK 的缺点

• 从官网提供的代码示例来看,微信的这套体系主要用于研发自测

• 微信的研发对自动化测试理解不到位,大量的 wait,实用性不高

• 需要在已有的 WebSocket 体系上做二次封装对接 Appium

• 希望微信可以重视这块的测试支持改进

基于 WebView 的测试方法

• 微信6.x版本支持基于 WebView 自动化测试

• 7.x改版后默认已经无法使用基于 WebView 的自动化

• 7.x + root强行开启 WebView debug + Appium hack

• 曾经这个方案是最好用的,Appium 默认支持

• 但是当前微信版本里这个方法已经被破坏,绕过条件比较苛刻,暂时不可用了

Page Object 模式

做法

• 以页面为单位独立建模

• 隐藏实现细节

• 本质是面向接口编程

• 优点

• 减少重复 find click 样板代码

• 易读性提高

• 页面修改不影响测试用例

Page Object 六大设计原则

登录场景

• 登陆页面提供 login findPassword 功能

• Login 类 + login findPassword 方法

• 登录页面内的元素有多少并不关心,隐藏内部界面控件

• 登录成功和失败会分别返回不同的页面

• findPassword

• loginSuccess

• loginFail

• 通过方法返回值判断登录是否符合预期

编写用例顺序

• 根据界面封装 page 类与方法,实现可以为空

• 编写用例,不断重构明确 page 里方法的入参和返回值

• 开始实现 page 内的方法

• 调试

BasePage 封装

• 实现通用的 Page 方法,对常用自动化行为做封装

• 管理各种 Driver

• 减少每个 Page 对 Appium、Selenium 等库的太多依赖

自动化行为封装

• 异常弹框处理:广告、好评、升级、tips 等弹框

• 通用自动化能力封装

基于 POM 的用例组织结构

• page:完成对页面的封装

• driver:完成对 Web、Android、iOS、接口的驱动

• testcase:调用各类 page 完成业务流程并进行断言

• data:配置文件和数据驱动

• utils:其他便捷的功能封装,可选

测试用例管理

• 用例组织结构:

• 使用 package 管理业务模块

• 使用 class 管理业务对象、使用method完成业务具体行为

• 数据驱动:测试数据、测试步骤、测试断言

• 测试用例:

• 使用 testcase 完成测试步骤的定义

• 使用 assertion 完成业务正确性校验

• 持续集成:使用 Jenkins 完成持续集成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/64470.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux内网穿透应用场景有哪些?快解析有什么用处?

随着网络技术的不断发展,无论是工作上还是在生活中人们对网络的依赖和需求越来越高。Linux内网穿透作为一种创新的解决方案,为我们提供了无限可能。 首先我们了解一下Linux操作系统。Linux是一套免费使用和自由传播的类Unix操作系统,是一个基…

字符函数、字符串函数、内存函数

目录 求字符串长度: size_t strlen ( const char * str ); 无长度限制的字符串函数 字符串拷贝: char * strcpy ( char * destination, const char * source ); 字符串追加: char * strcat ( char * destination, const char * source ); 字…

AR远程专家指导在汽车改装上的应用有哪些?

随着科技的不断发展,AR增强现实技术逐渐走进了我们的生活。加上商贸国际化,远程协同纵深到制造生产的更多环节,研发协同、工艺优化等场景复杂、跨层级、需要频繁沟通确认的流程正通过AR应用实现全面远程化的过渡,在汽车行业&#…

机器视觉赛道持续火热,深眸科技坚持工业AI视觉切入更多应用领域

随着深度学习等算法的突破、算力的不断提升以及海量数据的持续积累,人工智能逐渐从学术界向工业界落地。而机器视觉作为人工智能领域中一个正在快速发展的分支,广泛应用于工业制造的识别、检测、测量、定位等场景,相较于人眼,在精…

C++ 测试框架 GoogleTest 初学者入门篇 丙

断言 什么是断言?断言是用来对表达式执行比较的代码块,调用时类似函数。当表达式一致时,断言返回成功,否则失败。 googletest 的断言是一组宏定义。分为 ASSERT_* 和 EXPECT_* 两种。 比如 ASSERT_EQ(1, 2);EXPECT_EQ(1, 2);上…

MySQL主从复制——概念、原理、搭建过程

文章目录 1.主从复制概念2.主从复制原理3.主从复制结构的搭建3.1 主库配置3.2 从库配置 4.测试主从复制是否搭建成功5.主从复制的小结 DML(data manipulation language)是数据操纵语言:它们是SELECT、UPDATE、INSERT、DELETE,就象…

vcode开发go

配置环境变量 go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct 创建文件夹 mkdir hello cd hello go mod help go mod help 初始化一个项目 go mod init hello 获取第三方包 go get github.com/shopspring/decimal 将依赖包下载到本地 go mod …

卷积相关点

从传统的神经网络到卷积神经网络 一.传统的神经网络(全连接网络) 参数太多,冗余度高,容易过拟合,难以训练 二.卷积神经网络 1.空间平移的不变性:当输入的图像在空间上发生平移时,CNN的相应不…

信息与通信工程面试准备——专业知识提问

1.无线通信:依靠电磁波在空间传播以传输信息。 2.通信的目的:传输信息。 3.通信系统:将信息从信源发送到一个或多个目的地。 4.本书中通信一般指电信:利用电信号传输信息(光通信属于电信,因为光也是一种…

[NOIP2007 普及组] 纪念品分组

[NOIP2007 普及组] 纪念品分组 题目描述 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得 的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品, 并且…

FreeRTOS任务级临界代码保护

前言 临界段代码也叫临界区,是指那些必须完整运行,不能被打断的代码,比如有的外设的初始化需要按照严格的时序,初始化过程不能被打断。FreeRTOS在进入临界段代码的时候需要关闭中断,当处理完临界段代码以后再打开中断…

如何搭建自动化测试框架?资深测试整理的PO模式,一套打通自动化...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Po模型介绍 1、简…

wpf 3d 坐标系和基本三角形复习

wpf 3d 坐标系的描述见此, WPF 3d坐标系和基本三角形_wpf 坐标系_bcbobo21cn的博客-CSDN博客 X轴正向向右,Y轴正向向上;Z轴,正向是从屏幕里边出来,负向是往屏幕里边去;坐标原点是在呈现区域的中心&#x…

史上最细,自动化测试-logging日志采集详细实战(一)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 日志概述 1、日志…

C#实现旋转图片验证码

开发环境:C#,VS2019,.NET Core 3.1,ASP.NET Core 1、建立一个验证码控制器 新建两个方法Create和Check,Create用于创建验证码(返回1张图片和令牌),Check用于验证(验证图…

决策树和随机森林对比

1.用accuracy来对比 # -*-coding:utf-8-*-""" accuracy来对比决策树和随机森林 """ from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import load_wine#(178, 13…

【LeetCode】240.搜索二维矩阵Ⅱ

题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1: 输入:matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,…

Iotdb 0.13配置集群和数据同步共享

描述 官网集群配置示例:官方文档 准备2台服务器,并且相互可以ping通和相关端口开放: 192.168.1.1192.168.1.2 相关介绍请查看官网及相关文档。 配置 1、iotdb 0.13版本下载(如果已安装请跳过),进入op…

24届近5年杭州电子科技大学自动化考研院校分析

今天给大家带来的是杭州电子科技大学控制考研分析 满满干货~还不快快点赞收藏 一、杭州电子科技大学 学校简介 杭州电子科技大学(Hangzhou Dianzi University),简称“杭电”,位于杭州市,是浙江省人民政…

PE半透明屏,在建筑行业中,有哪些应用展示?

PE半透明屏是一种新型的屏幕材料,具有半透明的特点。 它由聚乙烯(PE)材料制成,具有良好的透明度和柔韧性。 PE半透明屏广泛应用于建筑、广告、展览等领域,具有很高的市场潜力。 PE半透明屏的特点之一是其半透明性。…