本文不在敘述Appium環(huán)境安裝。如有需要請(qǐng)參考:http://www.itdecent.cn/p/7a6fa7ab662b
1. 創(chuàng)建項(xiàng)目目錄
mkdir project{conf,common,logs,doc,tests}
#conf:存放appium-android配置設(shè)置,以及App頁(yè)面元素配置文件;
#logs:存放日志以及截圖;
#doc:存放文檔;
#common:存放工具類(lèi)的腳本;
#tests:存放測(cè)試腳本;
整個(gè)目錄如下:

Paste_Image.png
2. Appium Android配置文件
Appium Android Settings 設(shè)置如下:

Paste_Image.png
Python腳本配置如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
import sys
import time
import re
from appium import webdriver
sys.path.append("..")
#用于解決多個(gè)手機(jī)連接問(wèn)題
from common.mobile import get_serialno
#Read mobile deviceId
device_id = get_serialno()
#Read mobile os Version
os_version = os.popen('adb -s {0} shell getprop ro.build.version.release'.format(device_id)).read()
def appium_start():
config = {
'platformName':'Android', #平臺(tái)
'platformVersion':os_version, #系統(tǒng)版本
'deviceName':device_id, #測(cè)試設(shè)備ID
# 'appPackage':'com.jiuai',
# 'appActivity':'.activity.MainActivity',
'app':'/Users/xiaohutu/GitHub/Android-Test/com.jiuai.apk', #apk路徑
#'app':'D:\com.jiuai.apk',
'newCommandTimeout':30,
'automationName': 'Appium',
'unicodeKeyboard':True, #編碼,可解決中文輸入問(wèn)題
'resetKeyboard':True}
return webdriver.Remote('http://localhost:4723/wd/hub', config)
上述腳本保存為:appium_config.py
備注:
from common.mobile import get_serialno
用于解決多個(gè)手機(jī)連接問(wèn)題。具體腳本見(jiàn):https://github.com/yi-heng/Android-Test/blob/master/Template/common/mobile.py
3. Android元素定位
uiautomatorviewer是Android SDK自帶的工具,在$ANDROID_HOME/tools目錄下,可使用此工具查看頁(yè)面元素。
使用的測(cè)試app為本公司的開(kāi)發(fā)的:舊愛(ài),如下:

Paste_Image.png
driver.find_element_by_id(resource-id).click()
建議:將所有的頁(yè)面元素集中到一個(gè)文件,提高Appium腳本的復(fù)用性、可配置性,如命名為config.ini或el.ini
見(jiàn)另外教程:http://www.itdecent.cn/p/980a82cde7df
4. 測(cè)試腳本編寫(xiě)
4.1 導(dǎo)入相關(guān)庫(kù)
import unittest #Python單元測(cè)試框架
from configparser import ConfigParser #讀取配置庫(kù)
from selenium import webdriver #導(dǎo)入selenium庫(kù)
from appium import webdriver #導(dǎo)入appium庫(kù)
4.2 導(dǎo)入appium啟動(dòng)腳本
from conf.appium_config import appium_start
4.3 使用Unittest編寫(xiě)測(cè)試腳本主體
class ProductInformation(unittest.TestCase):
"""
TestCase: xxxxx
Description: xxxxx
"""
#@classmethod,在此類(lèi)中只進(jìn)行一次初始化和清理工作
@classmethod
def setUpClass(self):
self.driver = appium_config.appium_start()
def test_initial(self):
pass
@classmethod
def tearDownClass(self):
self.driver.quit()
4.4 編寫(xiě)測(cè)試用例
def test_initial(self):
driver.find_element_by_id(resource-id).click()
driver.find_element_by_id(resource-id).send_keys(u'測(cè)試數(shù)據(jù)')
4.5 組織運(yùn)行測(cè)試用例
# texture Testcase
def suite():
tests = [
"test_initial",
]
return unittest.TestSuite(map(ProductInformation,tests))
if __name__ == "__main__":
unittest.TextTestRunner(verbosity=2).run(suite())