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

Python018

如何使用python做android的自动化测试,第1张

详细如下:

下面我们开始第一个简单的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()

123456789101112131415161718192021222324252627282930123456789101112131415161718192021222324252627282930

结果如下:

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()

答:公司和个人都是生活所迫,还是不是为了钱嘛!!!

注:这个参数是固定写法:"http://127.0.0.1:4723/wd/hub",也可以写成"http://localhost:4723/wd/hub"

本文摘自@开挖机的程序员

初次发文,多多关照。余生很长,切莫悲伤

python自动化教程Jmeter性能测试25套高级软件测试,性能测试,功能测试,自动化测试,接口测试,移动端测试,手机测试,WEB测试,渗透测试,测试用例设计,黑盒测试,白盒测试,UFT高级测试,Android测试,Selenium3自动化测试,Python3 测试,Java接口测试项目实战视频教程

软件测试技术包含:性能测试,功能测试,自动化测试,接口测试,移动端测试,手机测试,WEB测试,渗透测试,测试用例设计,黑盒测试,白盒测试,UFT高级测试,项目实战,Android测试,Selenium3自动化测试,Python3 测试,Java接口测试,LoadRunner性能测试,Appiumapp自动化测试,UIAutomator,Appium,Unittest测试框架,Kali Linux Web渗透测试,Git+Jenkins持续集成,LR+Jmeter性能测试,分布式性能测试高级视频教程。。。

Dodwnload:https://www.soft1188.com/rjcs/283.html

总目录:25套高级软件测试,性能测试,功能测试,自动化测试,接口测试,移动端测试,手机测试,WEB测试,渗透测试,测试用例设计,黑盒测试,白盒测试,目实战视频教程

第一套:【基础精通】软件测试特训营基础到就业班,系统测试,WEB测试,UFT与Selenium自动化测试,LR性能测试视频教程

第二套:【项目实战】软件测试系列之Java Selenium3自动化测试项目实战视频教程

第三套:【微服务课】Spring Cloud微服务最新技术入门到精通视频教程

第四套:【系统学习】Android移动端自动化测试从入门到实战(Java篇)UIAutomator,Robotium,Appium实战进阶视频教程

第五套:【系统学习】Android移动端专项测试与自动化测试(Python篇)UIAutomator,Appium,Unittest框架视频教程

第六套:【性能测试】JMeter深入进阶性能测试体系,接口性能测试,各领域企业实战视频教程

第七套:【项目实战】JMeter全程实战、性能测试实战、分布式性能测试、真实案例分析、基础到精通视频教程

第八套:【性能测试】LoadRunner性能测试基础到精通全程实战视频教程

第九套:【渗透测试】Kali Linux Web渗透测试视频教程

第十套:【系统学习】Appiumapp自动化测试基础到精通视频教程

第十一套:【项目实战】python selenium自动化测试项目实战视频教程(3套)

第十二套:【系统学习】快速上手JMeter性能测试工具视频教程

第十三套:【系统学习】LoadRunner软件性能测试,接口性能测试视频教程

第十四套:【项目实战】Selenium3.0深度解析自动化测试框架设计与实战与平台设计高级测试开发实战视频教程

第十五套:【系统学习】Web自动化测试,Selenium基础到企业应用,用例设计,持续集成视频教程

第十六套:【项目实战】最全面的Java接口自动化测试实战视频教程

第十七套:【项目实战】Python接口自动化从设计到开发,测试框架实战与自动化进阶视频教程

第十八套:【系统学习】达内软件测试零基础到就业视频教程

第十九套:【测试就业】软件测试就业指导视频教程

第二十套:【安卓测试】Android安卓自动化新手进阶测试培训手机app软件开发课

第二十一套:【系统学习】软件测试特训营,自动化测试与UFT应用视频教程

第二十二套:【高新面试】Python高新面试教程移动自动化测试面试面试分析+知识理论+面试技巧视频教程

第二十三套:【高级测试】最新Web自动化测试框架Selenium3.0+Python3,搭建通用的Web自动化测试框架实战视频教程

第二十四套:【高级测试】高级软件测试工程师精英培训班,软件测试工程师(Web自动化+APP自动化+接口自动化+面试)视频教程

第二十五套:【系统学习】软件测试web自动化测试selenium+移动端项目测试appium+接口测试Jmeter+性能测试LoadRunner视频教程

python自动化教程Jmeter性能测试python自动化教程Jmeter性能测试python自动化教程Jmeter性能测试python自动化教程Jmeter性能测试python自动化教程Jmeter性能测试python自动化教程Jmeter性能测试python自动化教程Jmeter性能测试python自动化教程Jmeter性能测试python自动化教程Jmeter性能测试