Android手机测试,

涉及照相机(Camera)应用程序的稳定性测试的用例,

需要涉及100张照片的拍照自动化测试。

准备阶段
  1. 先清理老照片,照片一般存放在/scard/DCIM目录下
  2. adb shell am start + 相机的Activity 可以打开相机App
  3. adb shell input tap 坐标可以模拟点击拍照按钮
  4. 坐标可以通过设置-》开发者选项-》打开指针位置(坐标),

    可以查看拍照按钮的具体坐标(x,y)值

如何查看应用程序的包名

应用程序的包名(Package Name), 作为应用的唯一标识, 代表了一个apk。

包名用于应用程序管理(安装,卸载), 如何看包名呢?

以魅族Note5手机为例:

table th:first-of-type {
width: 100px;
}

相关命令 释义
pm list package |grep camera 列出本手机里所有已经安装了应用程序包名,
过滤后只显示涉及camera相关的包名
dumpsys package com.meizu.media.camera |grep Activity 查看com.meizu.media.camera软件包的各类信息,
过滤后只显示与Activity相关的信息

Python批处理脚本模式
# coding=utf-8

import os
import time # 清除旧的照片
os.system("adb shell rm -rf /sdcard/DCIM/*") # 打开相机
os.system("adb shell am start com.meizu.media.camera/.CameraActivity") # 循环点击拍照按钮100次
for i in range(1, 101):
os.system("adb shell input tap 551 1773") # 点击相机拍照按钮的坐标
print("第%d张照片已经拍照完成"%i)
time.sleep(1) # 拍完一张后,间隔1s,再拍下一张 # 导出刚刚拍的100张照片, 再由测试人员手动Check相片质量
os.system("adb pull /sdcard/DCIM .")
print("Test Over, Photos saved to %s%sDCIM" % (os.getcwd(), os.sep)) os.system("pause")

os.getcwd()是获取当前python脚本的当前路径,

os.sep 是一个路径分隔符, 建议大家常用,

可以很好的适配不同的操作系统路径分隔符,

如果是在Windows系统,代表一个\字符 ; 如果是Linux系统,代表一个/字符。

Python面向过程函数形式

只需要一个拍照的函数camera_capture, 可以传拍多少轮(张)照片。

# coding=utf-8

import os
import time def camera_capture(cycle):
# 清除旧的照片
os.system("adb shell rm -rf /sdcard/DCIM/*") # 打开相机
os.system("adb shell am start com.meizu.media.camera/.CameraActivity") # 循环点击拍照按钮100次
for i in range(1, cycle+1):
os.system("adb shell input tap 551 1773") # 点击相机拍照按钮的坐标
print("第%d张照片已经拍照完成"%i)
time.sleep(1) # 拍完一张后,间隔1s,再拍下一张 # 导出刚刚拍的100张照片, 再由测试人员手动Check相片质量
os.system("adb pull /sdcard/DCIM .")
print("Test Over, Photos saved to %s%sDCIM" % (os.getcwd(), os.sep)) camera_capture(100)
os.system("pause")
Python面向对象类形式
  1. 以"万物皆可归类"的思想, 先抽象化出一个类来,

    类名一般建议用"名词", 所以我们命名为"CameraCapturer",

    代表屏幕捕捉器, 且一般要驼峰式(首字母大写)来规范类的命名.
  2. 养成良好的类的初始化(__init__)的习惯,

    初始化过程中, 可以pass(什么都不做)
  3. 这个CameraCapturer类, 目前只需要一个拍照函数(动作功能)就足够了,

    函数的命名一般建议用"动词", 所以我们命名为: "camera_capture" .
  4. 类是一个抽象的事物, 必须实例化成具体的对象后,

    才能进行调用, 所以我们实例化并命名成了c_obj, 表明是一个对象.
  5. 实例化成具体对象后, 对象就可以调用camera_capture这个函数了.
# coding=utf-8

