def run(): global total_num, result r = read_xls_news.Read_xls(excel_path) w = r.copy_book() r.save_write(w, result_path) devices = adb_devices(pattern) if devices == False: raise ("a db异常,未识别到设备") else: for i in range(100): Log.info("开始第%s条测试" % (i + 1)) sessionId = wakeup() if sessionId is None: Log.error("連續三次未喚醒!") else: into_time = time.strftime('%Y-%m-%d-%H-%M-%S') Log.info("唤醒成功且进入全双工:%s" % into_time) info = noise_info() out_time = time.strftime('%Y-%m-%d-%H-%M-%S') nlg_asr = re.findall(nlg_asr_pattern, info) total_num += len(nlg_asr) result = "当前累积ASR噪音误识别打断次数为:%s" % total_num Log.info("第%s轮,测试结果:误识别%s次,误识别结果:%s" % (i + 1, len(nlg_asr), nlg_asr)) Log.info(result) resul_list = [i, sessionId, into_time, out_time, len(nlg_asr)] + nlg_asr rr = read_xls_news.Read_xls(result_path) rw = rr.copy_book() rr.write_linedata(rw, i + 1, resul_list) rr.save_write(rw, result_path) return result
def run(): global test_num, asr_succese_num, total_num, asrANDbreak_succese_num, break_succese_num r = read_xls_news.Read_xls(excel_path) w = r.copy_book() r.save_write(w, result_path) for i in range(100): Log.info("开始第%s条测试" % (i + 1)) sessionId = wakeup() if sessionId is None: Log.error("連續三次未喚醒!") else: into_time = time.strftime('%Y-%m-%d-%H-%M-%S') Log.info("唤醒成功且进入全双工:%s" % into_time) log_info = s.recvcmd(35) out_time = time.strftime('%Y-%m-%d-%H-%M-%S') nlg_asr = re.findall(asr_pattern, log_info) total_num += len(nlg_asr) test_result = "当前累积ASR噪音误识别打断次数为:%s" % total_num Log.info("第%s轮,测试结果:误识别%s次,误识别结果:%s" % (i + 1, len(nlg_asr), nlg_asr)) Log.info(test_result) resul_list = [i, into_time, out_time, len(nlg_asr)] + nlg_asr rr = read_xls_news.Read_xls(result_path) rw = rr.copy_book() rr.write_linedata(rw, i + 1, resul_list) rr.save_write(rw, result_path)
def run(): global test_num, asr_succese_num, total_num bookname = '002M30_36' booknames = [bookname] test_data = get_data(excel_path, booknames) for i in range(len(test_data)): Log.info("开始第%s条测试:%s" % (i + 1, test_data[i][:2])) except_value = test_data[i][1] wav_path = cmd_path + "/002M30_36_" + test_data[i][0] + ".wav" # wav 路径 test_result = "Fail" iswakeup = wakeup() if iswakeup is None: Log.error("連續三次未喚醒!") else: test_num += 1 Log.info("唤醒成功,即将进入播放音频进行ASR测试") rr = read_xls_news.Read_xls(result_path) rw = rr.copy_book() Log.info("开始播放测试音频【%s】" % wav_path) mypyaudio.play_audio(wav_path) asr = s.recv_data(pattern_list=[asr_pattern], checktime=5)[0] if simplify_asr(except_value) == simplify_asr(asr): test_result = "Pass" asr_succese_num += 1 asr_succese_rate = "%.2f%%" % (asr_succese_num / test_num * 100) Log.info("用例【%s】ASR识别结果:%s" % (test_data[i][:2], asr)) Log.info("用例【%s】ASR测试结果:%s" % (test_data[i][:2], test_result)) Log.info( "当前一共执行测试【%s次】,正常执行【%s】,其中ASR识别正确【%s次】,识别率为:【%s】" % ( i + 1, test_num, asr_succese_num, asr_succese_rate)) rr.write_linedata(rw, i + 2, [asr, test_result], sheetname=bookname, col=3) rr.write_onlydata(rw, 0, 1, asr_succese_rate, sheetname=bookname) rr.save_write(rw, result_path)
def t2(baudrate, serialname, product, logpath): global test_num, asr_succese_num, total_num Log = log.Logger(logpath) Log.info("=======================%s半双工链路ASR识别率测试========================" % product) # s = MySerial(buatrate, Log, serialname) print(1) s = serial.Serial(serialname, baudrate, timeout=60) print(2) # s = recvcmd(baudrate, Log, serialname, timeout=None) now = time.strftime('%Y-%m-%d-%H-%M-%S') result_path = os.path.join( Project_path.test_result_path, '%s-半双工ASRm45度噪音识别率测试--result%s.xls' % (product, now)) bookname = '015' booknames = [bookname] print(1) test_data = get_data(excel_path, result_path, booknames=booknames) for i in range(len(test_data)): Log.info("开始第%s条测试:%s" % (i + 1, test_data[i][:2])) except_value = test_data[i][1] wav_path = os.path.join(cmd_path, test_data[i][0] + ".wav") # wav 路径 test_result = "Fail" iswakeup = wakeup(s, Log) if not iswakeup: Log.error("連續三次未喚醒!") else: test_num += 1 Log.info("唤醒成功,即将进入播放音频进行ASR测试") rr = read_xls_news.Read_xls(result_path) rw = rr.copy_book() Log.info("开始播放测试音频【%s】" % wav_path) mypyaudio.play_audio(wav_path) asr_log = recvcmd(s, Log, 10) asr_result = re.findall(asr_mid_pattern, asr_log) if asr_result: asr = asr_result[0] mid = asr_result[1] if except_value == asr: test_result = "Pass" asr_succese_num += 1 else: asr = "False" mid = "False" asr_succese_rate = "%.2f%%" % (asr_succese_num / test_num * 100) Log.info("[%s]:用例【%s】ASR识别结果:%s" % (product, test_data[i][:2], asr)) Log.info("[%s]:用例【%s】ASR测试结果:%s" % (product, test_data[i][:2], test_result)) Log.info( "[%s]当前一共执行测试【%s次】,正常执行【%s】,其中ASR识别正确【%s次】,识别率为:【%s】" % (product, i + 1, test_num, asr_succese_num, asr_succese_rate)) rr.write_linedata(rw, i + 2, [asr, test_result, mid], sheetname=bookname, col=3) rr.write_onlydata(rw, 0, 1, asr_succese_rate, sheetname=bookname) rr.save_write(rw, result_path)
def setup(self): global total_num total_num+=1 iswakeup=wakeup() if iswakeup != None: self.Log.info("唤醒成功,即将进入播放音频进行ASR测试") self.rr = read_xls_news.Read_xls(result_path) self.rw = self.rr.copy_book() else: raise ("連續三次未喚醒!")
def setup(self): global total_num total_num+=1 isfullduplex = in_fullduplex(wakeup()) if isfullduplex == True: self.Log.info("已进入全双工,即将进行ASR测试") self.rr = read_xls_news.Read_xls(result_path) self.rw = self.rr.copy_book() else: raise ("连续三次未进入全双工,退出当前用例!")
def run(): global test_num, asr_succese_num, total_num devices = adb_devices(pattern) if devices == False: raise ("a db异常,未识别到设备") else: bookname = '002M30_36' booknames = [bookname] test_data = get_data(excel_path, booknames) for i in range(len(test_data)): Log.info("开始第%s条测试:%s" % (i + 1, test_data[i][:2])) except_value = test_data[i][1] wav_path = cmd_path + "/002M30_36_" + test_data[i][ 0] + ".wav" # wav 路径 result = "Fail" mid = '' sessionId = '' iswakeup = wakeup() if iswakeup is None: Log.error("連續三次未喚醒!") else: test_num += 1 Log.info("唤醒成功,即将进入播放音频进行ASR测试") rr = read_xls_news.Read_xls(result_path) rw = rr.copy_book() Log.info("开始播放测试音频【%s】" % wav_path) try: winsound.PlaySound(wav_path, winsound.SND_FILENAME) except Exception as e: Log.error(e) mypyaudio.play_audio(wakeup_path) asr_result = adb_info(asr_pattern) if asr_result != False: sessionId = adb_info(sessionId_patteern) mid = adb_info(mid_pattern) if asr_result == except_value: result = "Pass" asr_succese_num += 1 asr_succese_rate = "%.2f%%" % (asr_succese_num / test_num * 100) Log.info("用例【%s】ASR识别结果:%s" % (test_data[i][:2], asr_result)) Log.info("用例【%s】ASR测试结果:%s" % (test_data[i][:2], result)) Log.info("当前一共执行测试【%s次】,正常执行【%s】,其中ASR识别正确【%s次】,识别率为:【%s】" % (i + 1, test_num, asr_succese_num, asr_succese_rate)) rr.write_linedata(rw, i + 2, [asr_result, result, mid, sessionId], sheetname=bookname, col=3) rr.write_onlydata(rw, 0, 1, asr_succese_rate, sheetname=bookname) rr.save_write(rw, result_path)
def get_data(path, booknames=None): r = read_xls_news.Read_xls(path) if booknames is None: booknames = r.get_sheet_names() test_data = [] for i in range(len(booknames)): data = r.read_data(booknames[i], start_line=3) test_data += data i += 1 w = r.copy_book() r.save_write(w, result_path) return test_data
def test_asr(self, tdata): global test_num, asr_succese_num, total_num total_num += 1 iswakeup = wakeup() if iswakeup != None: self.Log.info("唤醒成功,即将进入播放音频进行ASR测试") self.rr = read_xls_news.Read_xls(result_path) self.rw = self.rr.copy_book() else: raise ("連續三次未喚醒!") self.Log.info(tdata) testid = int(tdata[0]) - 10000 except_value = tdata[1] wav_path = cmd_path + "/002M30_36_" + tdata[0] + ".wav" # wav 路径 result = "Fail" self.Log.info("开始播放测试音频【%s】" % wav_path) winsound.PlaySound(wav_path, winsound.SND_FILENAME) pattern = "asr\":\\t\"(.*)\"," time.sleep(0.5) asr_result = adb_info(pattern) try: assert asr_result == except_value except Exception as e: result = "Fail" raise e else: result = "Pass" asr_succese_num += 1 finally: test_num += 1 asr_succese_rate = "%.2f%%" % (asr_succese_num / test_num * 100) self.Log.info("用例【%s】ASR识别结果:%s" % (tdata[:2], asr_result)) self.Log.info("用例【%s】ASR测试结果:%s" % (tdata[:2], result)) self.Log.info( "当前一共执行测试【%s次】,正常执行【%s】,其中ASR识别正确【%s次】,识别率为:【%s】" % (testid, total_num, asr_succese_num, asr_succese_rate)) self.rr.write_linedata(self.rw, testid + 1, [asr_result, result], sheetname="002M30_36", col=3) self.rr.write_onlydata(self.rw, 0, 1, asr_succese_rate, sheetname="002M30_36") self.rr.save_write(self.rw, result_path)
def wakeup(): if (os.path.exists(wakeup_path)): for i in range(3): winsound.PlaySound(wakeup_path, winsound.SND_FILENAME) result = adb_info(wakeup_pattern) if result == False: Log.error("连续%s次未唤醒" % (i + 1)) i += 1 else: return True else: raise ("唤醒的音频文件不存在..." + wakeup_path) r = read_xls_news.Read_xls(excel_path) # booknames=r.get_sheet_names() booknames = ['002M30_36'] data = [] for i in range(len(booknames)): tdata = r.read_data(booknames[i], start_line=3) data += tdata # print(data) i += 1 w = r.copy_book() r.save_write(w, result_path) total_num = 0 asr_succese_num = 0 test_num = 0
def run(): global test_num, asr_succese_num, total_num, break_succese_num, asrANDbreak_succese_num, result_txt bookname = '002M30_36' booknames = [bookname] test_data = get_data(excel_path, booknames) devices = adb_devices(pattern) if devices == False: raise ("a db异常,未识别到设备") else: for i in range(400): Log.info("开始第%s条测试:%s" % (i + 1, test_data[i][:2])) except_value = test_data[i][1] wav_path = cmd_path + "/002M30_36_" + test_data[i][0] + ".wav" # wav 路径 sessionId = wakeup() if sessionId is None: Log.error("連續三次未喚醒!") else: Log.info("唤醒成功且进入全双工,即将进入播放前置音频") if break_pre(sessionId): Log.info("即将播放音频【%s】" % wav_path) test_num += 1 rr = read_xls_news.Read_xls(result_path) rw = rr.copy_book() pattern_list = [asr_pattern, mid_pattern, endTTS_pattern, startTTS_pattern] # 获取测试音频时长 with contextlib.closing(wave.open(wav_path, 'r')) as f: wav_length = f.getnframes() / float(f.getframerate()) result_list = main2(pattern_list, wav_path, timeout=wav_length + 5) asr_result = result_list[0] if asr_result == except_value: asr_succese_num += 1 if asr_result != False: if result_list[2] != False and result_list[3] != False: result = "Pass" break_succese_num += 1 if asr_result == except_value: asrANDbreak_succese_num += 1 else: result = "Fail" else: result = "Fail" mid = result_list[1] asr_succese_rate = "%.2f%%" % (asr_succese_num / test_num * 100) # 打断召回率 break_recall_rate = "%.2f%%" % (asrANDbreak_succese_num / test_num * 100) # 打断精准率 if break_succese_num > 0: break_accurate_rate = "%.2f%%" % (asrANDbreak_succese_num / break_succese_num * 100) else: break_accurate_rate = 0 Log.info("用例【%s】ASR识别结果:%s" % (test_data[i][:2], asr_result)) Log.info("用例【%s】打断测试结果:%s" % (test_data[i][:2], result)) result_txt = "当前一共执行测试【%s次】,正常执行【%s】,其中ASR识别正确【%s次】,打断成功【%s次】,识别率为:【%s】,打断精准率为:【%s】,打断召回率为:【%s】" % ( i + 1, test_num, asr_succese_num, break_succese_num, asr_succese_rate, break_accurate_rate, break_recall_rate) Log.info(result_txt) rr.write_linedata(rw, i + 2, [asr_result, result, mid, sessionId], sheetname=bookname, col=2) rr.write_linedata(rw, 0, ["asr_succese_rate", asr_succese_rate, "break_accurate_rate", break_accurate_rate, "break_recall_rate", break_recall_rate], sheetname=bookname) rr.save_write(rw, result_path)
def run(): global test_num, asr_succese_num, total_num, asrANDbreak_succese_num, break_succese_num bookname = '002M30_36' booknames = [bookname] test_data = get_data(excel_path, booknames) for i in range(len(test_data)): Log.info("开始第%s条测试:%s" % (i + 1, test_data[i][:2])) except_value = test_data[i][1] wav_path = cmd_path + "/002M30_36_" + test_data[i][0] + ".wav" # wav 路径 mid = wakeup() if mid is None: Log.error("連續三次未喚醒!") else: Log.info("唤醒成功且进入全双工,即将进入播放前置音频") if break_pre(): Log.info("即将播放音频【%s】" % wav_path) mypyaudio.play_audio(wav_path) test_num += 1 rr = read_xls_news.Read_xls(result_path) rw = rr.copy_book() pattern_list = [asr_pattern, endTTS_pattern, startTTS_pattern] result_list = s.recv_data(pattern_list=pattern_list, checktime=7) asr = result_list[0] asr_result = "Fail" break_result = "Fail" if asr: if result_list[1] and result_list[2]: break_result = "Pass" break_succese_num += 1 if simplify_asr(except_value) == simplify_asr(asr): asr_result = "Pass" asr_succese_num += 1 asrANDbreak_succese_num += 1 asr_succese_rate = "%.2f%%" % (asr_succese_num / test_num * 100) # 打断召回率 break_recall_rate = "%.2f%%" % (asrANDbreak_succese_num / test_num * 100) # 打断精准率 if break_succese_num > 0: break_accurate_rate = "%.2f%%" % (asrANDbreak_succese_num / break_succese_num * 100) else: break_accurate_rate = 0 Log.info("用例【%s】ASR识别结果:%s" % (test_data[i][:2], asr)) Log.info("用例【%s】打断测试结果:%s" % (test_data[i][:2], break_result)) result_txt = "当前一共执行测试【%s次】,正常执行【%s】,其中ASR识别正确【%s次】,打断成功【%s次】,识别率为:【%s】,打断精准率为:【%s】,打断召回率为:【%s】" % ( i + 1, test_num, asr_succese_num, break_succese_num, asr_succese_rate, break_accurate_rate, break_recall_rate) Log.info(result_txt) rr.write_linedata(rw, 1, ["asr", "asr_result", "break_result", "mid"], sheetname=bookname, col=2) rr.write_linedata(rw, i + 2, [asr, asr_result, break_result, mid], sheetname=bookname, col=2) rr.write_linedata(rw, 0, [ "asr_succese_rate", asr_succese_rate, "break_accurate_rate", break_accurate_rate, "break_recall_rate", break_recall_rate ], sheetname=bookname) rr.save_write(rw, result_path)
# coding:utf-8 # 噪音误识别测试 import subprocess, time, re, os, winsound, pytest, datetime from Common import log, read_xls_news testdata_path = 'E:\ws\\test_date\FalseRecognition.xls' # 映射关系表,命令词 result_path = "E:/ws/test_result/result.xlsx" wakeup_path = "E:/ws/test_audio/002M30_36_010003.wav" # #唤醒文件:你好小美的音频文件 pre_path = "E:\ws\\002M30_36\天气预报.wav" # 前置指令,进入全双工用 re_expect = "广州今天天气怎么样" cmd_path = "E:/ws/002M30_36/" r = read_xls_news.Read_xls(result_path) booknames = r.get_sheet_names() data = [] for i in range(len(booknames)): tdata = r.read_data(booknames[i], start_line=2) data += tdata i += 1 # print(data) cmd = "adb shell logread -f" p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) pattern = "\n(.*) device" wakeup_pattern = "ev(.*)wake up"