网上找了一大圈相关移动端自动化测试的课程、线下的书籍,基本上都是一些培训机构对于 python+uiautomator2 的基本操作公开课,真正的干货的东西还是在大佬的博客中一个一个尝试出来的,所以决定自己记录总结下来,方便回顾。
pytest 这个方案只能在线运行,严格来说并不适合手机厂商,因为平常工作追求高效率应该用 JAVA+uiautomator2+junit 根据系统 key 生成 apk 离线跑更合适,但是找了一大圈资料实在是没找到,在 appium 与 uiautomator2 之中选了其次合适的。
python==3.10
sdk ==android 9-12(写java时用到)
adb ==用的sdk自带的
pip install -i pypi.tuna.tsinghua.edu.cn/simple/ uiautomator2
python -m uiautomator2 init
class callup():
def __init__(self, count, deviceid):
self.count = count
self.deviceid = deviceid
def connectPhone(self):
deviceA = u2.connect_usb(deviceid)
class child(callup):
#实列化父类
callup = callup()
def startCall(self):
callup.deviceA(text="拨打电话").click()
复制代码
import time
from os.path import exists
import uiautomator2 as u2
class callup():
def __init__(self, count):
self.count = count
def startCall(self):
if deviceA(text='拨打电话').exists:
deviceA(text='拨打电话').click()
else:
print('已在拨打电话界面')
if deviceA(resourceId='com.android.dialer:id/dialpad_floating_action_button').exists:
print("拨号盘已打开")
time.sleep(2)
if deviceA(resourceId='com.android.dialer:id/fab').exists:
print("拨号盘已收缩")
deviceA(resourceId='com.android.dialer:id/fab').click()
def takeCall(self):
deviceA(resourceId='com.android.dialer:id/one').click()
deviceA(resourceId='com.android.dialer:id/zero').click()
deviceA(resourceId='com.android.dialer:id/zero').click()
deviceA(resourceId='com.android.dialer:id/eight').click()
deviceA(resourceId='com.android.dialer:id/six').click()
deviceA(resourceId='com.android.dialer:id/dialpad_floating_action_button').click()
deviceA(resourceId='com.android.dialer:id/contactgrid_bottom_timer').wait(timeout=15.0)
time.sleep(5)
deviceA(resourceId='com.android.dialer:id/incall_end_call').click()
def repeatTake(self):
i = 1
while (self.count > 0):
self.startCall()
self.takeCall()
print("第 %d 次拨打" % i+'成功')
i = i + 1
self.count = self.count - 1
time.sleep(5)
if __name__ == '__main__':
deviceid = str(input("请输入序列号:"))
deviceA = u2.connect_usb(deviceid)
count = int(input("请输入电话次数:"))
deviceA.implicitly_wait(3)
callup = callup(count)
callup.repeatTake()
1.如果在测试当中,某个元素因第三方因素或机器异常无法识别,该脚本就直接停止,并保留现象。无法达到咱们一个压测次数或时长的目的(这就需要失败重跑了)
2.假设测试过程中异常了,咱们还想看到当时现场的时间以及相关截图以便分析(这就需要加 log 打印以及截图了)
3.领导想看整体的测试报告,无法给出
所以这种只能自用,对工作以及技术发展并没有太大的帮助噢