重庆网站制作教程/河南网站关键词优化代理
一、移动端测试概述
移动端测试不是一个新的领域,所采用的测试的理论、原则和方法、技术和之前web的是一样的。
移动端的手工测试,和web端的点点点是一样的。
移动端的自动化测试,python+appium+unittest/pytest+ddt+BeautifulReport/allure+git/gitee+jenkins
1、移动端设备
当前大部分移动端测试是属于嵌入式测试范畴的,包括移动端的应用(app,小程序)测试以及移动端设备测试
- 手机(手机终端测试)
- 智能穿戴设备(手环、手表、眼镜、AR设备)
- 车机交互、车载
- pad、扫地机器人
2、移动端操作系统(os)
- Android
- ios
- 鸿蒙os4
- xiaomi澎湃os
- 黑莓
- windows phone
- 塞班4、5/米狗
3、移动端应用(app)
这个是软件测试工程师的主要测试对象,以Android为例:
- 原生app:以Android、iOS、鸿蒙提供的开发环境直接开发的app,数据处理能力比较强
- 混合开发app:数据处理使用Android,页面展示用的H5技术(更好看)
- web app:纯H5技术开发的app
- 小程序:
- 微信小程序:随用随装、不同卸载
- 支付宝小程序
- 今日头条小程序
- 百度小程序
二、移动端测试的要点(重点)
1、安装和卸载测试
web端也是需要安装和卸载测试的:
- 测试环境下,可以根据用户安装手册完成一次部署
- 上线之前的预发布环境中,要完整的执行一次安装过程(预演),上线安装就安全了。
- 内存不足的时候有没有提示
- 是否安装在了指定的文件夹下、是否有多余的文件夹生成
- 在安装过程中有电话打入、短信、消息、闹钟等事件的中断
- 服务器端的安装:金丝雀发布/灰度发布的方式
客户端app的安装:(重点)
- Android:
- 通过各种渠道获取apk文件,即可安装
- iOS:
- 安装包的后缀是ipa文件
- app已经获取到苹果发的企业证书,是可以随便装的
**上线appstore,下载安装**
**在测试环境中,将iphone收集的udid编号,给开发,开发打包在app中,该iphone就可以安装了**
**testflight是苹果提供内测工具,开发组通过testflight给对应测试人员账号发邮件,获取验证码并下载安装**
- Android:
web端的系统卸载:
- 应用程序包(文件夹),直接删除即可
- 对应的数据库也要手动卸载
- redis软件支持,也需要删除
移动端的app卸载:
- 直接卸载
- 检查卸载是否完整、干净(不能有多余的文件夹、缓存数据)
2、UI测试点
在UI页面展示上的不合理的内容、测试点:
- 要检查页面上是否有错别字
- 要检查页面布局风格:横向上风格要一致,按钮、标签、图片大小和样式要相同
- 页面颜色不能三种以上比较艳丽的颜色
- 文字不能超出所在标签的位置:文字超出文本框的范围,overlap
- 标签与标签之间叠加在一起了,cutoff
- 不允许出现违法、敏感的文字和图片
- 中文字符的支持
- 一些英文单词不能过度翻译:logo
3、app功能性测试(重点)
- app安装完成之后是否能正常启动
- app启动时的广告页显示是否正常、倒计时、跳过功能是否正常
- 注册功能
- 登录功能
- 注销功能
- 前后端切换app,检查是否可用
- 先正常使用app,切到后台,再从后台切回到前台
- 先正常使用app,切到后台,锁屏,解开屏幕,再从后台切回到前台
- 正常使用app,接电话,回来继续使用
- 正常使用app,弹窗了,切回后台,再回来
- …
- 登录及免登录的测试
- 数据更新
- 软件更新
- 相机、通讯录、录音机等功能的使用
- push消息通知测试
- 交叉事件测试
- 打电话
- 发短信
- 发邮件
- 闹钟
4、兼容性测试(重点)
做兼容性测试的目的是:app可以在不同的手机能正常使用(覆盖市场主流的50+手机以上)
1)需要兼容的要素
- 和软件的兼容
- 和硬件的兼容
- 品牌(华为、小米、苹果等)
- 屏幕大小不同:6.X
- 网络制式
- os系统兼容
- iOS:14、15、16等最新三个版本
- Android:13、14、15版本
- 鸿蒙:1、2、3、4
- 澎湃os:基于Android深度开发的
2)怎么做兼容性测试
兼容性测试一定要采用真实的设备进行测试。
- 公司没钱买:借手机
- 没钱不想借:租手机,在线的云测平台(20+自备和50+平台租赁)。
- testin
- 腾讯wetest
- 优测
- 蒲公英
- 公司不差钱:买,买最新的(可以是二手的)
3)兼容性测试关注的三个主要问题
- Exception:异常
- ANR:应用程序未响应
- Crash:崩溃、闪退
4)app专项测试数据(记住)
- app耗电量测试
- app流量测试
- app内存占用
- app的cpu占用
- 游戏app测试关注帧率
- 电池温度测试
三、Android系统概述
1、Android系统架构
- 应用程序层:计算器、qq、微信、支付宝等,主要用的是Android、H5
- 应用程序框架层:进行Android开发的支持的框架,java
- 函数库层(c++、java)
- Linux内核层
- 进程调度(SCHED)
- 内存管理(MM)
- 虚拟文件系统(VFS)
- 网络接口(NET)
- 进行间通信(IPC)
2、Android app的四个组件
每一个Android的app都是由四部分组成的。
1)activity:活动
每个app的一屏内容就称之为活动,相当于web中的一个页面,负责页面展示效果
2)service:服务
在app第一次启动的时候启动起来,主要负责数据的处理
3)content-provide:内容提供者
Android系统中的一个数据中转站
4)broadcast receiver:广播接收器
消息推送到Android系统
四、移动端测试环境搭建
本章讲的是Android环境的搭建,实现对Android移动端app的手工测试环境和自动化测试环境。
-
jdk环境和环境变量配置
jdk:java开发工具包,是java语言开发的基础环境,也是java开发的程序运行的环境
环境变量:jdk的bin目录;jdk下jre的bin目录配置到环境变量path里面
-
adt工具
adt:Android开发工具,包括Android模拟器和开发工具(adb的工具)
解压压缩包即可使用。
-
安装夜神模拟器
把夜神模拟器下的bin\adb.exe文件复制到adt-bundle-windows/sdk/platform-tooks下替换adb.exe
验证环境:cmd输入adb—显示版本号1.0.36即成功
一、adb工具的使用
adb:android debug bridge,作用是通过电脑端控制Android设备端的一个工具。
通过adb,就可以在pc端方便地进行手机/模拟器的操作了
1、连接设备
设备可以是Android的模拟器、Android手机、Android的其他移动端设备,不能是iOS的,可以是鸿蒙的(兼容Android)
连接设备:adb connect 127.0.0.1:62001,提示—already connected to 127.0.0.1:62001
断开连接设备:adb disconnect 127.0.0.1:62001,提示—disconnected 127.0.0.1:62001
2、查看连接到adb的Android设备名称信息(必背)
adb devices
,提示—List of devices attached
127.0.0.1:62001 device
127.0.0.1:62001:设备名,序列名
device:当前设备的状态,是正常连接状态
3、查看设备状态
adb get-state
设备的状态有4种,device,offline,unknown,unauthorizathion
- device:设备正常连接
- offline:连接出现异常,设备无响应
- unknown:没有连接设备
- unauthorizathion:未授权,连接手机的时候会出现
4、开启/关闭adb服务
adb start-server
adb kill-server
5、获取Android日志文件
- adb logcat -v time *:E > d:\aa.log
- -v time:在日志文件中添加日志记录的时间戳
- *:E:过滤日志等级为Error等级以上
- . > :重定向符号,是将cmd命令行的数据写入到外部文件
6、adb挂载到Android底层Linux内核上
adb shell
7、app的安装和卸载
安装的命令:从PC端通过adb的命令推送apk文件到Android设备并完成安装的过程
安装的命令:adb install PC端本地的apk文件的全路径
卸载的命令:adb uninstall 包名(在Android中包名就是指的进程、软件名)
8、文件推送(下载和上传)
将PC端本地文件上传到Android模拟器或者手机上、将模拟器、手机的文件下载到PC端。
上传命令:adb push 本地文件全路径 远程存放文件的目录
下载命令:adb pull 远程文件的全路径 本地存放目录(不要是根目录)
9、获取包名/activity名
1)adb shell —>cd /data/data
获取Android设备中安装的所有的api的包名
2)获取处于焦点状态的某个app的包名
需要先将app打开,并处于焦点状态
adb shell dumpsys window | findstr mCurrentFocus
3)获取Android设备安装的包名、第三方包名
adb shell pm list package
adb shell pm list package -3
10、启动app
adb shell am start -n 包名/活动名
二、monkey工具的使用
1、monkey简介
monkey测试:猴子测试、随机测试,在不清晰测试技术、不懂软件系统业务的情况的随意测试
monkey工具:其实是Android系统自带的一个小工具,也是可以通过adb命令启动,生成大量随机事件对Android设备的app页面进行操作,比如大量的点击事件、滑动事件、旋转事件、手势事件、按键等,最终想实现的是对app前端应用的稳定性测试(大量事件、长时间、不间断)、性能测试。
主要监控的指标:
- Exception:异常
- ANR:应用程序未响应
- Crash:崩溃、闪退
2、monkey工具随机测试(掌握)
参考文章:https://zhuanlan.zhihu.com/p/133858779
1)查看monkey帮助文档
基本的格式:adb shell monkey 参数列表 随机事件数量
2)-p指定可以操作的包
- 不指定-p:所有的包都可以被随机操作
- 指定一个-p:只能操作指定的这个包名的应用
- 指定多个-p:给指定的多个应用发送随机事件
3)-v日志详情
-v:显示注入事件比例及列表等
-v -v:显示更多的信息
4)-s:种子数
monkey是随机的,如果出现了bug,如何复现怎么搞?
如果指定固定的-s值,随机事件的类型和顺序就是固定了
5)–throttle 数字,单位ms
主要是在事件之间增加了延时作用。
下面的是事件比例调整的参数:
6)触摸事件调整参数:- -pct-touch 比例值(0~100)
触摸事件不单单是按键,它泛指发生在某一位置的一个down-up事件。
7)手势事件:- -pct-motion 比例值
手势事件是在屏幕上的滑动
8)- -pct-appswitch:更改用于切换app的不同页面的事件比例
9)- -pct-rotation 后面接屏幕旋转事件的比例值
10)- -ignore-timeouts
在monkey运行过程中如果出现超时异常,需要忽略异常,继续发送事件直到所有的事件发完
11)- -ignore-crashes
在monkey运行过程中如果出现闪退异常,需要忽略异常,继续发送事件直到所有的事件发完
三、monkey进行app的自动化测试(自定义脚本测试)了解
移动端自动化测试的常见测试工具:
- Appium工具:非常主流的免费的自动化工具,支持Android和iOS端的自动化
- uiautomator工具:录制脚本
- airtest:网易的一个自动化框架,支持python语言,支持录制和编程
1、简介
- appium包括两部分:
- appium客户端:appium是封装了selenium(webdriver api)方法的一个客户端软件(专有的方法),支持多种语言的,python、java、js等
- appium服务器端:处理客户端请求的,转交请求给Android设备的app去执行
- windows版本
- Linux版本
- macOS版本
2、appium进行自动化测试的环境搭建
-
node.js的安装
是appium server的支持语言环境。安装指定版本即可
-
appium的服务器端
-
配置jdk和sdk的家目录
-
设置host端口(127.0.0.1和4723)
-
启动服务
最小化放在任务栏即可,不能关闭
-
-
appium客户端的安装
cmd—>pip install appium-python-client
-
夜神模拟器
-
jdk环境安装和环境配置
-
pycharm ide集成开发环境
3、自动化测试脚本开发
selenium+appium+jdk的版本不同可能导致执行结果不同。
1、老版本组合
selenium(4.9版本及以前)、appium-python-client(2.6.0及以前)、jdk8,appium-server管理员权限运行。
# android模拟器上的计算器app的自动化脚本:1+1=2
# 导包
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
import time
import appium# 实现逻辑代码
# 先定义测试对象的参数,定义在一个字典中
desired_capabilities = {# 定义被测对象所处的平台名是什么:Android、iOS、FirefoxOS"platformName":"Android",# 定义android系统的版本号"platformVersion":"5.1.1",# 定义你的被测对象是手机设备还是模拟器,也可以填adb devices"deviceName":"Android Emulator",# 不允许app重置数据"noReset":True,# 要操作的app的包名"appPackage":"com.lilysgame.calculatorjw",# 要操作的acitvity名"appActivity":"com.lilysgame.calculator.MainActivity"
}# 创建appiumdriver对象
# 将定义好des的参数发送给appium server,帮我们找到当前环境下是否有可用的设备和app并能连上设备
# 到目前位置,是可以实现模拟器上的app正常启动
driver = webdriver.Remote(r"http://127.0.0.1:4723/wd/hub",desired_capabilities= desired_capabilities)time.sleep(10)# 对app的操作:1+1=2
# 识别并点击按钮1
# 使用id属性定位按钮1,并执行点击操作
driver.find_element(AppiumBy.ID,'com.lilysgame.calculatorjw:id/btnOne').click()
time.sleep(2)# 使用id属性定位按钮+,并执行点击操作
driver.find_element(AppiumBy.ID,'com.lilysgame.calculatorjw:id/btnAdd').click()
time.sleep(2)# 使用id属性定位按钮1,并执行点击操作
driver.find_element(AppiumBy.ID,'com.lilysgame.calculatorjw:id/btnOne').click()
time.sleep(2)# 使用id属性定位按钮=,并执行点击操作
driver.find_element(AppiumBy.ID,'com.lilysgame.calculatorjw:id/btnEqual').click()
time.sleep(2)# 断言
yq = "2"
sj = driver.find_element(AppiumBy.ID,'com.lilysgame.calculatorjw:id/et_show').get_attribute("text")
assert yq==sj# 关闭appium driver对象
driver.quit()
2、新版本组合
selenium(4.9以后)、appium-python-client(3.1.0及以后)、jdk8,appium-server管理员权限运行。
# android模拟器上的计算器app的自动化脚本:1+1=2
# 导包
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
import time
from appium.options.common import AppiumOptions
import appiumoption = AppiumOptions()
option.set_capability("platformName","Android")
option.set_capability("platformVersion","5.1.1")
option.set_capability("deviceName","Android Emulator")
option.set_capability("noReset",True)
option.set_capability("appPackage","com.lilysgame.calculatorjw")
option.set_capability("appActivity","com.lilysgame.calculator.MainActivity")# 创建appiumdriver对象
# 将定义好des的参数发送给appium server,帮我们找到当前环境下是否有可用的设备和app并能连上设备
# 到目前位置,是可以实现模拟器上的app正常启动
driver = webdriver.Remote(r"http://127.0.0.1:4723/wd/hub",options=option)# 对app的操作:1+1=2
# 识别并点击按钮1
# 使用id属性定位按钮1,并执行点击操作
driver.find_element(AppiumBy.ID,'com.lilysgame.calculatorjw:id/btnOne').click()
time.sleep(2)# 使用id属性定位按钮+,并执行点击操作
driver.find_element(AppiumBy.ID,'com.lilysgame.calculatorjw:id/btnAdd').click()
time.sleep(2)# 使用id属性定位按钮1,并执行点击操作
driver.find_element(AppiumBy.ID,'com.lilysgame.calculatorjw:id/btnOne').click()
time.sleep(2)# 使用id属性定位按钮=,并执行点击操作
driver.find_element(AppiumBy.ID,'com.lilysgame.calculatorjw:id/btnEqual').click()
time.sleep(2)# 断言
yq = "2"
sj = driver.find_element(AppiumBy.ID,'com.lilysgame.calculatorjw:id/et_show').get_attribute("text")
assert yq==sj# 关闭appium driver对象
driver.quit()
3、结合unittest框架实现
# selenium4.9以后版本AppiumOptions()\ChromeOpthons()
# appium-python-client用最新的3.1版本以上了
# jdk还是采用jdk8版本
# unittest框架from appium import webdriver
# selenium4.9以上需要
from appium.options.common import AppiumOptions
from appium.webdriver.common.appiumby import AppiumBy
import time
import unittestclass calctest02(unittest.TestCase):def setUp(self):# 创建option对象self.option = AppiumOptions()self.option.set_capability("platformName","Android")self.option.set_capability("platformVersion","5.1.1")self.option.set_capability("deviceName","Android Emulator")self.option.set_capability("noReset",True)self.option.set_capability("appPackage","com.lilysgame.calculatorjw")self.option.set_capability("appActivity","com.lilysgame.calculator.MainActivity")# 创建Appium服务器的对象self.driver = webdriver.Remote(r"http://127.0.0.1:4723/wd/hub",options=self.option)# 隐式等待self.driver.implicitly_wait(10)def test_01(self):'''实现计算器应用的加法运算'''self.driver.find_element(AppiumBy.ID,"com.lilysgame.calculatorjw:id/btnOne").click()time.sleep(2)self.driver.find_element(AppiumBy.ID,"com.lilysgame.calculatorjw:id/btnAdd").click()time.sleep(2)self.driver.find_element(AppiumBy.ID,"com.lilysgame.calculatorjw:id/btnTwo").click()time.sleep(2)self.driver.find_element(AppiumBy.ID,"com.lilysgame.calculatorjw:id/btnEqual").click()time.sleep(2)# 断言yq = "3"sj = self.driver.find_element(AppiumBy.ID,"com.lilysgame.calculatorjw:id/et_show").get_attribute("text")self.assertEqual(yq,sj)def tearDown(self):self.driver.quit()if __name__ == '__main__':unittest.main()
4、结合pytest框架实现
# selenium4.9以后版本AppiumOptions()\ChromeOpthons()
# appium-python-client用最新的3.1版本以上了
# jdk还是采用jdk8版本
# pytest框架实现代码from appium import webdriver
# selenium4.9以上需要
from appium.options.common import AppiumOptions
from appium.webdriver.common.appiumby import AppiumBy
import time
import pytest
import osclass Test_qq():def setup(self):# 创建option对象self.option = AppiumOptions()self.option.set_capability("platformName","Android")self.option.set_capability("platformVersion","5.1.1")self.option.set_capability("deviceName","Android Emulator")self.option.set_capability("noReset",True)self.option.set_capability("appPackage","com.tencent.mobileqq")self.option.set_capability("appActivity","com.tencent.mobileqq.activity.LoginActivity")# 创建Appium服务器的对象self.driver = webdriver.Remote(r"http://127.0.0.1:4723/wd/hub",options=self.option)# 隐式等待self.driver.implicitly_wait(10)def test_01(self):'''实现计算器应用的加法运算'''# 使用id定位,定位登录按钮# resource-id属性对应id定位方法self.driver.find_element(AppiumBy.ID,"com.tencent.mobileqq:id/btn_login").click()time.sleep(2)# content-desc属性对应的是ACCESSIBILITY_ID定位方法self.driver.find_element(AppiumBy.ACCESSIBILITY_ID,"请输入QQ号码或手机或邮箱").send_keys("2659160000")time.sleep(2)# xpath定位self.driver.find_element(AppiumBy.XPATH,'//android.widget.EditText[@content-desc="密码 安全"]').send_keys("1234567890")# id定位登录按钮self.driver.find_element(AppiumBy.ID,"com.tencent.mobileqq:id/login").click()time.sleep(10)# 断言yq = "验证码"sj = self.driver.find_element(AppiumBy.ID,'com.tencent.mobileqq:id/ivTitleName').get_attribute("text")assert yq==sjdef teardown(self):self.driver.quit()if __name__ == '__main__':# pytest.main(["--alluredir","./testresult"])# os.system("allure generate ./testresult -o ./testreport --clean")pytest.main(["-v"])
五、ADB连接手机真机
每个品牌手机的设置不尽相同,
1)开启手机的开发者模式(设置-系统-全部参数-miui14,连续点击3次以上,显示已经开启了开发者模式)
2)进入开发者模式(设置中搜索:开发者)
3)开启USB调试,会弹出一个授权框,一定要确认授权。
4)PC端,就可以使用adb devices查看手机设备了
5)其他的adb命令就可以使用了(不是所有的,因为有手机的权限问题)
相关文章:

软件测试进阶篇----移动端测试
一、移动端测试概述 移动端测试不是一个新的领域,所采用的测试的理论、原则和方法、技术和之前web的是一样的。 移动端的手工测试,和web端的点点点是一样的。 移动端的自动化测试,pythonappiumunittest/pytestddtBeautifulReport/alluregi…...

偏序关系用分治优化建图:ARC165F
https://atcoder.jp/contests/arc165/tasks/arc165_f 首先可以建图,然后变成求字典序最小的的拓扑排序 然后发现这样复杂度会炸,观察连边的条件是什么: l i < l j l_i<l_j li<lj r i < r j r_i<r_j ri<rj 这是个…...

StripedFly恶意软件:悄无声息运行5年,感染百万设备
导语:最近,俄罗斯网络安全公司Kaspersky发布的一项调查显示,一种名为StripedFly的高级恶意软件伪装成加密货币挖矿程序,悄无声息地在全球范围内运行了超过5年,感染了100万台设备。这是一种复杂的模块化框架,…...

Flink SQL DataGen Connector 示例
Flink SQL DataGen Connector 示例 1、概述 使用 Flink SQL DataGen Connector,可以快速地生成符合规则的测试数据,可以在不依赖真实数据的情况下进行开发和测试。 2、使用示例 创建一个名为 “users” 的表,包含 6 个字段:id…...

