如何使用python做android的自动化测试

如题所述

  开始第一个简单的Android UI自动化测试
  1.使用adb命令连接真机或模拟器
  2.打开uiautomatorviewer工具
  3.使用uiautomatorviewer工具获取应用的元素进行定位
  4.简单介绍unittest框架的使用方法
  5.使用Python编写猫宁考勤应用注册模块的自动化测试
  1.使用adb命令连接真机或模拟器:
  手机USB连接电脑,进入开发者模式;
  cmd命令:adb devices ,查看手机是否连接
  这里写图片描述
  显示错误
  这是因为adb的端口被占用,我们需要查看是什么应用占用了这个端口(5037为adb默认端口)
  cmd命令 : netstat -aon|findstr “5037”
  这里写图片描述
  可以看到占用5037端口对应的程序的PID号为8388;
  cmd命令 : tasklist|findstr “8388”
  这里写图片描述
  可以看出8388对应的程序为kadb.exe,说明该程序正在使用5037端口;
  这时我们需要在任务管理器中结束kadb.exe进程,按快捷键“Ctrl+Shift+Esc”调出Windows任务管理器,找到“kadb.exe”,单击下方的结束进程即可!
  这里写图片描述
  我们再次运行cmd命令:adb devices
  这里写图片描述
  这一步成功后我们才能运行sdk自带的uiautomatorviewer;
  我们需要用uiautomatorviewer工具来获取元素,用于定位。
  cmd命令:uiautomatorviewer,打开uiautomatorviewer界面
  这里写图片描述
  或者找到sdk目录:sdk\tools中找到uiautomatorviewer.bat文件双击运行
  这里写图片描述
  2.打开uiautomatorviewer工具
  这里写图片描述
  我们可以根据text,resource-id,class等元素进行定位
  3.使用uiautomatorviewer工具获取应用的元素进行定位
  这里我使用python自带的IDLE进行编写测试脚本,打开python文件找到IDLE(python GUI)双击打开,如图:
  这里写图片描述
  4.简单介绍unittest框架的使用方法
  # -*- coding:utf-8 -*-
  from uiautomator import device as d
  import unittest
  class Mytest(unittest.TestCase):
  #初始化工作
  def setUp(self):
  print "--------------初始化工作"
  #退出清理工作
  def tearDown(self):
  print "--------------退出清理工作"
  #测试点击猫宁考勤case
  def test_login(self):
  d(text="猫宁考勤").click()
  print "--------------测试1"
  #测试2
  def test_z(self):
  print "--------------测试2" #这里你可以写你的第二个测试用例,
  #测试3
  def test_w(self):
  print "--------------测试3" #这里你可以写你的第三个测试用例。。。。。。。。。。。。。
  if __name__ == '__main__':
  unittest.main()
  结果如下:
  Testing started at 21:14 …
  ————–初始化工作
  ————–测试1
  ————–退出清理工作
  ————–初始化工作
  ————–测试3
  ————–退出清理工作
  ————–初始化工作
  ————–测试2
  ————–退出清理工作
  Process finished with exit code 0
  从结果中我们可以看出unittest框架的运行方式为:
  setUp 测试1 tearDown
  setUp 测试2 tearDown
  setUp 测试3 tearDown
  5.使用Python编写猫宁考勤应用注册模块的自动化测试
  # -*- coding:utf-8 -*-
  from uiautomator import device as d
  import time
  import unittest
  class MyTestSuite(unittest.TestCase):
  # 初始化工作
  def setUp(self):
  print "--------------初始化工作"
  # 退出清理工作
  def tearDown(self):
  print "--------------退出清理工作"
  #***************************方法**************************************
  # 判断控件是否存在 & text
  def check_controls_exists(self, controls_text):
  if d(text=controls_text).exists:
  return 1
  else:
  return 0
  # 判断按钮是否置灰 & text & clickable
  def check_controls_click_text(self, controls_text):
  if d(text=controls_text).info.get("clickable") is True:
  return 1
  else:
  return 0
  #assertIn(a, b) a in b
  def check_ainb(self,resourceid,b):
  if d(resourceId=resourceid).info.get("text") in b:
  return 1
  else:
  return 0
  #***********************************************************
  # 注册模块
  def test_Aregister(self):
  try:
  time.sleep(2)
  #猫宁考勤开启全新时代
  self.assertEqual(self.check_controls_click_text("注册"),1,u"猫宁考勤开启全新时代")
  # 猫宁考勤开启全新时代--》点击注册按钮进入注册猫宁界面
  d(text="注册").click()
  time.sleep(3)
  #注册猫宁界面
  self.assertEqual(self.check_text("com.isentech.attendancet:id/regis_phone","请输入手机号码"),
  1,u"注册页面-》请输入手机号码")
  self.assertEqual(self.check_text("com.isentech.attendancet:id/regis_verifycode","请输入验证码"),
  1,u"注册页面-》请输入验证码")
  self.assertEqual(self.check_controls_click_text("获取验证码"), 0,u"注册页面-》获取验证码")
  self.assertEqual(self.check_controls_click_text("《中科爱讯服务协议》"), 1,u"注册页面-》《中科爱讯服务协议》")
  self.assertEqual(self.check_controls_click_text("注册"), 0,u"注册页面-》注册")
  time.sleep(2)
  #《中科爱讯服务协议》
  d(text="《中科爱讯服务协议》").click()
  time.sleep(2)
  self.assertEqual(self.check_ainb("com.isentech.attendancet:id/title","服务协议"), 1,u"注册页面-》服务协议")
  time.sleep(1)
  d(resourceId="com.isentech.attendancet:id/title_back").click()
  time.sleep(1)
  #手机号不输入是否能注册
  d(text="注册").click()
  time.sleep(3)
  # 手机号只输入1个数字是否能注册&只输入1个数字是否能获取验证码
  d(resourceId="com.isentech.attendancet:id/regis_phone").set_text("1")
  self.assertEqual(self.check_controls_click_text("获取验证码"), 0)
  time.sleep(1)
  d(text="注册").click()
  time.sleep(1)
  d(resourceId="com.isentech.attendancet:id/regis_phone").clear_text()
  time.sleep(1)
  #只输入5个数字是否能获取验证码
  d(resourceId="com.isentech.attendancet:id/regis_phone").set_text("11111")
  self.assertEqual(self.check_controls_click_text("获取验证码"), 0)
  time.sleep(1)
  d(resourceId="com.isentech.attendancet:id/regis_phone").clear_text()
  time.sleep(1)
  #只输入手机号是否能注册
  d(resourceId="com.isentech.attendancet:id/regis_phone").set_text(phone_number)
  self.assertEqual(self.check_controls_click_text("注册"), 0)
  time.sleep(1)
  d(text="注册").click()
  time.sleep(1)
  #输入正确的验证码&获取验证码是否高亮
  d(resourceId="com.isentech.attendancet:id/regis_verifycode").set_text("5648")
  time.sleep(1)
  self.assertEqual(self.check_controls_click_text("获取验证码"), 1)
  time.sleep(2)
  #密码只输入1个数字是否能注册&注册按钮是否高亮
  d(resourceId="com.isentech.attendancet:id/regis_pass").set_text("1")
  d(resourceId="com.isentech.attendancet:id/regis_passAgain").set_text("1")
  time.sleep(1)
  self.assertEqual(self.check_controls_click_text("注册"), 0,u"密码只输入1个数字是否能注册")
  time.sleep(1)
  d(resourceId="com.isentech.attendancet:id/regis_pass").clear_text()
  d(resourceId="com.isentech.attendancet:id/regis_passAgain").clear_text()
  time.sleep(1)
  #输入不相同的密码是否能注册
  d(resourceId="com.isentech.attendancet:id/regis_pass").set_text("123456")
  d(resourceId="com.isentech.attendancet:id/regis_passAgain").set_text("12345")
  time.sleep(1)
  self.assertEqual(self.check_controls_click_text("注册"), 0,u"输入不相同的密码是否能注册")
  time.sleep(1)
  d(resourceId="com.isentech.attendancet:id/regis_pass").clear_text()
  d(resourceId="com.isentech.attendancet:id/regis_passAgain").clear_text()
  time.sleep(1)
  #输入正确的密码是否能注册&我已同意是否打钩
  d(resourceId="com.isentech.attendancet:id/regis_pass").set_text("123456")
  d(resourceId="com.isentech.attendancet:id/regis_passAgain").set_text("123456")
  time.sleep(1)
  self.assertEqual(self.check_controls_click_resourceId("com.isentech.attendancet:id/regis_agree"), 1)
  self.assertEqual(self.check_controls_click_text("注册"), 1)
  time.sleep(2)
  d(text="注册").click()
  time.sleep(8)
  except Exception, e:
  print u"Error: 注册模块有问题\n", e
  def test_app():
  test_unit = unittest.TestSuite()
  test_unit.addTest(MyTestSuite("test_Aregister"))
  if __name__ == "__main__":
  # 测试app
  unittest.main()
温馨提示:答案为网友推荐,仅供参考
相似回答