A. 怎麼寫android手機游戲測試用例
第一項:游戲安裝
游戲安裝後是否與安卓軟體版本(手機環境)兼容
游戲安裝後是否會影響到其他軟體的使用
游戲安裝後是否有優化功能
游戲安裝包是否過大
游戲安裝包是否安全,無病毒、木馬等惡意破壞性程序
游戲安裝後顯示的游戲圖標(App Icon)是否顯示正常
......
第二項:游戲畫面與文字
游戲界面是否能依照手機的屏幕擺放位置來進行有效的橫/豎屏切換
游戲畫面是否在游戲開啟後運行流暢
游戲畫面是否符合游戲風格
游戲畫面是否符合大眾的審美觀,並無敏感性因素
游戲畫面是否符合屏幕解析度的標准,無顯示不完整等異常現象
游戲文字是否顯示清晰
游戲文字是否美觀,並與游戲畫面相匹配
游戲文字是否符合大眾人的審美觀,並沒有敏感性詞彙
游戲文字是否漢化完整
游戲文字是否能根據語言的設置進行多國語言文字的切換
游戲文字是否出現錯別字、繁體字(某些狀況可以考慮使用繁體字)、火星文等文字
......
第三項:游戲聲音
游戲背景音樂是否能在游戲運行時播放
游戲背景音樂是否出現播放延遲、播放提前等播放不同步現象
游戲背景音樂是否與游戲風格相符合
游戲音效是否能在游戲運行時播放,並無不同步現象
游戲背景音樂和音效是否符合大眾的審美觀,並沒有敏感性因素
當進入通話狀態時,是否出現聲音混合現象
游戲聲音是否出現變形
......
第四項:游戲核心功能(可玩性)
游戲玩家基本動畫(站立、行走、奔跑、基本攻擊、技能攻擊等)播放是否正常
游戲在運行時是否出現死機、黑屏、崩潰等嚴重影響游戲體驗的現象
任務系統是否完善、是否出現描述錯誤、當前任務與進行中的任務不匹配等現象,達到任務要求後能否提交任務,提交任務後任務能否完成,任務完成的獎勵是否正確
游戲劇情(世界觀)是否符合大眾的審美觀,並沒有敏感性因素
游戲玩家能否正常的攻擊怪物、拾取物品、受到傷害,玩家生命值為0時能否正常死亡
游戲敵人(怪物或對手)能否正常的攻擊玩家、受到傷害,敵人(怪物或對手)生命值為0時能否正常死亡
玩家與敵人(怪物或對手)的生命值、法力值等是否顯示正常(包括數值和血條),受到攻擊後,生命值是否下降,釋放技能後,法力值是否下降(包括數值和血條)
殺死敵人(怪物或對手)後,物品的掉落和經驗值的獎勵是否正常
玩家的攻擊力、防禦力等數值計算是否正確,當玩家強化裝備後,攻擊力、防禦力等數值能否上升
玩家的背包系統是否完善,能否實現拾取物品後物品出現在背包內,當背包超出負重上限或物品欄滿欄的時候是否還能撿取物品,能否在背包內實現物品出售、物品修理等功能,背包內的物品信息是否顯示正確,使用後能否出現效果。
游戲是否具備自動尋路等導航功能,若有,該功能是否完善,玩家、寵物、坐騎和怪物的跟蹤是否正常
當玩家的裝備的持久度不足時,攻擊力、防禦力能否受到影響
進入游戲後,游戲場景的渲染、紋理是否顯示正常
NPC的功能是否能實現
游戲每個功能按鍵是否可以點擊,點擊後是否出現點擊後的效果
游戲虛擬桿是否可以正常的控制玩家的移動,游戲的虛擬按鈕是否可以正常的控制玩家的攻擊
行會系統、好友系統以及結婚系統是否完善,玩家列表是否是當前狀態的玩家列表
游戲是否有PK系統(PVE、PVP),若有,該功能是否完善
游戲是否具備組隊功能,若有,該功能是否完善
物品出售時金幣計算是否正確
游戲關卡的小地圖顯示是否正常,地圖圖標是否和玩家、敵人(怪物或對手)同步
游戲的記時是否連續、一致(指來電後時間繼續,從來電時刻開始計時)
玩家的游戲體驗是否方便
游戲說明是否與游戲操作功能保持一致
游戲界面的跳轉是否正常
新手玩家的前期體驗是否快速方便,玩家等級的提升是否快速,是否能給玩家帶來一定的緊張刺激感
退出遊戲後,游戲信息能否正確存檔
......
第五項:充值與商城系統
商城內物品價格是否合理
能否通過花費的現金來兌換一定量的虛擬游戲幣(基本充值功能的實現)
購買商品後,商品信息能否正確顯示,使用後能否出現效果
能否通過游戲官方、支付寶、微信等支付現金來實現充值交易
點擊充值按鈕後能否進入官方充值網站
商城內物品的上架/下架是否及時,是否有折扣等福利性活動
......
第六項:游戲中斷測試
被測游若與時間相關(游戲中有記時功能),來電後時間是否與來電前一致
游戲待機後,游戲能否暫停並關閉屏幕,並且來電或其他優先操作後,游戲能否暫停,並無其他異常現象(死機、黑屏、崩潰等)。
游戲中不同的界面來電時,來電提示正常,接聽,掛斷電話等操作後,返回遊戲是否出現異常。
游戲中不同的界面手機來簡訊時,簡訊提示正常,回復簡訊後返回遊戲是否出現異常
游戲中不同的界面來電時,來電提示正常,接聽,掛斷電話等操作後,返回遊戲後游戲音效是否出現異常
游戲中不同的界面手機來簡訊時,簡訊提示正常,回復簡訊後返回遊戲後游戲音效是否出現異常
......
第七項:游戲其他功能
游戲注冊是否有實名制
游戲是否有未成年人防沉迷系統
游戲的安全防護措施是否到位(倉庫鎖、登錄鎖、游戲物品鎖等)
游戲獲得的成就能否通過QQ、微信、支付寶等與聯系人分享
......
B. 如何使用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()