版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
几款Ahdmid应用自动化测试工具
简述:
木文介绍几款流行的Android应用自动化测试工具。
Monkey测试:随机测试,压力测试,运行在模拟器或实际设备中。
MonkeyRunner测试:操作简单,可录制测试脚本,可视化操作,主要生成坐标的自动化操作,
移植性不强
Robotium测试
Ronaorex测试
Appium测试
UIAutomator测试
TestBird测试
1、Monkey测试
Monkey即猴子,Monkey测试,就像一只猴子,在电脑面前,乱敲键盘在测试。
Monkey测试主要用于Mndroid应用程序压力测试的小工具,主要目的就是为了测试app是否会
Crasho
Monkey测试原理:Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备
中。它向系统发送伪随机的用户事件流(如按健输入、触摸屏输入、手势输入等),实现对正在开发的
应用程序进行乐力测试。通常也称随机测试或者稳定性测试。Monkey测试是一种为了测试软件的稳
定性、健壮性的快速有效的方法。
1>Monkey特征
A.测试的对象仅为应用程序包,有一定的局限性。
B.Monky测试使用的事件流数据流是随机的,不能进行自定义。
C.可对MonkeyTest的对象,事件数量,类型,频率等进行设置。
D.Monkey虽可根据一个指定的命令脚本发送按键消息,但其不支持条件判断,也不支持读取待
测界面的信息来执行验证操作。
E.Monkey运行在设备或模拟器上面,可以脱离PC运行,验证待测应用在这些随机性输入面前是
否会闪退或者崩溃。
2>Monkey程序介绍
①Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径
是:/system/framework/:
②程序是由一个名为“monkey”的Shell脚本来启动执行,shel1脚本在Android文件系统
中的存放路径是:/syslcm/bin/monkcy:
③Monkey命令启动方式:
a.可以通过PC机CM)窗口中执行:adbshel1monkey(+命令参数}来进行Monkey测试
b.在PC上adbshell进入Android系统,通过执行monkey{+命令参数}来进行Monkey测试
c.在Android机或者模拟器上直接执行monkey命令,可以在Android机上安装Android终端模
拟器
④对特定APP包进行测试的命令为adbshellmonkey-p<>
3>实例
①测试前提条件
a.将手机恢复出厂设置
b.恢复出厂设置后,进入设置一〉关于手4几一〉高级设置一〉勾选'保持唤醒状态’
c.在设置安全中设置解锁图案以及PIN码
d.连接adbtool
e.手机开启后台log(祐他#***),开启mainlog,,mobilelog和netlog
②测试步骤
a.使用USB线连接手机和电脑
b.在电脑中输入Monkey命令:
adbshellmonkey-p<>—throttle380-v-s3500
300000>C:\monkey_
c.在Monkey结束以后直看它停留的界血并且做一些简单的测试,如拨打电话,发送信息等
③测试结果
Monkey的测试结果可以通过monkey_查看,如果测试结果正常,在log最后一行会有monkey
finished显示并且手机运行正常。如果应用程序产生了应用程序不响应ANR(application
notresponding)的错误,Monkey将会停止并报错,如果应用程序崩溃Crash或接收到任何失控异常,
Monkey也会停止并报错。
a.在运行Monkey命令时,遇到Crash或者ANR,就会自动终止。程序无响应的问题:在日志中
搜索“ANR”
b.崩溃问题:在日志中搜索“Exception”(如果出现空指针,NulIPointerException)一定是
有bug
例如在log最后一行显示crashedatevent30C000usingseed3500。
c.最后搜索“error”
一般我们执行Monkey时,在3万次以内发生Crash的话就认为Monkey是有问题的,要提交PR。
④提交Monkey的PR
在执行Monkey命令时发生Crash或者ANR时需要提交PR,具体提交MonkeyPR的规则如下:
a.标题:在PR标题中加上[Monkey]内容:主要要包含自己执行的命令以及在多少次发生crash
b.内容:主要要包含自己执行的命令以及在多少次发生crash
c.其它:在PR上要附上相关的Monkeylug还有手机后台开启的lug,如果有相关的强制关闭
的图片也可以贴上。
4>Monkey参数
Monkey命令:adbshellmonkey-p<>—throttle38C-v-s>C:\monkey_»这个monkey
命令,当monkeytest过程中遇到Crash或者ANR,就会自动终止。
C:\monkey_指将Monkey的log存在PC端的C盘根目录下。
常规类参数
1、-hplp
作用:列出简单的用法
例:adbshe!1monkey-help也可不写help
2、-v
作用:命令行上的每一个-v都将增加反馈信息的详细级别。
LevelO(默认),除了启动、测试完成和最终结果外只提供较少的信息。
adbshellmonkey-p.map-v100
Levelb提供了较为详细的测试信息,如逐个发送到Activity的事件信息。
adbshel1monkey-p.map-v-v100
Level2,提供了更多的设置信息,如测试中选中或未选中的Activity信息。
adbshellmonkey-p.map-v-v-v100
比较常用的是-V-V-V,即最多详细信息,一般会保存到指定文件中供开发人员查找bug原因时
使用。
例;adbshellmonkey-v10
事件类参数
1、-s<seed>
作用:伪随机数生成器的seed值。如果用相同的seed值再次运行monkey,将生成相同的事件
序列。
例:adbshellmonkey-s04-v10
2、一throttle〈milliseconds)
作用:在事件之间插入固定的时间(亳秒)延迟,你可以使用这个设置来减缓Monkey的运行速
度,如果你不指定这个参数,则事件之间将没有延迟,事件将以最快的速度生成。
注:常用参数,一般设置为300毫秒,原因是实际用户操作的最快300亳秒左右一个动作事件,
所以此处一般设置为300亳秒。
例:adbshellmonkey-throttle300-v10
3、一pct-touch〈percent)
作用:调整触摸事件的仃分比。(触摸事件是指在屏幕中的•个down-up事件,即在屏幕某处按
下并抬起的操作)
注:常用参数,此参数设置要适应当前被测应用程序的操作,比如一个应用80舟的操作都是触摸,
那就可以将此参数的百分比设置成相应较高的百分比。
例:adbshellmunkey-pct-touch100-v10
4、一pct-motion<percent>
作用:调整motion事件百分比。(motion事件是由屏幕上某处一个down事件、1—系列伪随机
的移动事件和一个up事件组成)
注:常用参数,需注意的是移动事件是直线滑动
例:adbshellmonkey—pct-motion100-v10
5、一pct-trackball<percent>
作用:调整滚动球事件百分比。(滚动球事件由一个或多个随机的移动事件组成,有时会伴随着
点击事件)
注:不常使用参数,现在手机几乎没有滚动球,但滚动球事件中包含曲线滑动事件,在被测程序
需要曲线滑动时可以选用此参数。
例:adbshellmonkey-pel-trackball100-v10
6^-pct-nav<percent>
作用:调整基本的导航事件门分比。(导航事件由方向输入设备的上下左右按键所触发的事件组
成)
注:不常用操作。
例:adbshellmonkey—pct-nav100-v10
7、一pct-majornav<percent>
作用:调整主要导航事件的百分比。(这些导航事件通常会导致UI界面中的动作事件,如5-way
键盘的中间键,回退按键、菜单按键)
注:不常用操作。
例:adbshellmonkey-pct-majornav100-v1U
8、一pct-syskcys<pcrccnt>
作用:调整系统事件百分比。(这些按键通常由系统保留使用,如Home、Back、StartCall.
EndCalk音量调节)
注:不常用。
例:adbshellmonkey-pct-syskcys100-v10
9、一pct-appswitch<p?rcent>
作用:调整Activity启动的百分比。(在随机的时间间隔中,Monkey将执行一个startActivity()
调用,作为最大程度覆盖被测包中全部Activity的一种方法)
注:不常用。
例:adbshellmonkey-pct-appswitch100-v5
10、一pct-anyevent
作用:调整其他事件的百分比。(这包含所有其他事件,如按键、其他在设备上不常用的按钮等)
注:不常用。
例:adbshellmonkey-pct-anyevent100-v5
约束类参数
1-p<a1lowed-package-name>
作用:如果你指定•个或多个包,Monkey将只允许访问这些包中的Activity。如果你的应用程
序需要访问这些包(如选择联系人)以外的Activity,你需要指定这些包。如果你不指定任何包,Monkey
将允许系统启动所有包的Activity。指定多个包,使用多个->一个-p后面接一个包名。
注:常用参数。
例:adbshellmonkey-pid.browser-v10
2^-c<main-category>
作用:如果你指定一个或多个类别,Monkey将只允许系统启动这些指定类别中列出的Acti/ity。
如果你不指定任何类别,Monkey将选择谢列类别中列出的Activity,ORYJAUNCHER和ORYJIONKEY,
指定多个类别使用多个-c,每个-c指定一个类别。
注:不常用。
3、一dbg-no-events
作用:设置此选项,Moakcy将执行初始启动,进入一个测试Activity,并不会在进一步生成事
件。为了得到最佳结果,结合参数-v,一个或多个包的约束,以及一个保持Monkey运行30秒或更长
时间的非零值,从而提供了一个可以监视应用程序所调用的包之间转换的环境。
注:不常用。
4、一hprof
作用:设置此选项,将在Monkey生成事件序列前后生成profilling报告。在data/misc路径下
生成大文件('5Mb),所以要小心使用。
注:不常用。
5、一ignore-crashes
作用:通常,应用发生崩溃或异常时Monkey会停止运行,如果设置此项,Monkey将继续发送事
件给系统,直到事件计数完成。
注:常用。
6、-ignore-timeouts
作用:通常,应用程序发生任何超时错误(如"ApplicationNoiresponding”对话框)Monkey
将停止运行,设置此项,Monkey将继续发送事件给系统,直到事件计数完成。
注:常用。
7^-ignore-security-exception
作用:通常,当程序发生许可错误(例如启动•些需要许可的Activity)导致的异常时,Monkey
将停止运行。设置此项,Monkey将继续发送事件给系统,直到事件计数完成。
注:常用。
8、-ki11-process-after-error
作用:通常,当Monkey由于一个错误而停止时,出错的应用程序将继续处于运行状态。设置此
项,将会通知系统停止发生错误的进程。注意,正常(成功)的结束,并没有停止启动的进程,设备
只是在结束事件之后简单的保持在最后的状态。
9、一monitor-native-crashes
作用:监视并报告Andorid系统中本地代码的崩溃事件。如果设置一kill-process-after-error,
系统将停止运行。
10、一wait-dbg
作用:停止执行中的Monkey,直到有调试器和它相连接。
样例:
adbshellmonkey-pid.settings-throttle380-v-v-v
-s3500300000>E:\Test\monkey_
测试结果:
测试完成后均正确时会显示Monkeyfinished:
Eventsinjected:300
:Sendingrotationdcgrcc=0,pcrsist=falsc
:Dropped:keys=0poiliters=2trackballs=0f1ips=0
rolations=0
##Networkstats:elapsedtime=42700ms(0msmobile,0ms
wifi,42700msnotconnected)
//Monkeyfinished
有bug时,会出现error:
**Monkeyabortedduetoerror.
Eventsinjected:8530
:Sendingrotationdegree=0,persist=false
:Dropped:keys=5pointers=8trackballs=0flips=0
rotations=0
##Networkstats:elapsedtime=ms(0msmobile,0mswifi,
msnot
connected)
2、MonkeyRunner测试
MonkeyRunner工具是使用Jython(使用Java编程语言实现的Python)写出来的,它提供了多个
API,通过MonkeyRunnerAPI可以写一个Python的程序来模拟操作控制Android设备app,测试其
稳定性并通过截屏可以方便地记录出现的问题。
MonkeyRunner和Monkey没有直接的关系。Monkey是在设备/模拟器直接运行adbshell命令生
成用户或系统伪随机事件流来进行测试的。
ladbI甘ddb5dlmonkey引adbd
PCI、L信动
monkey
超ui裾
\lz
冠
Android
而MonkeyRunner则运行在PC上,需要通过服务器/客户端的的模式向设备或者模拟器上的
android应用发送指令来执行测试。它支持自己编写插件,控制事件,随时截图,简而言之,任何你在模
拟器/设备中能干的事情,MonkeyRunner都能干,而且还可以记录和回放。
1>MonkeyRunner特征
1)MonkeyRunner工具在工作站上通过API定义的特定命令和事件控制设备或模拟器(可控)
2)精确控制事件之间的事件
3)可以进行:点触屏、拖拽、长按、键盘事件
4)可以智能截图对比和判断
5)回溯出详细具体的BUG路径
2>MonkeyRunner优缺点
1)能完全模拟人工所有操作
2)有详细的API文档参考
3)可以写出智能图像对比脚本
4)支持java和Pytnon两种语言脚本
5)脚本移植性差
3>MonkeyRunner测试类型
1)多设备控制
MonkeyRunnerAPI可以跨多个设备或模拟器实施测试套件。您可以在同•时间接上所有的设备或
一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。您也
可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。
2)功能测试
MonkeyRunner可以为一个应用自动贯彻一次功能测试。您提供按键或触摸事件的输入数值,然
后观察输出结果的截屏。
3)回归测试
MonkeyRunner可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测
试应用的稳定性。
4)可扩展的自动化
由于MonkeyRunner是一个API工具包,您可以基于Python模块和程序开发一整套系统,以此来
控制Android设备。除了使用MonkeyRunnerAPI之外,您还可以使用标准的Pythonos和subprocess
模块来调用AndroidDebugBridge这样的Android工具。
4>MonkeyRunner工具
MonkeyRunnerAPI主要包括三个模块
1)MonkeyRunner:
此类提供连接真机和模拟器方法waitForConnection(floattimeout,stringdeviceid),还提
供了创建用户界面显示信息的alert()方法。
2)MonkeyDevice
代表一个设备或模拟器。此类提供了安装和卸载程序包、开启Activity、发送按键和点击事件、
运行测试包等方法
拖拉控件drag(tuplestart,tupleend,floatduration,integersteps)//duration手势持续
时间
按键press(stringkeycode,dictionarytype)//keycode:KEYCODE_HOME,..
type:DOWN,UP,D()WN_AND_UP...
安装应用installPackage(pc端存放apk路径)
启动应用starActivity(package*/'+activity)〃一个参数
点击touch(integerx,integery,integertype)//type:DOWN,UP,DOWNANDUP...
输入type(stringmessage)
截屏takeSnapshot()
3)MonkeyImage
这个类提供了捕捉屏幕的方法。
在测试过程中用来保存测试截图,将位图保存为各种格式,并可以比较两个Monkeyimage对象,
将image保存到文件等。
图像对比sameAs(MonkeyImageother,floatpercent)//对比的相似度,结果boolean类型
图像保存writetoFile(stringpath,stringformat)
5>MonkeyRunner环境搭建
Monkeyrunner的环境搭建,需要安装以下工具:jdk、androidsdk.python编译器。
MonkeyRunner环境搭建
Eelipse中MonkeyRunner环境搭建
6>MonkeyRunner运行
运行有两种方式
①在CMD命令窗口直接运行monkeyrunner
②使用Python编写测试代码文件,在CMI)中执行monkeyrunner运行
不论使用哪种方式,您都需要调用SDK目录的tools子目录下的monkeyrunner命令。
1)模拟器启动
在运行monkeyrunner之前必须先运行相应的模拟器或连接真机,否则monkeyrunner无法连接到
设备
运行模拟器有两种方法:1、通过eclipse中执行模拟器2、在CMD中通过命令调用模拟器
这里介绍通过命令,在CMD中执行模拟器的方法
emulator-avdAVD_test
上而命令中AVDtest是指模拟器的名称。
2)交互对话环境
emd运行monkeyrunner交互命令''monkeyrunner”或:
monkeyrunner-plugin
3)emd终端导入monkeyrunner所要使用的模块
fromid.monkeyrunnerimportMonkeyRunner,MonkeyDevice,
MonkeyImage
然后便可以开始利用monkeyrunner进行测试了。
3)模拟器连接
device=orConneclion(6,*emulator_5554')
参数1:超时时间,单位秒,浮点数,默认是无限期地等待。
参数2:指定的设备名祢device_id,默认为当前设备(手机优先,其次为模拟器)
4)app安装
模拟器启动成功后,安装apk
11Package(*F:\\yinle_*)
其中,参数为apk的相对路径。成功返回true,且模拟器的IDLE界面可看到安装apk图标
5)app启动
Activity(component="package名/.activity")
如何获取一个app的package名和activity?
使用
加ipk路空中一定不能有空格
aaptdumpbadgingF:\yinle_
或
aaptdumpbadgingF:\yinle_>F:\
所以:
Activity(component=*nt.music/.arterAttivity")
命令执行后,模拟器上的app被启动。启动成功后,便可以向模拟器发送如按键、滚动、截图、
存储等操作了
6)
问题:。川)运行提示moikeyrunner不是内部或外部命令,也不是可运行的程序或批处理文件。
解决:电脑环境变量未配置,将monkeyrunner所在目求配在环境变量里。
变量名:Path
变量值:D:\android\android-sdk-windows\too1s;D:\android\android-sdk
-windows\platform-tools
7>样例(Monkeyrunner运行python脚本)
#-*-UTF-8-*-
#如果导入的模块起了别名,后面就必须使用别名
fromid.monkeyrunnerimportMonkeyRunnerasmr
fromid.monkeyrunnerimportMonkeyDeviceasmd
fromidmonkeyrunnerimportMonkeyImageasmi
#连接设备或虚拟器。
才参数1,超时时间,单位秒,默认无限期等待;参数2,设备
名称,默认当前设备
device=mr.waitForConnection(2,'192.168.56.101:5555*)
打句设备或模拟器安装apk,以下两种方式都是对的
UPackagc(*DzWbaiduliulanqiJ)
#11PackageCD:/baiduliulanqij)
#启动APP
Activity('cmp=./.work.RdBrowserActivity*)
mr.sleep(3)
首点击搜索框壮指定位置发送触摸事件
(100,100,JDOWNANDUP')
mr.sleep(l)
#输入查询词
('test')
mr.sleep(l)
#点击回车键#发送指定类型键码的事件
('KEYCODE_ENTER,,*DOWN_AND_UP')
mr.sleep(2)
曜图
result=napshot()
打呆存到文件
ToFilepng')
#清除搜索框
(100,100,*D0WN_AND_UP,)
mr.sleep(l)
('KEYCODE一DEL','DOWN_AND_UP')
mr.sleep(2)
#字符串发送到键盘
#('字符串')
CFindyou')
加奂醒设备屏幕
#锁屏后,屏幕关闭,可以用下命令唤醒
0
力重起手机
t()
#模拟滑动
#(X,Y,D,S)
#X开始坐标
#Y结束坐标
即拖动持续时间(以杪为单位),默认1.0杪
#S插值点时要采取的步骤。默认值是10
((100,1053),(520,1053),0.1,10)
运行测试脚本:monkeyranner
monkeyrunner录制和回放
录制:monkey
fiuiuid.muiikeyiuimeiiinpuiIMuiikuyRumivimi
fromid.derimportMonkeyRecorderasrecorder
device=mr.waitForConnectionO
(device)
在cmd命令行运行moikeyrunnermonkey_,会弹出一个MonkeyRecord窗口界面该窗口的功能:
图MonkeyRecorder1|.=)巴拉J
WaitPressaButtonTypeSomethingFlingExportActionsRefreshDisplay
liype"testes"
••Taptouchscreenat(615,288)
BaidKbSIB
testesX百咬一下
么GN+
-M+
mwfl么GWIN+
•h«X,iiF
A.可以自动显示手机当前的界面
B.自动刷新手机的最新状态
C.点击手机界面即可对手机进行操作,同时会反应到真机,而且会在右侧插入操作脚本
D.wait:用来插入下一次操作的时间间隔,点击后即可设置时间,单位是秒
PressaButton:用来确定需要点击的按钮,包括menu、home、search,以及对按钮的press、
down、up属性TypeSomething:用来输入内容到输入框
Fling:用来进行拖动操作,可以向上、下、左、右,以及操作的范围
ExportActions:用来导出脚本,不需要后缀名,也可以添加后缀名.mr
RefreshDisplay:用来刷新手机界面,估计只有在断开手机后,重新连接时才会用到
用录制函数导出操作的脚本,通过monkey_函数回放之前的操作
回放:monkey_,
importsys
fromid.monkeyrunnerimportMonkeyRunnerasmr
CMD_MAP={
*TOUCH*:1ambdadev,arg:(**arg),
'DRAG':lambdadev,arg:(**arg),
'TYPE':lambdadev,arg:(**arg),
,PRESS,:lambdadev,arg:(**arg),
'WAIT':lambdadev,arg:mr.sleep(**arg)
defproccss_filc(f,device):
forlineinf:
(cmd,rest)=(**)
try:
rest=eval(rest)
except:
print*unabletoparseoptions,
continue
ifcmdnotinCMDJJAP:
print,unknowncommand:'+cmd
continue
CMDMAP[cmd](device,rest)
defmainO:
file=[1]
f=open(file,'r')
device=mr.waitForConnection()
process_file(f,device)
f.closeO
if—name—='_main—'
mainO
8>其他
#卸载设备或模拟器中的APK,参数为APK包名
ePackage('cn.drive')
printCUninslal1Success!*)
#发送指定类型指定键码的事件
队参数::键码,参数2:触摸事件类型)
#参数1:见.KeyEvent
#参数2,如有TouchPressTypeO返回的类型一触摸事件类型,
有三种。
#1、DOWN发送一个DOWN事件。指定DOWN事件类型发送到设备,
对应的按一个键或触摸屏幕上。
#2、UP发送一个IP事件。指定UP事件类型发送到设备,对应
释放一人键或从屏幕上抬起。
#3、DOWN_AND_UP发送一个DOWN事件,然后一个UP事件。对
应于输入键或点击屏幕。
以上三种事件做为press。参数或louchO参数
#按下HOME键
CKEYCODE_HOME,,_AND_UP)
#按下BACK键
('KEYCOOEBACK*,ANDUP)
#按下下导航键
(*KEYCODEDPADDOWN',ANDUP)
#按下上导航键
('KEYCODE_DPAD_UP,,_AND_UP)
#按下OK键
('KEYC(J()E_DPAD_CENTER,,_AND_UP)
KeyCode:
home键KEYCODE_HOME
back键KEYCODEBACK
send键KEYCODE_CALL
end键KEYCODE_ENDCALL
上导航键KEYCODEDPAD_UP
下导航键KEYCODEDPAD_D(MN
左导航KEYCODE_DPAD_LEFT
右导航键KEYCODE_DPAD_RIGHT
ok键KEYCODEDPADCENTER
上音量键KEYCODE_VOLUMEJP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工地人员借用协议书
- 工资划转协议书
- 布匹投资协议书
- 广州彩礼协议书
- 废弃车辆转让协议书
- 开庭前调解协议书
- 悔婚分手协议书
- 情侣之前协议书
- 情感补偿协议书
- 房屋改合同协议书
- 2025年哈尔滨工业大学管理服务岗位招聘考试笔试试题(含答案)
- 盘州市2024小升初数学试卷
- 河北省建筑材料检测试验收费标准
- 2025年基本公共卫生服务规范试题及答案
- 路灯施工方案(3篇)
- 【《都一期围垦工程的海堤工程、水闸设计和龙口度汛与堵口设计》23000字(论文)】
- 2025年高考语文真题全国一卷《种植入门问答》批注式阅读
- 医疗质量安全核心制度落实情况监测指标(2025 年版)解读
- 2025年中考物理一轮复习知识清单专题15 欧姆定律(3大模块知识清单+4个易混易错+3种方法技巧+典例真题精析)(解析版)
- T/CADBM 8-2018建筑用冷热水输送不锈钢波纹软管及管件
- 【公开课】生活中的轴对称+课件+2024-2025学年+华东师大版(2024)七年级数学下册
评论
0/150
提交评论