zoukankan      html  css  js  c++  java
  • Robot Framework+adb框架实现Android集成自动化测试案例⑵——Python封装的自定义方法

    一、Public.py

    Public.py中的函数方法都是封装的自定义方法,包含调用cmd命令、照片对比、日志抓取、断言等方法。

    # _*_ coding:utf-8 _*_
    import os, subprocess, tkinter.messagebox, re, time, cv2
    from PIL import Image
    from moviepy.editor import VideoFileClip
    
    def cmd(command):
        """执行cmd命令"""
        subprocess.Popen(str(command), shell=True, stdout=subprocess.PIPE).wait()
    
    def cmd_popen(command):
        """执行cmd命令,并返回结果"""
        b = os.popen(command)
        return b.read()
    
    def ResultCmd(command):
        """执行cmd命令,并等待返回结果"""
        if command == '':
            print('传入命令为空,请检查!')
            return
        else:
            p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, encoding='utf-8')
            p.wait()
            result = p.stdout.readlines()
            return result
    
    def ResultCmdNoWait(command):
        """执行cmd命令,返回执行的结果"""
        if command == '':
            print('传入命令为空,请检查!')
            return
        else:
            p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, encoding='utf-8')
            result = p.stdout.readlines()
            return result
    
    def Image_Compare_Similarity(image_name):
        """比较两张照片相似度"""
        image_new_path = os.getcwd() + 'Image_new\' + image_name + '.png'     #新照片路径
        image_old_path = os.getcwd() + 'Image_old\' + image_name + '.png'     #旧照片路径
        image1 = Image.open(image_new_path)  # 打开图片
        image2 = Image.open(image_old_path)
        gray_image1 = image1.resize((320, 240)).convert('RGB')  # 转换图片大小及RGB模式
        gray_image2 = image2.resize((320, 240)).convert('RGB')
        image_hg1 = gray_image1.histogram()  # 返回图像的直方图
        image_hg2 = gray_image2.histogram()
        assert len(image_hg1) == len(image_hg2)  # 断言
        hist = sum(1 - (0 if l == r else float(abs(l - r)) / max(l, r)) for l, r in zip(image_hg1, image_hg2)) / len(
            image_hg1)  # 直方图计算相似度
        return hist
    
    def Pull_pic(image_name):
        """截取照片,并拷贝到本地目录"""
        pic_cmd = 'adb shell /system/bin/screencap -p /sdcard/screenshot.png'           #截取设备照片
        pull_cmd = 'adb pull /sdcard/screenshot.png ./Image_new/' + image_name + '.png'  #拷贝到本地目录
        cmd(pic_cmd)
        cmd(pull_cmd)
        print("截图保存路径:", './Image_new/' + image_name + '.png')
    
    def Crop_pic(image_name, a, b, c, d):
        """按指定坐标裁剪照片"""
        img = Image.open(os.getcwd() + 'Image_new\' + image_name + '.png')
        img2 = img.crop((int(a), int(b), int(c), int(d)))          #裁剪照片
        img2.save(os.getcwd() + 'Image_new\' + image_name + '.png')
    
    def Prompt_box(news):
        # tkinter.Tk().withdraw()
        """弹出提示框"""
        tkinter.messagebox.showinfo('提示', "  " + news + "  ")
    
    def emmc_mode(mode):
        """切换SD卡模式或EMMC模式"""
        if mode == 'emmc':
            os.chdir(os.path.join(os.getcwd(), 'emmc_mode'))
            cmd('adb root')
            cmd('adb push factory.ini /mnt/vendor/persist')          #上传emmc模式配置文件
            os.chdir(os.path.dirname(os.getcwd()))
            cmd('adb reboot')
            print('设备切换成EMMC模式')
    
        elif mode == 'sd':
            print(os.getcwd())
            os.chdir(os.path.join(os.getcwd(), 'sd_mode'))
            cmd('adb root')
            cmd('adb push factory.ini /mnt/vendor/persist')          #上传sd卡模式配置文件
            os.chdir(os.path.dirname(os.getcwd()))
            cmd('adb reboot')
            print('设备切换成SD卡模式')
        else:
            print('mode输入错误,请检查')
    
    def Update_time():
        """更新设备系统时间"""
        cmd('adb root')
        cmd('adb shell date %s set' % time.strftime("%m%d%H%M%Y.%S", time.localtime()))
        print("更新设备时间")
    
    def Clear():
        '''删除file目录的文件,清理环境'''
        file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'file')
        for file in os.listdir(file_path):
            if re.search('.mp4', file) or re.search('.jpg', file) or re.search('.txt', file) or re.search('.log', file):
                os.remove(os.path.join(file_path, file))
        print('环境清理完毕!')
    
    def logcat():
        """抓取设备日志"""
        file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'file')
        log_path = os.path.join(file_path, 'auto.log')
        log_cmd = 'start /b adb logcat >> %s' % log_path
        print('抓取log')
        os.system(log_cmd)
    
    def Sdcard():
        """返回设备sd卡挂载的name"""
        sdcard = ''
        cmd_sd = 'adb shell "cd /storage && ls "'
        result = ResultCmd(cmd_sd)
        if result != '':
            for line in result:
                try:
                    temp = line.strip().split()
                    if temp == "emulated":
                        continue
                    elif temp == "self":
                        continue
                    else:
                        sdcard = temp
                        break
                except BaseException as a:
                    print(a)
            if (sdcard == ''):
                print("未搜索到sd卡,准备退出")
                return sdcard
            else:
                print('SD卡挂载名称:', sdcard)
                return sdcard
        else:
            print("未搜索到sd卡,准备退出")
            return sdcard
    
    # def Reverse(file):
    #     """将目录文件倒序"""
    #     file.reverse()
    #     return file
    
    def AllFiles(sd, flag):
        """获取normal/event/pic所有文件,当flag = emmc时,sd为空"""
        if flag == 'sdcard':
            normal_file = NormalFilesSD(sd)
            event_file = EventFilesSD(sd)
            picture_file = PictureFilesSD(sd)
        else:
            normal_file = NormalFilesEMMC()
            event_file = EventFilesEMMC()
            picture_file = PictureFilesEMMC()
        return [normal_file, event_file, picture_file]
    
    def ConformList(*typelist):
        """把几个列表文件,整合为一个嵌套列表,如lista,listb,listc,输出zlist = [lista,listb,listc]"""
        result = list()
        for each in typelist:
            result.append(each)
        return result
    
    def GetDeviceDate():
        """获取设备系统时间,返回日期年月日小时分秒,格式如20191213112910"""
        cmd = 'adb shell date'
        temp = ResultCmd(cmd)
        year = temp[0].split()[5]
        if temp[0].split()[1] == 'Jan':
            month = '01'
        elif temp[0].split()[1] == 'Feb':
            month = '02'
        elif temp[0].split()[1] == 'Mar':
            month = '03'
        elif temp[0].split()[1] == 'Apr':
            month = '04'
        elif temp[0].split()[1] == 'May':
            month = '05'
        elif temp[0].split()[1] == 'Jun':
            month = '06'
        elif temp[0].split()[1] == 'Jul':
            month = '07'
        elif temp[0].split()[1] == 'Aug':
            month = '08'
        elif temp[0].split()[1] == 'Sep':
            month = '09'
        elif temp[0].split()[1] == 'Oct':
            month = '10'
        elif temp[0].split()[1] == 'Nov':
            month = '11'
        elif temp[0].split()[1] == 'Dec':
            month = '12'
        day = temp[0].split()[2]
        if day == '1' or day == '2' or day == '3' or day == '4' or day == '5' or day == '6' or day == '7' or day == '8' or day == '9':
            day = '0' + temp[0].split()[2]
        time = ('').join(temp[0].split()[3].split(':'))
        new_time = str(year) + str(month) + str(day) + str(time)
        print('当前时间:%s' % new_time)
        return new_time
    
    def NormalFilesSD(sdcard):
        """返回设备sdcard normal文件列表,返回文件列表"""
        list_normal = list()
        cmd = 'adb shell "cd /storage/%s && ls NORMAL/ -l|grep mp4"' % sdcard
        temp_list = ResultCmdNoWait(cmd)
        for line in temp_list:
            if re.match('.*.mp4', line):
                list_normal.append(line.split()[7].strip())
        if list_normal == []:
            print("Normal 文件为空")
        return list_normal
    
    def NormalFilesEMMC():
        """返回设备emmc normal文件列表,返回文件列表"""
        list_normal = list()
        cmd = 'adb shell "cd /sdcard && ls NORMAL/ -l|grep mp4"'
        temp_list = ResultCmdNoWait(cmd)
        for line in temp_list:
            if re.match('.*.mp4', line):
                list_normal.append(line.split()[7].strip())
        if list_normal == []:
            print("Normal 文件为空")
        return list_normal
    
    def EventFilesSD(sdcard):
        """返回设备sd event文件列表,返回文件列表"""
        list_event = list()
        cmd = 'adb shell "cd /storage/%s && ls EVENT/ -l|grep mp4"' % sdcard
        temp_list = ResultCmdNoWait(cmd)
        for line in temp_list:
            if re.match('.*.mp4', line):
                list_event.append(line.split()[7].strip())
        if list_event == []:
            print("Event文件为空")
        return list_event
    
    def EventFilesEMMC():
        """返回设备emmc event文件列表,返回文件列表"""
        list_event = list()
        cmd = 'adb shell "cd /sdcard && ls EVENT/ -l|grep mp4"'
        temp_list = ResultCmdNoWait(cmd)
        for line in temp_list:
            if re.match('.*.mp4', line):
                list_event.append(line.split()[7].strip())
        if list_event == []:
            print("Event 文件为空")
        return list_event
    
    def PictureFilesSD(sdcard):
        """返回设备sd PICTURE文件列表,返回文件列表"""
        list_picture = list()
        cmd = 'adb shell "cd /storage/%s && ls PICTURE/ -l|grep jpg"' % sdcard
        temp_list = ResultCmdNoWait(cmd)
        for line in temp_list:
            if re.match('.*.jpg', line):
                list_picture.append(line.split()[7].strip())
        if list_picture == []:
            print("Picture 文件为空")
        # print('Picture文件列表:', list_picture)
        return list_picture
    
    def PictureFilesEMMC():
        """返回设备emmc PICTURE文件列表,返回文件列表"""
        list_picture = list()
        cmd = 'adb shell "cd /sdcard && ls PICTURE/ -l|grep jpg"'
        temp_list = ResultCmdNoWait(cmd)
        for line in temp_list:
            if re.match('.*.jpg', line):
                list_picture.append(line.split()[7].strip())
        if list_picture == []:
            print("Picture 文件为空")
        return list_picture
    
    def CopyFileSD(sd, file_type, file, num, main_2nd):
        """
        拷贝设备sd卡指定文件到本地file目录
        参数为sdcard挂载名称,文件类型(NORMAL/EVENT/PICTURE),文件,文件数量(多个文件,参数有效),视频类型main_2nd为main或者2nd,默认空
        """
        copy_file = list()
        if sd == '' or file_type == '' or file == '':
            print('参数错误,请检查!')
            return False
        path = '/storage/%s/%s/' % (sd, file_type)
        file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'file')
        if not os.path.exists(file_path):  # 判断路径是否存在
            os.mkdir(file_path)  # 创建目录
        if type(file) == str:
            cmd = 'adb pull ' + path + file + ' ' + file_path
            copy_over = 0
            result = ResultCmd(cmd)
            for line in result:
                if re.match('.*1s+files+pulled.*', line):
                    copy_over = 1
                    break
                else:
                    continue
            if copy_over == 1:
                print('当前文件拷贝完成', file)
                copy_file.append(file)
                return copy_file
            else:
                print('当前文件拷贝失败,请检查!')
                return ''
        elif type(file) == list:
            if main_2nd == '':
                if file_type == 'EVENT':
                    for i in range(int(num)):
                        cmd = 'adb pull ' + path + file[-i - 1] + ' ' + file_path
                        result = ResultCmd(cmd)
                        time.sleep(2)  # 增加时间2s,避免拷贝失败
                        copy_over = 0
                        for line in result:
                            if re.match('.*1s+files+pulled.*', line):
                                copy_over = 1
                                break
                            else:
                                continue
                        if copy_over == 1:
                            # print('文件%s拷贝完成' % file[-i - 1])
                            copy_file.append(file[-i - 1])
                        else:
                            print('文件拷贝失败,请检查!')
                else:
                    for i in range(int(num)):
                        cmd = 'adb pull ' + path + file[-i - 3] + ' ' + file_path
                        result = ResultCmd(cmd)
                        time.sleep(2)  # 增加时间2s,避免拷贝失败
                        copy_over = 0
                        for line in result:
                            if re.match('.*1s+files+pulled.*', line):
                                copy_over = 1
                                break
                            else:
                                continue
                        if copy_over == 1:
                            # print('文件%s拷贝完成' % file[-i-3])
                            copy_file.append(file[-i - 3])
                        else:
                            print('文件拷贝失败,请检查!')
            elif main_2nd == 'main':
                '''拷贝main camera文件'''
                for i in range(int(num)):
                    for j in range(len(file)):
                        if re.match('dddddddddddd.mp4', file[-j - 3]) or re.match(
                                'dddddddddddd_UNKNOWN.mp4', file[-j - 3]) or 
                                re.match('dddddddddddd.jpg', file[-j - 3]) or re.match(
                            'dddddddddddd_UNKNOWN.jpg', file[-j - 3]):
                            break
                        else:
                            continue
                    cmd = 'adb pull ' + path + file[-j - 3] + ' ' + file_path
                    result = ResultCmd(cmd)
                    time.sleep(2)  # 增加时间2s,避免拷贝失败
                    copy_over = 0
                    for line in result:
                        if re.match('.*1s+files+pulled.*', line):
                            copy_over = 1
                            break
                        else:
                            continue
                    if copy_over == 1:
                        # print('文件%s拷贝完成' % file[-j-3])
                        copy_file.append(file.pop(-j - 3))
                    else:
                        print('当前文件拷贝失败,请检查!')
            elif main_2nd == '2nd':
                for i in range(int(num)):
                    for j in range(len(file)):
                        if re.match('dddddddddddd_2.mp4', file[-j - 3]) or re.match(
                                'dddddddddddd_2_UNKNOWN.mp4', file[-j - 3]) or 
                                re.match('dddddddddddd_2.jpg', file[-j - 3]) or re.match(
                            'dddddddddddd_2_UNKNOWN.jpg', file[-j - 3]):
                            break
                        else:
                            continue
                    cmd = 'adb pull ' + path + file[-j - 3] + ' ' + file_path
                    result = ResultCmd(cmd)
                    """增加时间2s,避免拷贝失败"""
                    time.sleep(2)
                    copy_over = 0
                    for line in result:
                        if re.match('.*1s+files+pulled.*', line):
                            copy_over = 1
                            break
                        else:
                            continue
                    if copy_over == 1:
                        # print('文件%s拷贝完成' % file[-j-3])
                        copy_file.append(file.pop(-j - 3))
                    else:
                        print('当前文件拷贝失败,请检查!')
            else:
                print('参数main_2nd错误:', main_2nd)
        if copy_file != '':
            print('文件拷贝完成列表:', copy_file)
            return copy_file
        else:
            return False
    
    def CopyFileEMMC(file_type, file, num, main_2nd):
        """
        拷贝设备emmc指定文件到本地file目录
        文件类型(NORMAL/EVENT/PICTURE),文件,数量(多个文件,参数有效),视频类型main_2nd为main或者2nd,默认空
        """
        copy_file = list()
        if file_type == '' or file == '':
            print('参数错误,请检查!')
            return False
        path = '/sdcard/%s/' % file_type
        file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'file')
        if not os.path.exists(file_path):  # 判断路径是否存在
            os.mkdir(file_path)  # 创建目录
        if type(file) == str:
            cmd = 'adb pull ' + path + file + ' D:/temp/'
            copy_over = 0
            result = ResultCmd(cmd)
            for line in result:
                if re.match('.*1s+files+pulled.*', line):
                    copy_over = 1
                    break
                else:
                    continue
            if copy_over == 1:
                print('当前文件拷贝完成:', file)
                copy_file.append(file)
                return copy_file
            else:
                print('当前文件拷贝失败,请检查!')
                return ''
        elif type(file) == list:
            if main_2nd == '':
                if file_type == 'EVENT':
                    for i in range(int(num)):
                        cmd = 'adb pull ' + path + file[-i - 1] + ' ' + file_path
                        result = ResultCmd(cmd)
                        time.sleep(2)  # 增加时间2s,避免拷贝失败
                        copy_over = 0
                        for line in result:
                            if re.match('.*1s+files+pulled.*', line):
                                copy_over = 1
                                break
                            else:
                                continue
                        if copy_over == 1:
                            # print('文件%s拷贝完成' % file[-i - 1])
                            copy_file.append(file[-i - 1])
                        else:
                            print('文件拷贝失败,请检查!')
                else:
                    for i in range(int(num)):
                        cmd = 'adb pull ' + path + file[-i - 3] + ' ' + file_path
                        result = ResultCmd(cmd)
                        time.sleep(2)  # 增加时间2s,避免拷贝失败
                        copy_over = 0
                        for line in result:
                            if re.match('.*1s+files+pulled.*', line):
                                copy_over = 1
                                break
                            else:
                                continue
                        if copy_over == 1:
                            # print('文件%s拷贝完成' % file[-i-3])
                            copy_file.append(file[-i - 3])
                        else:
                            print('文件拷贝失败,请检查!')
            elif main_2nd == 'main':
                for i in range(int(num)):
                    for j in range(len(file)):
                        if re.match('dddddddddddd.mp4', file[-j - 3]) or re.match(
                                'dddddddddddd_UNKNOWN.mp4', file[-j - 3]) or 
                                re.match('dddddddddddd.jpg', file[-j - 3]) or re.match(
                            'dddddddddddd_UNKNOWN.jpg', file[-j - 3]):
                            break
                        else:
                            continue
                    cmd = 'adb pull ' + path + file[-j - 3] + ' ' + file_path
                    result = ResultCmd(cmd)
                    time.sleep(2)  # 增加时间2s,避免拷贝失败
                    copy_over = 0
                    for line in result:
                        if re.match('.*1s+files+pulled.*', line):
                            copy_over = 1
                            break
                        else:
                            continue
                    if copy_over == 1:
                        # print('文件%s拷贝完成' % file[-j-3])
                        copy_file.append(file.pop(-j - 3))
                    else:
                        print('当前文件拷贝失败,请检查!')
            elif main_2nd == '2nd':
                for i in range(int(num)):
                    for j in range(len(file)):
                        if re.match('dddddddddddd_2.mp4', file[-j - 3]) or re.match(
                                'dddddddddddd_2_UNKNOWN.mp4', file[-j - 3]) or 
                                re.match('dddddddddddd_2.jpg', file[-j - 3]) or re.match(
                            'dddddddddddd_2_UNKNOWN.jpg', file[-j - 3]):
                            break
                        else:
                            continue
                    cmd = 'adb pull ' + path + file[-j - 3] + ' ' + file_path
                    result = ResultCmd(cmd)
                    """增加时间2s,避免拷贝失败"""
                    time.sleep(2)
                    copy_over = 0
                    for line in result:
                        if re.match('.*1s+files+pulled.*', line):
                            copy_over = 1
                            break
                        else:
                            continue
                    if copy_over == 1:
                        # print('文件%s拷贝完成' % file[-j-3])
                        copy_file.append(file.pop(-j - 3))
                    else:
                        print('当前文件拷贝失败,请检查!')
                else:
    
                    print('参数main_2nd错误:', main_2nd)
                if copy_file != '':
                    print('文件拷贝完成列表:', copy_file)
                    return copy_file
                else:
                    return False
        if copy_file != '':
            print('文件拷贝完成列表:', copy_file)
            return copy_file
        else:
            return False
    
    def Check(time, file, flag):
        """断言方法,通过对比返回True或False用于RF断言,传入参数为系统时间time,文件file,flag类型为断言类型"""
        if file == [] or flag == '':
            return False
    
        elif flag == 'format_name':                         #检查设备录制视频和照片命令规则和格式
            name_y = time[2:6]
            name_main = 'dddddddddddd.mp4'
            name_2nd = 'dddddddddddd_2.mp4'
            name_main_2 = 'dddddddddddd_UNKNOWN.mp4'
            name_2nd_2 = 'dddddddddddd_2_UNKNOWN.mp4'
            name_main_3 = 'dddddddddddd.jpg'
            name_2nd_3 = 'dddddddddddd_2.jpg'
            name_main_4 = 'dddddddddddd_UNKNOWN.jpg'
            name_2nd_4 = 'dddddddddddd_2_UNKNOWN.jpg'
            is_format = True
            for each in file:
                if re.match(name_y, each) and re.match(name_main, each):
                    continue
                elif re.match(name_y, each) and re.match(name_2nd, each):
                    continue
                elif re.match(name_y, each) and re.match(name_main_2, each):
                    continue
                elif re.match(name_y, each) and re.match(name_2nd_2, each):
                    continue
                elif re.match(name_y, each) and re.match(name_main_3, each):
                    continue
                elif re.match(name_y, each) and re.match(name_2nd_3, each):
                    continue
                elif re.match(name_y, each) and re.match(name_main_4, each):
                    continue
                elif re.match(name_y, each) and re.match(name_2nd_4, each):
                    continue
                else:
                    is_format = False
                    break
            if is_format == True:
                print('命名规则符合要求')
                return True
            else:
                return False
    
        elif flag == 'check_file':                   #检查设备录制视频名称是否符合设备系统时间
            name_f = time[2:12]
            name_f2 = str(int(time[2:12]) - 1)
            name_f_u = time[2:8]
            uname = 'UNKNOWN'
            is_file = False
            for each in file:
                if re.match(name_f, each) or re.match(name_f2, each):
                    is_file = True
                    break
                elif re.match(name_f_u, each) and re.search(uname, each):
                    is_file = True
                    break
                else:
                    continue
            if is_file == True:
                print('文件时间符合要求')
                return True
            else:
                return False
    
        elif flag == 'record_simultaneous':           #检查设备前后摄像头录制文件名称是否同步
            main_list = list()
            snd_list = list()
            count = 0
            for each in file:
                if re.match('dddddddddddd.mp4', each) or re.match('dddddddddddd_UNKNOWN.mp4', each):
                    main_list.append(each)
                elif re.match('dddddddddddd_2.mp4', each) or re.match('dddddddddddd_2_UNKNOWN.mp4',
                                                                                  each):
                    snd_list.append(each)
                elif re.match('dddddddddddd.jpg', each) or re.match('dddddddddddd_UNKNOWN.jpg',
                                                                                each):
                    main_list.append(each)
                elif re.match('dddddddddddd_2.jpg', each) or re.match('dddddddddddd_2_UNKNOWN.jpg',
                                                                                  each):
                    snd_list.append(each)
                else:
                    print("视频格式不正确,请检查!")
    
            for m in main_list:
                flag = 0
                for s in snd_list:
                    if re.search('UNKNOWN', m) and re.match(m.split('_')[0], s):
                        flag = 1
                        break
                    elif re.match(m.split('.')[0], s):
                        flag = 1
                        break
                    else:
                        continue
                if flag == 0:
                    count += 1
            ratio = count / len(main_list) * 100
            if ratio > 5:
                print('命名不同步的比例为:%.1f%%,大于5%%,不符合要求' % ratio)
                return False
            else:
                print('命名不同步的比例为:%.1f%%,小于5%%,符合要求' % ratio)
                return True
    
        elif flag == 'normal_file_size':      #检查normal目录视频文件大小
            flag = 0
            file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'file')
            for each in file:
                mp4_path = os.path.join(file_path, each)
                file_byte = os.path.getsize(mp4_path)
                file_M = int(file_byte / 1024 / 1024)
                if 42 <= file_M <= 57:
                    print("当前录影 %s 大小满足45M:%sM" % (each, file_M))
                    os.remove(mp4_path)
                elif file_M > 100:
                    print("当前录影 %s 大于100M:%sM" % (each, file_M))
                    flag += 1
                elif file_M == 0:
                    print("当前录影 %s 为0M:%sM" % (each, file_M))
                    flag += 1
                else:
                    print("当前录影 %s 大小不满足45M:%sM" % (each, file_M))
                    flag += 1
    
            if flag == 0:
                print("一般录影大小满足45M要求!")
                return True
            else:
                print("一般录影大小不满足45M要求,不满足个数:" + str(flag) + "/" + str(len(file)))
                return False
    
        elif flag == 'event_file_size':           #检查event目录视频文件大小
            flag = 0
            file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'file')
            for each in file:
                mp4_path = os.path.join(file_path, each)
                file_byte = os.path.getsize(mp4_path)
                file_M = int(file_byte / 1024 / 1024)
                if 10 <= file_M <= 22:
                    print("当前录影 %s 大小满足12M:%sM" % (each, file_M))
                    os.remove(mp4_path)
                else:
                    print("当前录影 %s 大小不满足12M:%sM" % (each, file_M))
                    flag += 1
            if flag == 0:
                print("一般录影大小满足45M要求!")
                return True
            else:
                print("一般录影大小不满足45M要求,不满足个数:" + str(flag) + "/" + str(len(file)))
                return False
    
        elif flag == 'picture_file_size':              #检查picture目录文件大小
            flag = 0
            file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'file')
            for each in file:
                mp4_path = os.path.join(file_path, each)
                file_byte = os.path.getsize(mp4_path)
                file_M = int(file_byte / 1024)
                if 100 <= file_M <= 200:
                    print("当前照片 %s 大小满足100-200KB:%sKB" % (each, file_M))
                    os.remove(mp4_path)
                else:
                    print("当前照片 %s 大小满足100-200KB:%sKB" % (each, file_M))
                    flag += 1
            if flag == 0:
                print("照片大小满足100-200KB要求!")
                return True
            else:
                print("照片大小不满足100-200KB要求,不满足个数:" + str(flag) + "/" + str(len(file)))
                return False
    
        elif flag == '1min_file':                #检查设备录制的normal视频是否为1min
            flag = 0
            file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'file')
            for each in file:
                mp4_path = os.path.join(file_path, each)
                clip = VideoFileClip(mp4_path)
                time = int(clip.duration)  # 时长
                if float(time) >= 59 and float(time) <= 61:  # 大于59s,小于61s,判定为文件长度正常
                    print("当前录影%s时长满足1min:%ss" % (each, time))
                else:
                    print("当前录影%s时长不满足1min:%ss" % (each, time))
                    flag += 1
            if flag == 0:
                print("一般录影时长满足1min要求!")
                return True
            else:
                print("一般录影时长不满足1min要求,不满足个数:" + str(flag) + "/" + str(len(file)))
                return False
    
        elif flag == '10s_file':                 #检查设备录制的event视频是否为10s
            flag = 0
            file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'file')
            for each in file:
                mp4_path = os.path.join(file_path, each)
                clip = VideoFileClip(mp4_path)
                time = int(clip.duration)  # 时长
                if 9 <= float(time) <= 11:  # 大于14s,小于16s,判定为文件长度正常
                    print("当前事件录影%s时长满足10s:%ss" % (each, time))
                else:
                    print("当前事件%s时长不满足10s:%ss" % (each, time))
                    flag += 1
            if flag == 0:
                print("事件录影时长满足10s要求!")
                return True
            else:
                print("事件录影时长不满足10s要求,不满足个数:" + str(flag) + "/" + str(len(file)))
                return False
    
        elif flag == '15s_file':                    #检查设备录制的event视频是否为15s
            flag = 0
            file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'file')
            for each in file:
                mp4_path = os.path.join(file_path, each)
                clip = VideoFileClip(mp4_path)
                time = int(clip.duration)  # 时长
                if 14 <= float(time) <= 16:  # 大于14s,小于16s,判定为文件长度正常
                    print("当前录影%s时长满足15s:%ss" % (each, time))
                else:
                    print("当前录影%s时长不满足15s:%ss" % (each, time))
                    flag += 1
            if flag == 0:
                print("事件录影时长满足15s要求!")
                return True
            else:
                print("事件录影时长不满足15s要求,不满足个数:" + str(flag) + "/" + str(len(file)))
                return False
    
        elif flag == '20s_file':                      #检查设备录制的event视频是否为20s
            flag = 0
            file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'file')
            for each in file:
                mp4_path = os.path.join(file_path, each)
                clip = VideoFileClip(mp4_path)
                time = int(clip.duration)  # 时长
                if 19 <= float(time) <= 21:
                    print("当前录影%s时长满足20s:%ss" % (each, time))
                else:
                    print("当前录影%s时长不满足20s:%ss" % (each, time))
                    flag += 1
            if flag == 0:
                print("事件录影时长满足20s要求!")
                return True
            else:
                print("事件录影时长不满足20s要求,不满足个数:" + str(flag) + "/" + str(len(file)))
                return False
    
        elif flag == 'check_resolution_main':           #检查设备录制main摄像头视频的分辨率和帧率
            flag = 0
            file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'file')
            for each in file:
                mp4_path = os.path.join(file_path, each)
                cap = cv2.VideoCapture(mp4_path)
                width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))  # 分辨率-宽度
                height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))  # 分辨率-高度
                fps = int(round(cap.get(cv2.CAP_PROP_FPS)))  # 帧率
                if width == 1920 and height == 1080 and 26 <= fps <= 28:  # fps大于26s,小于28s,判定为正常fps 27
                    print("当前main文件 %s 分辨率为:%dx%d,帧率为:%d,符合要求" % (each, width, height, fps))
                else:
                    print("当前main文件 %s 分辨率为:%dx%d,帧率为:%d,不符合要求" % (each, width, height, fps))
                    flag += 1
            if flag == 0:
                print("main文件满足1920x1080 & 27fps,检查完毕!")
                return True
            else:
                print("main文件不满足1920x1080 & 27fps,不符合要求数量:" + str(flag) + "/" + str(len(file)))
                return False
    
        elif flag == 'check_resolution_2nd':            #检查设备录制2nd摄像头视频的分辨率和帧率
            flag = 0
            file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'file')
            for each in file:
                mp4_path = os.path.join(file_path, each)
                cap = cv2.VideoCapture(mp4_path)
                width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))  # 分辨率-宽度
                height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))  # 分辨率-高度
                fps = int(round(cap.get(cv2.CAP_PROP_FPS)))  # 帧率
                if width == 1920 and height == 1080 and 14 <= fps <= 16:  # fps大于26s,小于28s,判定为正常fps 27
                    print("当前2nd文件 %s 分辨率为:%dx%d,帧率为:%d,符合要求" % (each, width, height, fps))
                else:
                    print("当前2nd文件 %s 分辨率为:%dx%d,帧率为:%d,不符合要求" % (each, width, height, fps))
                    flag += 1
            if flag == 0:
                print("2nd文件满足1920x1080 & 15fps,检查完毕!")
                return True
            else:
                print("2nd文件不满足1920x1080 & 15fps,不符合要求数量:" + str(flag) + "/" + str(len(file)))
                return False
    
        elif flag == 'check_pic_resolution':
            flag = 0
            file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'file')
            for each in file:
                mp4_path = os.path.join(file_path, each)
                cap = cv2.VideoCapture(mp4_path)
                width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))  # 分辨率-宽度
                height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))  # 分辨率-高度
                if width == 1920 and height == 1080:
                    print("当前照片文件 %s 分辨率为:%dx%d,符合要求" % (each, width, height))
                else:
                    print("当前照片文件 %s 分辨率为:%dx%d,不符合要求" % (each, width, height))
                    flag += 1
            if flag == 0:
                print("图片文件满足1920x1080,检查完毕!")
                return True
            else:
                print("图片文件不满足1920x1080,不符合要求数量:" + str(flag) + "/" + str(len(file)))
                return False
    
        elif flag == 'check_bitrate':              #检查设备录制视频的比特率
            flag = 0
            file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'file')
            video_info_path = os.path.join(file_path, 'video_info.txt')
            for each in file:
                mp4_path = os.path.join(file_path, each)
                cmd1 = 'ffmpeg -i ' + mp4_path + ' output 2> ' + video_info_path
                cmd(cmd1)
                bitrate = 0
                audio = 0
                f = open(video_info_path, 'r', encoding='ISO-8859-1')
                result = f.readlines()
                f.close()
                os.remove(video_info_path)
                for line in result:
                    if re.search('Duration:.*, bitrate: (d+) kb/s', line):
                        temp = float(re.search('Duration:.*, bitrate: (d+) kb/s', line).group(1))
                        bitrate = float(temp / 1000)
                        break
                if re.match('dddddddddddd.mp4', each) or re.match('dddddddddddd_UNKNOWN.mp4', each):
                    for line in result:
                        if re.search('Stream.*, fltp, (d+) kb/s', line):
                            audio = int(re.search('Stream.*, fltp, (d+) kb/s', line).group(1))
                            break
                if 6 <= bitrate <= 7:  # 判断比特率
                    print("当前文件 %s 满足6Mbps比特率:%s" % (each, bitrate))
                else:
                    print("当前文件 %s 不满足6Mbps比特率:%s" % (each, bitrate))
                    flag += 1
                if re.match('dddddddddddd.mp4', each) or re.match('dddddddddddd_UNKNOWN.mp4', each):
                    if 127 <= audio <= 129:
                        print("当前文件 %s 满足128kbps音频比特率:%s" % (each, audio))
                    else:
                        print("当前文件 %s 不满足128kbps音频比特率:%s" % (each, audio))
                        flag += 1
            if flag == 0:
                print("文件满足比特率,检查完毕!")
                return True
            else:
                print("文件不满足比特率,不符合要求:" + str(flag) + "/" + str(len(file)))
                return False
    
        elif flag == 'check_overwrite_normal':         #检查设备录制的normal视频被覆写情况
            filelist_old = file[0]
            filelist_new = file[1]
            if len(filelist_old) != len(filelist_new):
                print('文件不满足覆写条件,请检查!')
                return False
            else:
                '''比较normal文件'''
                normal_old = filelist_old[0]
                normal_new = filelist_new[0]
                for i in range(len(normal_old)):
                    flag = 0
                    for j in normal_new:
                        if normal_old[i] == j:
                            flag = 1
                            break
                        else:
                            continue
                    if flag == 1:
                        pass
                    else:
                        if i == 0 or i == 1:
                            print('第%s个文件不存在,已覆写:' % i, normal_old[i])
                        else:
                            print('中间文件被覆写,覆写异常!请检查!')
                            return False
                for i in range(len(normal_new)):
                    flag = 0
                    for j in normal_old:
                        if normal_new[i] == j:
                            flag = 1
                            break
                        else:
                            continue
                    if flag == 1:
                        pass
                    else:
                        if i == len(normal_new) - 1 or i == len(normal_new) - 2:
                            print('第%s个文件不存在,已新增:' % i, normal_new[i])
                        else:
                            print('中间文件被覆写,新增异常!请检查!')
                            return False
                print('Normal文件overwrite检查完成,正常覆写!')
                return True
    
        elif flag == 'check_overwrite_normal_no':            #检查设备录制的normal视频未被覆写情况
            filelist_old = file[0]
            filelist_new = file[1]
            if len(filelist_old) != len(filelist_new):
                print('新旧一般录影文件数量不相同,请检查!')
                return False
            else:
                '''比较normal文件'''
                normal_old = filelist_old[0]
                normal_new = filelist_new[0]
                for i in range(len(normal_old)):
                    flag = 0
                    for j in normal_new:
                        if normal_old[i] == j:
                            flag = 1
                            break
                        else:
                            continue
                    if flag == 1:
                        pass
                    else:
                        print('一般录影文件被覆写!')
                        return False
                print('一般录影文件未被覆写!')
                return True
    
        elif flag == 'check_overwrite_event':                #检查设备录制的event视频被覆写情况
            filelist_old = file[0]
            filelist_new = file[1]
            if len(filelist_old) != len(filelist_new):
                print('文件不满足overwrite条件,请检查!')
                return False
            else:
                '''比较event文件'''
                event_old = filelist_old[1]
                event_new = filelist_new[1]
                for i in range(len(event_old)):
                    flag = 0
                    for j in event_new:
                        if event_old[i] == j:
                            flag = 1
                            break
                        else:
                            continue
                    if flag == 1:
                        pass
                    else:
                        if i == 0 or i == 1:
                            print('第%s个文件不存在,已覆写:' % i, event_old[i])
                        else:
                            print('中间文件被覆写,覆写异常!请检查!')
                            return False
                for i in range(len(event_new)):
                    flag = 0
                    for j in event_old:
                        if event_new[i] == j:
                            flag = 1
                            break
                        else:
                            continue
                    if flag == 1:
                        pass
                    else:
                        if i == len(event_new) - 1 or i == len(event_new) - 2:
                            print('第%s个文件不存在,已新增:' % i, event_new[i])
                        else:
                            print('中间文件被覆写,新增异常!请检查!')
                            return False
                print('Event文件overwrite检查完成,正常覆写!')
                return True
    
        elif flag == 'check_overwrite_picture':       #检查设备录制的照片被覆写情况
            filelist_old = file[0]
            filelist_new = file[1]
            if len(filelist_old) != len(filelist_new):
                print('文件不满足overwrite条件,请检查!')
                return False
            else:
                '''比较picture文件'''
                picture_old = filelist_old[2]
                picture_new = filelist_new[2]
                print(picture_old)
                print(picture_new)
                print(len(picture_old))
                for i in range(len(picture_old)):
                    flag = 0
                    for j in picture_new:
                        if picture_old[i] == j:
                            flag = 1
                            break
                        else:
                            continue
                    if flag == 1:
                        pass
                    else:
                        if i == 0 or i == 1 or i == 2 or i == 3 or i == 4 or i == 5 or i == 6 or i == 7:
                            print('第%s个文件不存在,已覆写:' % i, picture_old[i])
                        else:
                            print('中间文件被覆写,覆写异常!请检查!')
                            return False
                for i in range(len(picture_new)):
                    flag = 0
                    for j in picture_old:
                        if picture_new[i] == j:
                            flag = 1
                            break
                        else:
                            continue
                    if flag == 1:
                        pass
                    else:
                        if i == len(picture_new) - 1 or i == len(picture_new) - 2 or i == len(picture_new) - 3 or i == len(
                                picture_new) - 4 or 
                                i == len(picture_new) - 5 or i == len(picture_new) - 6 or i == len(
                            picture_new) - 7 or i == len(picture_new) - 8:
                            print('第%s个文件不存在,已新增:' % i, picture_new[i])
                        else:
                            print('中间文件被覆写,新增异常!请检查!')
                            return False
                print('picture文件overwrite检查完成,正常覆写!')
                return True
    
        elif re.match('check_event_', flag):           #检查设备录制的event视频与照片数量是否对应
            if re.search('check_event_(d)', flag):
                e_p = int(re.search('check_event_(dd)', flag).group(1))
            else:
                print('参数输入错误,请检查!')
            filelist_old = file[0]
            filelist_new = file[1]
            event_old = filelist_old[1]  # 比较文件
            event_new = filelist_new[1]
            picture_old = filelist_old[2]
            picture_new = filelist_new[2]
            for i in range(len(event_new)):
                flag = 0
                for j in event_old:
                    if event_new[i] == j:
                        flag = 1
                        break
                    else:
                        continue
                if flag == 1:
                    pass
                else:
                    if i == len(event_new) - 1 or i == len(event_new) - 2:
                        print('第%s个event已新增:' % i, event_new[i])
                    else:
                        print('中间event文件被覆写,新增异常!请检查!')
                        return False
            pic_num = 0
            for i in range(len(picture_new)):
                flag = 0
                for j in picture_old:
                    if picture_new[i] == j:
                        flag = 1
                        break
                    else:
                        continue
                if flag == 1:
                    pass
                else:
                    if i == len(picture_new) - 1 or i == len(picture_new) - 2 or i == len(picture_new) - 3 or i == len(
                            picture_new) - 4 or i == len(picture_new) - 5 or i == len(picture_new) - 6 or i == len(
                            picture_new) - 7 or i == len(picture_new) - 8 or len(picture_new) - 9 or i == len(
                        picture_new) - 10 or len(picture_new) - 11 or i == len(picture_new) - 12:
                        print('第%s个picture已新增:' % i, picture_new[i])
                        pic_num += 1
                    else:
                        print('中间picture文件被覆写,新增异常!请检查!')
                        return False
            if pic_num == e_p:
                print('Event与照片数量符合要求,1个event对应%d张照片' % pic_num)
                return True
            else:
                print('Event与照片数量不符合要求,1个event对应%d张照片' % pic_num)
                return False
    
        elif flag == 'check_2_event':          #检查设备连续产生2个event视频覆写情况
            filelist_old = file[0]
            filelist_new = file[1]
            event_old = filelist_old[1]  # 比较文件
            event_new = filelist_new[1]
            n = 0
            for i in range(len(event_new)):
                flag = 0
                for j in event_old:
                    if event_new[i] == j:
                        flag = 1
                        break
                    else:
                        continue
                if flag == 1:
                    pass
                else:
                    if i == len(event_new) - 1 or i == len(event_new) - 2 or i == len(event_new) - 3 or i == len(
                            event_new) - 4:
                        print('第%s个event已新增:' % i, event_new[i])
                        n += 1
                    else:
                        print('中间event文件被覆写,新增异常!请检查!')
                        return False
            if n == 4:
                print('新增Event数量:%d个,满足要求' % n)
                return True
            else:
                print('新增Event数量:%d个,不满足要求' % n)
                return False
    
        elif flag == 'check_3_event':                      #检查设备连续产生3个event视频覆写情况
            filelist_old = file[0]
            filelist_new = file[1]
            event_old = filelist_old[1]  # 比较文件
            event_new = filelist_new[1]
            n = 0
            for i in range(len(event_new)):
                flag = 0
                for j in event_old:
                    if event_new[i] == j:
                        flag = 1
                        break
                    else:
                        continue
                if flag == 1:
                    pass
                else:
                    if i == len(event_new) - 1 or i == len(event_new) - 2 or i == len(event_new) - 3 or i == len(
                            event_new) - 4 or i == len(event_new) - 5 or i == len(event_new) - 6:
                        print('第%s个event已新增:' % i, event_new[i])
                        n += 1
                    else:
                        print('中间event文件被覆写,新增异常!请检查!')
                        return False
            if n == 6:
                print('新增Event数量:%d个,满足要求' % n)
                return True
            else:
                print('新增Event数量:%d个,不满足要求' % n)
                return False
    
        elif flag == 'log':            #检查设备内是否产生log文件
            b = cmd_popen('adb shell find /sdcard/_log/system')
            if b in 'NO':
                return False
            else:
                return True
    
        else:
            return False
    —————————————————————————————— 选择正确的事、再把事做正确 ——————————————————————————————
  • 相关阅读:
    北航2020OO第一单元博客作业
    OO第四单元总结
    OO第三单元总结
    OO第二单元总结
    OO第一单元总结
    北航2020年OO第四单元总结
    北航2020年OO第三单元总结
    北航2020年OO第二单元总结
    北航2020年OO第一单元总结
    面向对象第四单元总结
  • 原文地址:https://www.cnblogs.com/airb/p/14115810.html
Copyright © 2011-2022 走看看