import os
import time class CameraCapturer():
def __init__(self):
pass def camera_capture(self, cycle):
# 清除旧的照片
os.system("adb shell rm -rf /sdcard/DCIM/*") # 打开相机
os.system("adb shell am start com.meizu.media.camera/.CameraActivity") # 循环点击拍照按钮100次
for i in range(1, cycle + 1):
os.system("adb shell input tap 551 1773") # 点击相机拍照按钮的坐标
print("第%d张照片已经拍照完" % i)
time.sleep(1) # 拍完一张后,间隔1s,再拍下一张 # 导出刚刚拍的100张照片, 再由测试人员手动Check相片质量
os.system("adb pull /sdcard/DCIM .")
print("Test Over, Photos saved to %s%sDCIM" % (os.getcwd(), os.sep)) if __name__ == '__main__':
c_obj = CameraCapturer()
c_obj.camera_capture(100)
os.system("pause")
代码运行方式

确保Android车机设备通过USB线与电脑连接了,adb设备有效连接,

以上代码的3种实现形式都可以直接运行,比如保存为take_photo.py并放在桌面,

可以考虑python take_photo.py 运行或者直接双击运行。

脚本优化方向
  1. 可以考虑自动做图片对比,如果发现图片在连续拍摄同意物体的过程中,

    同一画面,不同照片像素大小相差太大(或者色差相差太大),

    则需要提示异常让测试做检测, 多媒体测试相关案例会介绍如何实现。
  2. 拍照过程中,考虑下把logcat log导出来,因为可能拍照过程中,出现了bug,

    有log才能更好地跟踪Bug。

包名与进程名(Process Name)不同,进程名用于进程管理(创建,销毁),

应用程序的包名(Package Name), 作为应用的唯一标识,

代表了一个apk。包名用于应用程序管理(安装,卸载)。

后续性能监控之类的,都是用进程进行进程级别的监控,

后续monkey之类的,都是用包名来进行指定Monkey的App。

更多更好的原创文章,请访问官方网站:www.zipython.com

自拍教程(自动化测试Python教程,武散人编著)

原文链接:https://www.zipython.com/#/detail?id=609bf757abd548e5aca2a07f2c3a55f3

也可关注“武散人”微信订阅号,随时接受文章推送。

