从零开始学习软件测试-第45天笔记

monkey事件

  • 事件:对app进行的操作,比如触摸事件,滑动事件...
  • 动作:构成一个事件所需要的步骤。

调整事件的百分比

  • adb shell monkey -p 包名 -v -v --pct-xxx 百分比 次数>输出文件的路径

分析日志有没有报错

  • 到日志中去找crash、anr,如果找不到,就代表没有问题,如果找到了就代表有bug。
  • crash代表程序崩溃了,一定是bug。
  • anr代表程序无响应,不一定是bug,有可能是机型老旧导致的。

可能导致程序崩溃的原因

  • 内存溢出(oom out of memory)
    • 内存不足,无法启动当前的程序。
  • 内存泄漏(memory leak)
    • 不用的变量没有被及时的释放,导致其他数据不能使用此空间。
  • 下标越界(ArraryIndexOutOfBoundsException)
    • 下标超过了列表的总长度。
  • 空指针(NullPointerException)
    • 变量值为空的情况下调用方法,变量没有初始化情况下调用方法。

忽略异常

  • app的crash(崩溃)异常
    • adb shell monkey -p 包名 --ignore-crashes -v -v 次数 > 输出文件的路径
  • app的anr(无响应)异常
    • adb shell monkey -p 包名 --ignore-timeouts -v -v 次数 >输出文件的路径

app自动化-环境搭建

  • 下载第三方包 appium
    • pip install Appium-Python-Client == 1.3.0
  • 下载驱动
    • appium

app自动化报错点

  • 没有启动appium驱动
  • 电脑用户名是中文的,会报错,必须运行一次你写的自动化代码,如果代码报错了,再去修改。
    • 进入安卓Linux系统 adb shell
    • cd data
    • cd local
    • cd tmp
    • ls 查看目录
    • 有个AppiumBootstrap.jar 文件,如果名称是不全的,需要手动将文件名改全
    • mv 不全的文件名 AppiumBootstrap.jar

获取元素的源代码

  • 通过android -sdk中的tools文件夹中的bin目录下的uiautomatorviewer.bat工具来获取元素的源代码。
  • 注意:uiautomatorviewer.bat不支持java-jdk-8版本以上的版本。

app的输入框中,输入中文

  • 在参数中添加两个参数即可。
    • 变量名['unicodeKeyboard'] = True
    • 变量名['resetKeyboard'] = True

不重置应用(取消引导页)

  • 变量名['noReset'] = True

元素的操作

app自动化的元素操作方法和web自动化的元素操作方法大部分都是通用的。

  • 点击 click()
  • 输入 send_keys()
  • 清空 clear()
  • 获取文本 text
  • 获取位置 location
  • 根据属性名获取属性值get_attribute()
    • 获取id是resourceId
    • 获取class是className
    • 获取text是text或name
    • 获取content-desc是name
      • 注意:以上名称仅仅是用于根据属性名获取属性值,且API>=18,即Android版本>=4.3

web定位和app定位的区别

  • id定位的区别
    • web的id类似于身份证号,独一无二,有的话可以直接使用。
    • app的id类似于web中的class,用来定义样式的,可以重复的,当元素样式一样的情况下,大概率id是一样的。
  • class定位的区别
    • web中的class是用来添加样式的
    • app的class类似于web中的tag_name,是元素的标签名,大概率是重复的

如何判断id是否是重复的

  • 看当前页面有没有和指定元素相同样式的元素,如果没有大概率是没有重复的
  • 看id和元素有没有密切的关联

如何判断class是否有重复

  • 判断当前页面有没有和指定元素相同类型的元素
相关推荐
递归不收敛2 小时前
大语言模型(LLM)入门笔记:嵌入向量与位置信息
人工智能·笔记·语言模型
冷雨夜中漫步2 小时前
高级系统架构师笔记——数据库设计基础知识(5)Armstrong公理系统、无损连接和有损连接
笔记·系统架构
deng-c-f3 小时前
Linux C/C++ 学习日记(28):KCP协议(四):如何实现更复杂的业务:将连接状态的管理进行封装,用户只需实现发送、接收、断开的处理逻辑。
学习·网络编程·kcp
im_AMBER4 小时前
算法笔记 05
笔记·算法·哈希算法
Element_南笙5 小时前
吴恩达新课程:Agentic AI(笔记2)
数据库·人工智能·笔记·python·深度学习·ui·自然语言处理
koo3646 小时前
李宏毅机器学习笔记21-26周汇总
人工智能·笔记·机器学习
.小小陈.6 小时前
数据结构2:单链表
c语言·开发语言·数据结构·笔记·学习方法
立志成为大牛的小牛6 小时前
数据结构——二十三、并查集的终极优化(王道408)
开发语言·数据结构·笔记·学习·程序人生·考研
全栈游侠6 小时前
04-优先级与延时链表
笔记
im_AMBER7 小时前
React 01
前端·javascript·笔记·react.js·前端框架·web