【监控指标】监控系统-prometheus、grafana。容器化部署。go语言 gin框架、gRPC框架的集成
文章目录 一、监控有哪些指标二、prometheus、grafana架构Prometheus 组件Grafana 组件架构优点 三、安装prometheus和node-exporter1. docker pull镜像2. 启动node-exporter3. 启动prometheus 四、promql基本语法五、grafana的安装和使用1. 新建空文件夹grafana-storage&#…...

时序分解 | Matlab实现PSO-VMD粒子群算法优化变分模态分解时间序列信号分解
时序分解 | Matlab实现PSO-VMD粒子群算法优化变分模态分解时间序列信号分解 目录 时序分解 | Matlab实现PSO-VMD粒子群算法优化变分模态分解时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 PSO-VMD粒子群算法PSO优化VMD变分模态分解 可直接运行 分解效果…...

leetcode 684. 冗余连接
树可以看成是一个连通且 无环 的 无向 图。 给定往一棵 n 个节点 (节点值 1~n) 的树中添加一条边后的图。添加的边的两个顶点包含在 1 到 n 中间,且这条附加的边不属于树中已存在的边。图的信息记录于长度为 n 的二维数组 edges ,edges[i] …...

yolov8模型训练、目标跟踪
一、准备条件 1.下载yolov8 https://github.com/ultralytics/ultralytics2.安装python https://www.python.org/ftp/python/3.8.0/python-3.8.0-amd64.exe3.安装依赖 进入ultralytics-main,执行: pip install -r requirements.txt pip install -U ul…...

