自动化测试(二):安卓机初探与Python实现andriod截图实例

1.安卓开发常用术语介绍

  • IDE (Integrated Development Environment) : 集成开发环境,提供程序开发环境的应用程序,即编程的地方。一般包括代码编辑器、编译器、调试器和图形用户界面,比如Java的InterlliJ IDEA、Python的Jupyter和Pycharm。

  • SDK (Software Development Kit) : 软件开发工具包,辅助开发某一类软件的相关文档、API必需资料、范例和工具的集合都可以叫做 “SDK”。Android SDK为开发者提供了库文件以及其他开发所用到的工具,其和IDE组合就成了开发环境。

    • Android SDK是Java语言
    • 除了安卓开发中的Android SDK,还有其他平台和技术的SDK。例如,iOS开发使用的是iOS SDK,用于开发苹果设备上的应用程序。还有微软的Windows SDK,用于开发Windows操作系统上的应用程序。还有针对特定硬件和软件的SDK,如游戏开发中的Unity SDK和Unreal Engine SDK。
    • SDK通过提供API让开发者可以使用现成的函数、类、方法和属性,更轻松地访问底层功能、集成第三方服务和构建应用程序。
  • NDK (Native Development Kit) :属于SDK的一种。针对Android平台的一种开发工具包,它允许开发者使用C、C++和其他本地编程语言来开发Android应用程序的一部分或全部功能。

    • Android应用程序开发通常使用Java编写应用程序的高级逻辑和界面。但NDK是基于C语言的。其实Android也可以不使用NDK,但这就需要开发操作完全在Java语言的范畴内,不能调用C/C++的第三方库。但是如果涉及到比较底层的部分, C/C++语言是避不开的,比如说想要直接操作内存。NDK使得开发人员可以对C/C++的第三方库进行操作编译。
    • NDK提供的工具和库使开发者能够将C/C++代码与Java结合使用。开发者可以使用NDK编写本地代码模块(Native Code Modules),然后通过JNI(Java Native Interface)将其集成到Android应用程序中。
    • 优势:在某些情况下,比如图像和音频的处理、游戏开发测试、访问摄像头\传感器\蓝牙\NFC等硬件功能,使用本地编程语言可以提供更好的性能、访问底层硬件或利用现有的C/C++库。
    • 劣势:使用NDK开发的本地代码模块需要处理更多的复杂性,包括手动内存管理和跨平台兼容性(架构兼容性、本地库和功能依赖性等)。
  • JDK (Java Development Kit) :是面向Java开发人员使用的SDK。

    • IntelliJ IDEA 可以与 JDK 集成,但它本身并不包含 JDK,而是依赖于 JDK 的安装和配置。IntelliJ IDEA 可以 JDK 提供的编译器和虚拟机来编译和运行 Java 代码,以便开发者可以在 IDE 中轻松地配置和管理 JDK,并使用 JDK 提供的功能进行开发。

2. 各种SDK的安装(陆续补充ing)

后续发现还是用Andriod Studio进行进行管理更方便。

2.1 JDK的安装

安装过程参考JDK的下载与安装(详细过程)

如果出现javac无法运行参考windows 10 java命令可以运行,但是‘javac‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件(已解决)

2.2 单独安装Android SDK部分组件

Win10 配置ADB安装2023.7.12版本

2.3 Android NDK的安装

Win10 配置NDK安装2023.7.19版本

3. python+minicap实现andriod截图实例

原本winn10配置minicap需要安装git、ndk、adb等,参考在Windows下编译与运行minicap,很麻烦。参考使用minicap+python实现录屏功能利用airtest实现。

  1. pip install airtest
    airtest是网易开源的一款基于 Python 的、跨平台的UI自动化测试框架。

  2. 代码

    import cv2
    import airtest.core.api as air_api
    from airtest.core.helper import G
    
    
    def init_device():
        # auto_setup(basedir=None, devices=None, logdir=None, project_root=None, compress=None)
        # auto_setup 是一个用来初始化环境的接口,
        # 5个参数可以设置当前脚本所在的路径basedir、指定运行脚本的设备devices、设置默认的log路径logdir、设置脚本父路径方便 using 接口的调用和屏幕截图的压缩比率。
        # 可设置脚本运行时的log保存路径,默认值为None则不保存log,如果设置为True则自动保存在<basedir>/log目录中。
        print(__file__)
        air_api.auto_setup(__file__, logdir=True, devices=["Android:///", ])
        # 如果当前文件包含在 sys.path 里面,那么 __file__ 返回一个相对路径
        # 如果当前文件不包含在 sys.path 里面,那么 __file__ 返回一个绝对路径(此处我的文件不包含在sys.path中)
    
    
    def img_scale(image, size=612):
        # 输入你想要resize的图像高。
        height, width = image.shape[0], image.shape[1]
        # 等比例缩放尺度。
        scale = height / size
        # 获得相应等比例的图像宽度。
        width_size = int(width / scale)
        # resize
        image_resize = cv2.resize(image, (width_size, size))
        return image_resize
    
    
    def resolution_log():
        # 以手机屏幕为例,iphonex像素分辨率为1125x2436,是指屏幕横向能显示1125个物理像素点,纵向能显示2436个物理像素点。
        width = G.DEVICE.display_info['width']
        height = G.DEVICE.display_info['height']
        print('device independent pixels:', width, '×', height)
    
    
    def lp_screen():
        if G.DEVICE.display_info['orientation'] in [1, 3]:
            print('landscape')
            height = G.DEVICE.display_info['width']
            width = G.DEVICE.display_info['height']
        else:
            print('portrait')
            height = G.DEVICE.display_info['height']
            width = G.DEVICE.display_info['width']
    
    
    def snap2show(show=True):
        img = G.DEVICE.snapshot()
        if show:
            img = img_scale(img)
            cv2.imshow("src_image1", img)
            cv2.waitKey(0)
    
    
    if __name__ == '__main__':
        init_device()  # 初始化设备
        lp_screen()  # 查看屏幕状态:横屏landscape or 竖屏portrait
        resolution_log()  # 查看分辨率device independent pixels
        import time
    
        s = time.time()
        snap2show(show=False)
        e = time.time()
        print('snap time:', e - s)
    
    
  3. 效果演示:
    在这里插入图片描述
    在这里插入图片描述
    截图效果:
    在这里插入图片描述

