测试功能部分:
1.自动读取电脑内被测试文件和设备内播放器列表解析的所有文件,然后进行对比,判断被测试文件是否被解析;
2.自动选择文件点击;
3.判断是否能播放,还是被跳过;
4.判断是否在播放(进度条有没有动);
#coding:utf-8
from appium import webdriver
from time import sleep
import os
from PIL import Image
import math
import operator
from functools import reduce
import unittest
sleep(2)
desires_caps = {}
desires_caps['platformName'] = 'Android'
desires_caps['platformVersion'] = '8.1.0'
desires_caps['deviceName'] = '00001234'
desires_caps['appPackage'] = 'com.cidana.testmediaplayer'
desires_caps['appActivity'] = 'com.cidana.testmediaplayer.FileListActivity'
desires_caps["automationName"] = 'uiautomator1'
desires_caps['noReset'] = True
desires_caps['newCommandTimeout'] = 500
driver = webdriver.Remote('http://localhost:4723/wd/hub', desires_caps)
sleep(2)
sleep(1)
#遍历设备中播放器中的文件
def device_filename():
global device_filenameList2 # 定义全局变量
device_filenameList = []
s = driver.find_elements_by_class_name("android.widget.TextView") # 定位一组元素
for i in s:
print(i.text) # 输出每个文件名
device_filenameList.append(i.text) # 向列表中添加文件名
Swiped = True
while (Swiped == True):
before_swipe = driver.page_source # 获取滑动前页面元素
driver.swipe(1120, 600, 1120, 268, 3000) # 滑动
s1 = driver.find_elements_by_class_name("android.widget.TextView")
for i in s1:
device_filenameList.append(i.text)
after_swipe = driver.page_source # 获取滑动后页面元素
if before_swipe == after_swipe: # 判断是否滑动到底部,如果前一个页面和后一个页面完全相同,说明滑动到底部
Swiped = False
else:
Swiped = True
# print(Swiped)
device_filenameList2 = list(set(device_filenameList)) # 列表去重
device_filenameList2.sort(key=device_filenameList.index) # 列表仍保持之前列表的顺序排序
print(device_filenameList2)
#获取U盘中所有的被测试文件
def GetFileList(dir, musicfile_List):
if os.path.isfile(dir):
list_dir = list(dir)
del list_dir[0:13] # 删去序列0-13的字符,因为设备中的名字和在U盘内的名字不一样,需要修改
list_dir = ''.join(list_dir) # list_dir再等于序列所对应的字符
musicfile_List.append('/storage/usb1/G7PH/Video/G7PH软解/' + list_dir) # 将文件名添加进列表
elif os.path.isdir(dir):
for s in os.listdir(dir):
# 如果需要忽略某些文件夹,使用以下代码
# if s == "xxx":
# continue
newDir = os.path.join(dir, s)
GetFileList(newDir, musicfile_List)
return musicfile_List
#比较两个图片的相识度,differ为0时,两张图片相同
def compare(pic1, pic2):
global differ
differ = 0
'''
:param pic1: 图片1路径
:param pic2: 图片2路径
:return: 返回对比的结果
'''
image1 = Image.open(pic1)
image2 = Image.open(pic2)
histogram1 = image1.histogram()
histogram2 = image2.histogram()
differ = math.sqrt(reduce(operator.add, list(map(lambda a, b: (a - b) ** 2, histogram1, histogram2))) / len(histogram1))
#截图
def screen():
screename0 = r"screen" + ".png"
driver.get_screenshot_as_file(screename0)
sleep(0.5)
screename1 = r"screen1" + ".png"
driver.get_screenshot_as_file(screename1)
class TestG7(unittest.TestCase):
#判断被测试文件是否被设备解析成功
def test_parse(self):
u"""解析判断"""
global List
List = GetFileList('D:\G7\G7PH软解', [])
for i in range(len(List)):
print(i, List[i])
print(List)
device_filename()
for i in range(len(List)):
if(List[i] in device_filenameList2):#如果被测试文件存在在设备文件列表中
print(List[i] + " PASS")
else:
print(List[i] + ' FAIL')
driver.quit()#退出播放器
#测试播放情况
def test_play(self):
u"""播放情况判断"""
driver = webdriver.Remote('http://localhost:4723/wd/hub', desires_caps)
sleep(2)
List = GetFileList('D:\G7\G7PH软解', [])
for i in range(len(List)):
print(i)
print(List[i])
after_page = False
before_page = True
sleep(1)
while(before_page != after_page):
sleep(3)
try:
driver.find_element_by_android_uiautomator('text("{}")'.format(List[i])).click()#定位被测试文件列表中文件并点击
print("点击成功")
try:
driver.find_element_by_android_uiautomator('text("{}")'.format(List[i])).click()#再次定位判断是否播放成功
print("播放成功")
screen()
compare('screen.png', 'screen1.png')
print(differ)
if (differ != 0):
print("播放pass")
else:
print("播放Failed")
driver.keyevent(4)
sleep(6)
except:
print("skip")#如果文件被跳过,输出skip
driver.keyevent(4)
sleep(7)
break
except:
before_page = driver.page_source
driver.swipe(1120, 600, 1120, 268, 3000)
after_page = driver.page_source
导出报告部分:
#coding:utf-8
import os, time, unittest
import HTMLTestRunner
#需要对HTMLTestRunner.py进行修改
#第94行,将import StringIO修改成import io
#第539行,将self.outputBuffer = StringIO.StringIO()修改成self.outputBuffer = io.StringIO()
#第642行,将if not rmap.has_key(cls):修改成if not cls in rmap:
#第766行,将uo = o.decode('latin-1')修改成uo = e
#第775行,将ue = e.decode('latin-1')修改成ue = e
#第631行,将print >> sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime)修改成print(sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime))
report_path = 'E:/G7PHScript1/report'#报告存放位置
now = time.strftime("%Y-%m-%d %H:%M", time.localtime(time.time()))
title = u"G7PH测试"
report_abspath = os.path.join(report_path, title + now + ".html")
def all_case():
case_path = os.getcwd()
discover = unittest.defaultTestLoader.discover(case_path, pattern="script1.py")
print(discover)
return discover
if __name__ == "__main__":
fp = open(report_abspath, "wb")
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=title + ': ')
runner.run(all_case())
fp.close()