1.環境配置
Appium
Appium-desktop
Android sdk
Java
Mac
手機連接配接電腦,開發者調試模式
2.appium-desktop配置連接配接Android真機
2.1 開啟appium服務
點選Edit Configurations配置Android SDK和Java的環境變量,如下圖
再點選Start Server按鈕,進入下圖
點選上圖,🔍圖示,配置一些手機和APP資訊,如下圖
然後點選Start session按鈕,不報錯,則已連接配接成功
3.Android自動化測試代碼結構
代碼結構如下圖
TestCase目錄用于存放測試用例,用例檔案test開頭
如test_android_xxx.py
from appium import webdriver
import unittest
import time
from time import sleep
from KeyWord import KeyWords
from settings import *
class AndroidAppAutoTest(unittest.TestCase):
def setUp(self):
print("=======start!=======")
self.pro = KeyWords(url, desired_caps)
sleep(5)
def tearDown(self):
print("=======stop!=======")
def test_connect(self):
"""
測試連接配接功能
:return:
"""
print("測試開始!")
# 發起任務
self.pro.click_element('id',connect_id)
functions.py:主要存放一些函數如釘釘報警
# -*- coding:utf-8 -*-
# store any function
import string
import traceback
import hashlib
import requests
import random
Dinging_Webhook = "https://oapi.dingtalk.com/robot/send?access_token=087e8dc03b1xxxxxxxxxxxxxx"
def DingDingalert(msg):
"""
send alert info by DingDing
:param msg:
:return:
"""
data = {
'msgtype': 'text',
'text': {
"content": msg
},
}
try:
return requests.post(Dinging_Webhook, json=data)
except:
traceback.print_exc()
def getMessage(filepath):
message = ""
for line in open(filepath):
message = message + line
# print(message)
return message
def RandomEmail():
randomemail = ''.join(random.sample(string.ascii_letters + string.digits, 8)) + "@xx.com"
# print(randomemail)
return randomemail
HTMLTestRunner.py: 用于生成HTML測試報告,百度下載下傳放目錄裡即可
KeyWord.py: 用于存放自動化測試中需要反複使用的關鍵字如定位元素,點選操作等
from appium import webdriver
class KeyWords(object):
def __init__(self, url, desired_caps):
"""
初始化動作:連接配接手機
:param url:
:param desired_caps:
"""
self.driver = webdriver.Remote(url, desired_caps)
def locator(self, locator_type, value):
"""
元素定位
:param locator_type:
:param value:
:return: e
"""
if locator_type == 'xpath':
e = self.driver.find_element_by_xpath(value)
return e
elif locator_type == 'id':
e = self.driver.find_element_by_id(value)
return e
elif locator_type == 'name':
e = self.driver.find_element_by_name(value)
return e
elif locator_type == 'css':
e = self.driver.find_element_by_css_selector(value)
return e
def input_text(self, locator_type, value, text):
"""
文本框輸入内容
:param locator_type:
:param value:
:param text:
"""
self.locator(locator_type, value).send_keys(text)
def click_element(self, locator_type, value):
"""
元素點選
:param locator_type:
:param value:
"""
self.locator(locator_type, value).click()
run_all_cases.py:用于執行程式
# -*- coding:utf-8 -*-
# 伺服器一般預設是Python2,是以第一句申明最好加上
import os
import unittest
from functions import *
import time
import HTMLTestRunner # 需下載下傳HTMLTestRunner.py放在Python目錄site-packages下
def all_case():
testcase_dir = os.path.join(os.getcwd(), "TestCase") # 也可以用絕對目錄存放測試用例的目錄,定時任務時釘釘消息可能不會發,改成絕對目錄就好了
print(testcase_dir)
testcase = unittest.TestSuite() # 初始化一個測試套件用來裝測試用例
discover = unittest.defaultTestLoader.discover(testcase_dir, pattern="test*.py",
top_level_dir=None) # 尋找TestCase下所有test開頭的測試用例
testcase.addTests(discover)
print(testcase)
return testcase
if __name__ == "__main__":
# test report 為了友善發送釘釘消息,把測試結果儲存到TXT文檔裡
with open('TextReport.txt', 'w') as f:
runner = unittest.TextTestRunner(stream=f, verbosity=2)
runner.run(all_case())
# send report to dingding
msg = getMessage("TextReport.txt") # 讀取檔案内容儲存到變量用于釘釘消息發送
print("**************************")
print(msg)
#DingDingalert(msg)
if 'ERROR' in msg:
pass
DingDingalert(msg) # 調用Dingding函數發消息
else:
pass
# 以下是生成測試報告的寫法,不需要則注釋
# 擷取目前時間
# now = time.strftime("%Y-%m-%d %H-%M-%S")
# # 定制報告名稱
# filename = now + '_TestReport.html'
# # 向報告寫入測試結果資料
# fp = open(filename, 'wb')
# runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title='自動化測試報告', description='浏覽器:chrome')
# # 運作測試集
# runner.run(all_case())
# # 關閉報告檔案
# fp.close()
settings.py: 存放一些配置,變量資訊如URL,手機APP資訊
desired_caps_master_pro = {
"platformName": "Android",
"platformVersion": "11",
"deviceName": "VIVO",
"appPackage": "free.xxxxxxx",
"appActivity": "free.xxxxx.activity.MainActivity",
"udid": "7PXOSONNFQXXXX"
}
url = 'http://localhost:4723/wd/hub'
以上,有疑問可以評論讨論。