4. TODO

  1. 自学一下airtest框架,看看源码使用文档
  2. 为什么airtest里的minicap截图仍然需要3.02s?看网上说minicap为0.8秒,对不上,需要看看airtest是怎么使用minicap的。

    在这里插入图片描述
    通过调试,在console里面进行,只需要0.2~0.3s,应该是完整运行时是第一次启动(手机中minicap相关进程第一次启动用时可能较长,启动后用minicap向手机进行请求时就只需要截图时间了)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
不多说废话,看题目,本教程适合练手,会python+android基础的人群,文件较大,上传乃是下载链接,下面上目录: 1-1 课程导学 2-1 如何学好Android App性能测试? 2-10 详解【电量】监控值的获取方法 \' D, l" p) d6 d. K9 [7 p 2-11 详解【电量】监控脚本实现和数据分析 O, e4 X& K0 S% h8 v8 V9 ? 2-12 详解【内存】监控值的获取方法 k! e6 e# C" K% z9 k- l 2-13 详解【内存】监控脚本实现和数据分析0 d; e- S% G6 r3 H: g 2-14 详解【FPS&过度渲染】的概念和监控方法 - 分析页面卡慢的方法# G! _2 O9 T* j" K s3 v6 C0 l 2-2 工欲善其事必先利其器-性能测试环境准备 2-3 详解【启动时间】监控值的获取方法0 n( p* l; g C 2-4 详解【启动时间】监控脚本实现% B2 z( C( E& S: n r1 e 2-5 详解【启动时间】数据分析 2-6 【启动时间】时间戳差值监控方法概要介绍 2-7 详解【CPU】监控值的获取方法、脚本实现和数据分析 2-8 详解【流量】监控值的获取方法7 r7 ~/ D5 |+ h9 m9 i6 p) b: Y 2-9 详解【流量】监控脚本实现和数据分析2 [9 {# {$ c9 k/ T, `/ t" \ 3-1 为什么需要使用框架实现自动化测试? 3-10 UnitTest框架之TestCase,TestSuite,TestRunner简介3 A2 {1 F2 @; K 3-11 UnitTest框架之TestSuite,TestRunner自动化测试 3-12 数据驱动框架DDT简介 3-13 数据驱动框架DDT的使用方法 3-14 数据驱动框架DDT实战; 3-2 准备一个被测APP 3-3 工欲善其事必先利其器-自动化测试环境准备 3-4 Android App自动化测试(一) 3-5 Android App自动化测试) 3-6 Android App自动化测试(三) 3-7 UnitTest框架之TestFixture简介 3-8 UnitTest框架之TestFixture自动化测试(一) 3-9 UnitTest框架之TestFixture自动化测试) 4-1 如何学好Android App API接口测试? 4-10 Fiddler构造HTTP Get请求 4-11 Fiddler构造HTTP Post请求 4-12 Fiddler抓取手上的网络数据包 4-13 为什么使用PostMan做API接口测试 4-14 工欲善其事必先利其器-PostMan工具准备 4-15 PostMan测试HTTP Get请求 4-16 PostMan测试HTTP Post请求 4-17 数据驱动DDT实现API接口自动化测试简介) 4-18 Python requests测试HTTP中的Get、Post请求 4-19 数据驱动DDT实现API接口自动化测试(一) 4-2 什么是API 4-20 数据驱动DDT实现API接口自动化测试); 4-3 抓包神器Fiddler简介 4-4 Fiddler抓包原理解析 4-5 Fiddler修改客户端发出的请求(一) 4-6 Fiddler修改客户端发出的请求() 4-7 Fiddler修改服务器端返回的内容 4-8 Fiddler实现会话的过滤、对比及请求的编解码 4-9 Fiddler实现Host的配置 5-1 测试工程师为什么需要掌握持续集成? 5-2 持续集成的概念、流程和意义 5-3 讲解持续集成工具Jenkins3 5-4 Jenkins工具密码的修改 5-5 Jenkins工具的配置说明 5-6 Jenkins工具系统配置和Job配置 5-7 Jenkins工具手动持续集成实战 5-8 Jenkins工具自动化持续集成实战 6-1 Native App自动化测试及Appuim框架介绍 6-2 自动化测试环境、元素识别工具、脚本设计原则-LOVE原则的讲解 6-3 Native App自动化脚本的实现 6-4 Appium自动化测试框架API讲解与案例实践(一) 6-5 Appium自动化测试框架API讲解与案例实践() 6-6 Appium自动化测试框架API讲解与案例实践(三) 6-7 Appium自动化测试框架API讲解与案例实践(四) 6-8 Appium自动化测试框架API讲解与案例实践(五) 6-9 Appium自动化测试框架API讲解与案例实践(六) 7-1 Hybrid App自动化测试概要 7-2 Appium基于Sele

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值