Flink SQL Regular Join 、Interval Join、Temporal Join、Lookup Join 详解
Flink ⽀持⾮常多的数据 Join ⽅式,主要包括以下三种: 动态表(流)与动态表(流)的 Join动态表(流)与外部维表(⽐如 Redis)的 Join动态表字段的列转⾏…...

如何在搜索引擎中应用AI大语言模型,提高企业生产力?
人工智能尤其是大型语言模型的应用,重塑了我们与信息交互的方式,也为企业带来了重大的变革。将基于大模型的检索增强生成(RAG)集成到业务实践中,不仅是一种趋势,更是一种必要。它有助于实现数据驱动型决策&…...

实验七 组合器模式的应用
实验目的 1)掌握组合器模式(composite)的特点 2 分析具体问题,使用组合器模式进行设计。 实验内容和要求 在例3.3的设计中,添加一个空军大队( Wing)类,该类与Squadron、Group类是平行的,因此应该继承了AirU…...

Springboot实现人脸识别与WebSocket长连接的实现
0.什么是WebSocket,由于普通的请求是间断式发送的,如果要同一时间发生大量的请求,必然导致响应速度慢(因为根据tcp协议要经过三层握手,如果不持续发送,就会导致n多次握手,关闭连接,打开连接) 1.业务需求: 由于我需要使用java来处理视频的问题,视频其实就是图片,相当于每张图片…...

