1. 程式人生 > >Android移動端專項測試與自動化測試Python篇

Android移動端專項測試與自動化測試Python篇

com 什麽 error: pytho 管理器 運行方式 Suite 時代 source

下面我們開始第一個簡單的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()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
結果如下:
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()
---------------------
作者:test94
來源:CSDN
原文:https://blog.csdn.net/test94/article/details/51519789
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

Android移動端專項測試與自動化測試Python篇