《自拍教程46》Python_adb自动拍照100张的更多相关文章

  1. 《自拍教程52》Python_adb运行Shell脚本

    Android作为一款Linux终端,肯定是支持.sh后缀的Shell脚本的运行的, 有时候测试环境准备或者长时间截取复杂的日志等,开发会给到一些Shell脚本. Shell脚本的执行的优势: 快捷高 ...

  2. 《自拍教程45》Python_adb实时监控Logcat日志

    接上一篇:adb命令_一键截取logcat日志, 有一天, 系统稳定性开发负责人找到我,希望我能在跑android 系统monkey的时候, 实时监控logcat的输出,如果一旦发现"jav ...

  3. 《自拍教程51》Python_adb批量生成App版本表格

    案例一:版本在软件研发阶段是很重要的, 不同的版本, 已修复的Bug也不一样, 所实现的功能不一样, Android终端产品正式版本发布前,项目经理除了确保系统版本确定无误外, 还会逐个验证所搭载的所 ...

  4. webpack4 系列教程(十三):自动生成HTML文件

    作者按:因为教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步<webpack4 系列教程(十三):自动生成 HTML 文件>原文地址.更欢迎来我的小站看更多原创内容:go ...

  5. [Android实例教程] 教你如何拍照+相册选择图片+剪裁图片完整实现

    [Android实例教程] 教你如何拍照+相册选择图片+剪裁图片完整实现 今天做Android项目的时候要用到图片选择,要实现拍照获取图片和从相册获取图片,并且要求在获取完之后可以裁剪,试了很多方法之 ...

  6. JS练习--自动生成100个li

    点击按钮,自动生成100个li,红.黄.蓝.绿四种颜色的顺序显示出现在页面中 CSS: ;;} ul,li{list-style: none;} #ul1{position: relative;} # ...

  7. 魅族MX3 Flyme3.0找回手机功能支持远程拍照密码错两次自动拍照

    进入Flyme页面(http://app.meizu.com/),选择“查找手机”即可进行查找自己登记的魅族系列手机. 如果您在一个账号下登记过N多魅族系列手机,那么都是可以进行查找的,参见下图 魅族 ...

  8. arcpy地理处理工具案例教程-生成范围-自动画框-深度学习样本提取-人工智能-AI

    arcpy地理处理工具案例教程-生成范围-自动画框-深度学习样本提取-人工智能-AI 商务合作,科技咨询,版权转让:向日葵,135-4855_4328,xiexiaokui#qq.com 目的:对面. ...

  9. Directx11教程(46) alpha blend(3)

    原文:Directx11教程(46) alpha blend(3)       现在我们尝试改变box的贴图,使用一张带alpha的dds文件wirefence.dds, 用directx textu ...

随机推荐

  1. Netflix拒上戛纳电影节,能给国内视频产业什么启示?

    当新事物诞生时,总是会遭到质疑,甚至是排斥!因为新事物的活力.潜力,都对保守的传统事物产生了极大的冲击.就像有声电影刚刚诞生时,一代"默片大师"卓别林就对其进行了激烈的反对.他认为 ...

  2. Linux上部署Tomcat+Nginx负载均衡

    前提:配置好了JDK. 我这里是vm上的linux虚拟机,可能不适用于所有情况. 一.Linux上配置Tomcat 1.下载地址:https://tomcat.apache.org/download- ...

  3. ZOJ-1163-The Staircases

    dp[i][j]表示i个砖头构成的最高台阶不高于j的楼梯数目 Accepted 1163 C++11 0 2280 #include "bits/stdc++.h" using n ...

  4. [洛谷P2785] 物理1(phsic1)-磁通量

    随便翻到的一道题...... 题目传送门 这道题是用向量叉积求多边形面积. 首先讲一下向量叉积(也叫外积). 设两个向量的坐标表示为(x1,y1).(x2,y2). 那么它们的叉积为x1*y2-x2* ...

  5. 《JavaScript算法》二分查找的思路与代码实现

    二分查找的思路 首先,从有序数组的中间的元素开始搜索,如果该元素正好是目标元素(即要查找的元素),则搜索过程结束,否则进行下一步. 如果目标元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半 ...

  6. Luogu_2434_[SDOI2005]区间

    题目描述 现给定n个闭区间[ai, bi],1<=i<=n.这些区间的并可以表示为一些不相交的闭区间的并.你的任务就是在这些表示方式中找出包含最少区间的方案.你的输出应该按照区间的升序排列 ...

  7. Maximum Value(CodeForces - 484B)

    Maximum Value Time limit 1000 ms Memory limit 262144 kB You are given a sequence a consisting of n i ...

  8. 查漏补缺:OSI七层模型和TCP/IP模型

    应用层协议:Telnet.FTP.e-mail等 传输层协议:TCP.UDP.STCP等 网络层协议:IP.ICMP.IGMP等 链路层协议:设备驱动及接口卡

  9. Shopee招聘-测试开发leader(30k-60k/月)

    内推邮箱:tim.zhao@shopee.com 地点:深圳 1.测试Leader (30k-60k/月) 岗位职责 负责根据项目计划制订测试计划和规划,保证项目质量和进度: 负责与产品经理和开发人员 ...

  10. Jetson TX2镜像刷板法

    使用Nvidia官方自带的脚本,备份镜像.恢复镜像,快速在新板子中部署DL环境 在之前的一篇博客中,详细介绍了使用JetPack刷系统以及使用离线包部署DL环境(cuda.cudnn.opencv.c ...