智能安全帽功能-EIS智能防抖摄像头4G定位视频语音气体检测
智能安全帽是一种集成多种智能功能的产品,例如实时定位、语音对讲、健康监测和AI智能预警等。这些丰富的功能能够更好地帮助工人开展工作,并提升安全保障水平。智能安全帽在各个行业中的应用越来越广泛。尤其在工程建设领域,项目管理和工作安…...

TEMU跨境平台珠宝首饰RSL报告如何办理?
首饰或者产品TEMU拼多多跨境平台要求的RSL报告如何办理? 珠宝首饰上架前必须进行RSL Report(欧盟禁限用化学物质检测报告) 随着人们对珠宝首饰的要求越来越高,为了确保珠宝首饰的安全性,欧盟REACH法规规定,…...

51单片机的篮球计分器液晶LCD1602显示( proteus仿真+程序+原理图+PCB+设计报告+讲解视频)
51单片机的篮球计分器液晶LCD1602显示 📑1.主要功能:📑讲解视频:📑2.仿真📑3. 程序代码📑4. 原理图📑5. PCB图📑6. 设计报告📑7. 设计资料内容清单&&…...

【NI-DAQmx入门】NI-DAQmx之Python
NI-DAQmx Python GitHub资源: NI-DAQmx Python 文档说明:NI-DAQmx Python Documentation — NI-DAQmx Python API 0.9 documentation nidaqmx支持 CPython 3.7和 PyPy3,需要注意的是多支持USB DAQ和PCI DAQ,cDAQ需要指定…...

