使用Python进行Android自动化测试
2016-05-27 21:29
776 查看
下面我们开始第一个简单的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框架的使用方法
————–初始化工作
————–测试1
————–退出清理工作
————–初始化工作
————–测试3
————–退出清理工作
————–初始化工作
————–测试2
————–退出清理工作
Process finished with exit code 0
从结果中我们可以看出unittest框架的运行方式为:
setUp 测试1 tearDown
setUp 测试2 tearDown
setUp 测试3 tearDown
5.使用Python编写猫宁考勤应用注册模块的自动化测试
或留言进行询问
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()
uiautomator详细用法请参考这篇文章:https://github.com/xiaocong/uiautomator
本人刚开始写博客,如有写的不明白之处可以加本人QQ进行学习交流:1093689803或留言进行询问
相关文章推荐
- numpy学习笔记二:numpy基础
- python图解
- python字符编码
- KNN算法的Python实现
- Python之numpy教程(一):基础概念
- python中单,双引号和三个双引号的区别
- python基础之map/reduce/filter/sorted
- python学习五
- Python中sorted()方法的用法
- Python使用xlrd模块操作Excel数据导入的方法
- Ipython快捷键大全
- eclipse+python+selenium+mysqldb环境搭建
- Eclipse下Python的MySQLdb的安装以及相关问题
- python变量作用域
- python基础之面向对象02
- pyenv virtualenv完美创建区分python版本的虚拟环境
- 详解Python编程中对Monkey Patch猴子补丁开发方式的运用
- python3读取chrome浏览器cookies
- HMM原理介绍 示例 python代码实现
- Python 学习之路——1