YoloV8目标检测与实例分割——目标检测onnx模型推理
一、模型转换 1.onnxruntime ONNX Runtime(ONNX Runtime或ORT)是一个开源的高性能推理引擎,用于部署和运行机器学习模型。它的设计目标是优化执行使用Open Neural Network Exchange(ONNX)格式定义的模型,…...

pcigo图床插件的简单开发
1.前言: 如果想写一个图床并且投入使用,那么,接入picgo一定是一个不错的选择。picgo有着windows,mac,linux等多个客户端版本。实用且方便。 2. 开发的准备: 2.0. 需要安装一个node node这里我就不详细说…...

Find My手机保护壳|苹果Find My与手机保护壳结合,智能防丢,全球定位
随着科技水平的快速发展,科技美容这一行业做为新型产业新生而出。时尚IT品牌随着市场的多元化发展。针对手机品牌和功能的增加而呈多样化,将手机保护壳按质地分有PC壳,皮革 ,硅胶,布料,硬塑,皮套…...

encode和decode的区别
字节序列和字符串是Python中两种不同的数据类型,它们的主要区别在于表示和处理方式! 字节序列(Bytes): 字节序列是一种二进制数据类型,它由一系列字节组成。字节是计算机存储信息的基本单位,每…...

建设项目管理中的 5 大预算挑战
为建设项目管理制定可靠、准确的预算是一项艰巨的任务,对于中小型建筑企业来说尤其如此。预算必须精确,同时还要考虑到每项工作的独特性和复杂性。 一项建筑行业相关调查统计了参与施工预算流程的人员所面临的最大挑战,分别是时间、预算、不…...

vue2 集成 - 超图-SuperMap iClient3D for WebGL
1:下载SuperMap iClient3D for WebGL SuperMap iClient3D for WebGL产品包 打开资源目录如下 2:格式化项目中所用的依赖包 开发指南 从超图官网下载SuperMap iClient3D 11i (2023) SP1 for WebGL_CN.zip解压后,将Build目录下的SuperMap3D复制到项目中 \public\static…...

FPGA设计过程中有关数据之间的并串转化
1.原理 并串转化是指的是完成串行传输和并行传输两种传输方式之间的转换的技术,通过移位寄存器可以实现串并转换。 串转并,将数据移位保存在寄存器中,再将寄存器的数值同时输出; 并转串,将数据先进行移位࿰…...

hologres基础知识一文全
1 功能特性 1.1多场景查询分析 Hologres支持行存、列存、行列共存等多种存储模式和索引类型,同时满足简单查询、复杂查询、即席查询等多样化的分析查询需求。Hologres使用大规模并行处理架构,分布式处理SQL,提高资源利用率,实现海量数据极速分析。 亚秒级交互式分析 Holo…...

阿里云oss迁移到AWS S3
这里写自定义目录标题 0.项目背景1.rclone 方式2.rsync方式3.注意 0.项目背景 公司迁移要求:从阿里云oss到亚马逊s3,数据量大概500G-2T左右。 开启阿里云oss 加速模式,这样能够跨机房和区域加速。 主要采用以下两种方式同步数据,…...

RabbitMQ(高级特性):限流
消费端限流 在rabbitmq中,使用消费端限流必须开启手动签收信息 过MQ可以对请求进行“削峰填谷”,即通过消费端限流的方式限制消息的拉取速度,达到保护消费端的目的。 生产者批量发送消息: Test public void testSendBatch() {…...

LeetCode--570. 至少有5名直接下属的经理
文章目录 1 题目描述2 测试用例3 解题思路3.1 解法 1 1 题目描述 表: Employee ---------------------- | Column Name | Type | ---------------------- | id | int | | name | varchar | | department | varchar | | managerId | in…...

Ubuntu20.04下安装Redis环境
apt安装Redis环境 更新apt-get安装镜像源 安装Redis sudo apt-get install -y redis-server设置密码 # 编辑Redis的配置文件redis.conf,如果不知道配置文件的位置可以执行whereis redis.conf查看 sudo vim /etc/redis/redis.conf取消文件中的requirepass注释&am…...

什么是用户体验测试? 为什么很重要?
在当今数字化时代,用户体验(User Experience,简称UX)已经成为产品成功的关键因素之一。无论是应用程序、网站、硬件设备还是软件,提供出色的用户体验不仅能够吸引更多用户,还能够增加用户满意度,提高品牌忠诚度&#x…...

Android 图片翻面动画
一、需求描述 项目需要实现塔罗牌的翻面效果,需要点击图片后,图片实现翻面,并且翻面过程中,替换成图片资源,类似于扑克牌翻面。 二、实现思路 图片实现翻面效果,并且在动画执行到一半(刚好到图…...