def T_01_scanAllCode_A(product): u'扫码条码并写入MAC-扫码单板、整机条码分配MAC并写入' barCode1 = askForSomething(u'扫描条码', u'请扫描RSDB0单板条码', autoCommit=False) __checkManualFinished(barCode1) barCode3 = askForSomething(u'扫描条码', u'请扫描整机条码', autoCommit=False) while not __checkBarCodeAll(barCode3): barCode3 = askForSomething(u"扫描条码", u"整机条码扫描错误,请重新扫描", autoCommit=False) product.setTestingProductIdCode(barCode3) product.setTestingSuiteBarCode(barCode1) with ServerBusiness(testflow=True) as sb: getMac = sb.getBindingCode(productName=u"RD50C_RSU", idCode=barCode3, bindingCodeName=u"MAC") if getMac is not None and getMac != "": mac = getMac else: mac = serialCode(PARAM["macName"]) if int(mac, 16) > int(PARAM["macMax"], 16): raise AbortTestException(message=u"MAC地址超出范围,没有可分配mac") product.addBindingCode(u"MAC", mac) getMac2 = sb.getBindingCode(productName=u"RD50C_RSU", idCode=barCode3, bindingCodeName=u"MAC2") if getMac2 is not None and getMac2 != "": mac2 = getMac2 else: mac2 = serialCode(PARAM["macName"]) if int(mac2, 16) > int(PARAM["macMax"], 16): raise AbortTestException(message=u"MAC地址超出范围,没有可分配mac") product.addBindingCode(u"MAC2", mac2) for i in range(10): pingResult = pingIPOpen(PARAM["defaultNetOneIp"]) if pingResult == "ok": break time.sleep(5) else: raise TestItemFailException(failWeight=10, message=u"连接失败有可能是网口通信问题") macoffset = 0x46 myWriteMac(macoffset, mac) macstrRead = myReadMac(macoffset) macoffset2 = 0x40 myWriteMac(macoffset2, mac2) macstrRead2 = myReadMac(macoffset2) if macstrRead.upper() == mac and macstrRead2.upper() == mac2: return { u"单板条码": barCode1, u"整机条码": barCode3, u"MAC1地址": mac, u"MAC2地址": mac2 } else: TestItemFailException(failWeight=10, message=u"写入与分配mac不一致,写入mac失败")
def T_13_setMac_A(product): u"设置MAC地址-设置初始MAC地址" global CURRENT_TESTING_READER, TC ret = CURRENT_TESTING_READER.readMacAddr() nowMac = binascii.hexlify(ret) with ServerBusiness(testflow=True) as sb: shouldMac = sb.getBindingCode(productName=u"KC-RD40-M", idCode=product.getTestingProductIdCode(), bindingCodeName=u"MAC") if shouldMac != "": if shouldMac == nowMac: uiLog(u"已分配过MAC地址") return {u"MAC地址": nowMac} else: uiLog(u"重写MAC地址:" + shouldMac) mac_addr = binascii.unhexlify(shouldMac) CURRENT_TESTING_READER.setMacAddr(mac_addr) ret = CURRENT_TESTING_READER.readMacAddr() TC.assertEqual(ret, mac_addr) product.addBindingCode(u"MAC", shouldMac) return {u"MAC地址": shouldMac} else: mac = serialCode("rd40.mac") uiLog(u"分配新的MAC地址:" + mac) mac_addr = binascii.unhexlify(mac) CURRENT_TESTING_READER.setMacAddr(mac_addr) ret = CURRENT_TESTING_READER.readMacAddr() TC.assertEqual(ret, mac_addr) product.addBindingCode(u"MAC", mac) return {u"MAC地址": mac}
def T_03_allocMac_A(product): u"分配MAC地址-读取MAC地址,如果不存在,分配新的,并写入出厂信息" sc = __getObuSerial(product.productSlot) r = sc.sendAndGet("D-ReadFlashPara 0x02 0x00 0x10").strip() if not r.startswith("D-ReadFlashOK"): raise AbortTestException(message=u"读取OBU的MAC地址失败") obuFlash = util.cmdFormatToHexStr(r[14:]) obuid = obuFlash[8:16] uiLog(u"读取到OBUFlash:" + obuFlash) initFactoryInfo = obuFlash[16:] # initFactoryInfo = SP("gs11.test.initFactoryInfo","0109200100010000",paramType=str) #01(显示模式)09 20 01 00(软件版本号)01 00 00(硬件版本号); if not obuid.startswith(PARAM["macPrefix"]): obuid = serialCode("gs11sh.mac") #分配新的MAC地址(obuid) product.setTestingProductIdCode(obuid) uiLog(u"分配新的OBUID:%s" % obuid) else: uiLog(u"OBUID已存在,原标识:%s" % obuid) product.setTestingProductIdCode(obuid) targetFlash = "55555555" + obuid.lower() + initFactoryInfo r = sc.sendAndGet(request="D-WriteFlashPara 0x11 0x00 " + util.hexStrToSerialCmdFormat(targetFlash)) if not r.startswith("D-WriteFlashOK"): raise AbortTestException(message=u"写入OBUID及出厂信息失败") r = sc.sendAndGet("D-ReadFlashPara 0x02 0x00 0x10").strip() if not r.startswith("D-ReadFlashOK"): raise AbortTestException(message=u"读取OBU的MAC地址失败") obuFlash = util.cmdFormatToHexStr(r[14:]) if obuFlash != targetFlash: raise AbortTestException(message=u"写入OBU灵敏度信息失败") return {"OBUID": obuid, u"出厂信息": initFactoryInfo}
def T_02_updateMac_A(product): u'''更新MAC地址-获取新的MAC地址并BSL写入''' manulCheck(u"操作提示", u"请连接整机和工装板的U口线,然后点击确定", "ok") if SESSION["testor"] != u"单机": obuid = serialCode("mac") else: obuid = "" while re.match("^([0-9]|[A-F]|[a-f]){8}$", obuid) is None: obuid = askForSomething(u"MAC地址", u"请输入MAC地址", autoCommit=False, defaultValue="24") uiLog(u"分配测试产品标识:" + obuid) sc = __askForPlateDeviceCom() product.setTestingProductIdCode(obuid) try: sc.startBslWriting(passwordFile) uiLog(u"开始写入MAC地址") sc.save_obu_id(__toBytesarray(obuid)) finally: sc.finishBslWritten() time.sleep(1) sc.clearSerialBuffer()
def T_02_allotCpcId_A(product): u"分配CPCID-分配新的CPCID" # 检查MAC是否已经对应过CPCID with ServerBusiness() as sb: currentCpcIdOnServer = sb.getBindingCode(productName=u"CPC卡片",idCode=product.param["mac"],bindingCodeName=u"CPCID") if currentCpcIdOnServer is not None and currentCpcIdOnServer!="": if currentCpcIdOnServer == product.param["currentCpcId"]: # CPCID完全相同,属于复测,直接判为成功即可 product.param["targetCpcId"] = str(currentCpcIdOnServer) product.param["retest"] = True else: uiLog(u"当前卡片的CPCID:%s,与数据库中记录不符,重新刷写成:%s"%(product.param["currentCpcId"],currentCpcIdOnServer)) product.param["retest"] = False product.param["targetCpcId"] = str(currentCpcIdOnServer) else: uiLog(u"卡片没有刷写过CPCID,分配新的CPCID") # 判断是补卡流程,还是新生产流程。看cpcIdSerialName参数,如果是文件名,说明是补卡;否则是正常ID if "\\" not in PARAM["cpcIdSerialName"]: #从服务端分配,正常生产 targetCpcId = serialCode(PARAM["cpcIdSerialName"]) if targetCpcId > PARAM["endCpcId"]: # 产量已超 retrieveSerialCode(PARAM["cpcIdSerialName"],targetCpcId ) raise AbortTestException(u"CPCID已超过范围,产量已完成") else: #从补卡文件中获取,补卡 targetCpcId = COMP_SERIAL.fetchCpcSerialFromFile() if targetCpcId == "FF"*8: #补卡完成 raise AbortTestException(u"补卡全部完成,本片忽略") uiLog(u"分配新的CPCID:%s"%targetCpcId) product.param["retest"] = False product.param["targetCpcId"] = str(targetCpcId)
def T_01_initFactorySetting_A(product): u'''出厂信息写入-出厂信息写入(包括MAC地址,唤醒灵敏度参数)''' mac = serialCode("mac") barCode = askForSomething(u"扫描条码", u"请扫描条码", autoCommit=False) product.setTestingSuiteBarCode(barCode) product.setTestingProductIdCode(mac) time.sleep(1) return {"扫描条码结果": barCode, "写入MAC地址": mac}
def __initFactorySetting(product, barCode): '''初始化出厂信息,扫描条码根据自动/手动获取后传入这里''' uiLog(u'单板条码扫描结果:' + barCode) product.setTestingSuiteBarCode(barCode) if SESSION["testor"] != u"单机": #读取旧的MAC地址,如果存在,使用之;否则分配新的 obuid = __readOldMac() if obuid == 'FFFFFFFF' or re.match("^24[0-9|A-F]{6}$", obuid) == None: obuid = serialCode("mac") #分配新的MAC地址(obuid) uiLog(u"分配测试产品标识:" + obuid) else: uiLog(u"单板%s存在旧标识:%s" % (barCode, obuid)) else: obuid = "FFFFFFFF" product.setTestingProductIdCode(obuid) magicWord = "55555555" displayDirect = SP("gs10.initParam.displayDirect", "00", str) #显示方向 softwareVersion = SP("gs10.initParam.softwareVersion", "01200100", str) #软件版本号 hardwareVersion = SP("gs10.initParam.hardwareVersion", "010000", str) #硬件版本号 initWankenSensi_high_grade = SP('gs10.initWanken.high.grade', "03", str) #高灵敏度-grade initWankenSensi_high_level = SP('gs10.initWanken.high.level', "0E", str) #高灵敏度-level initWankenSensi_low_grade = SP('gs10.initWanken.low.grade', "03", str) #低灵敏度-grade initWankenSensi_low_level = SP('gs10.initWanken.low.level', "0E", str) #低灵敏度-level wakeupMode = SP("gs10.initParam.wakeupMode", "04", str) #唤醒模式 amIndex = SP("gs10.initParam.amIndex", "00", str) #AmIndex transPower = SP("gs10.initParam.transPower", "02", str) #发射功率 txFilter = SP("gs10.initParam.txFilter", "06", str) #TxFilter CONFIG_BUILD_INFO = "".join( (magicWord, obuid, displayDirect, softwareVersion, hardwareVersion)) CONFIG_RF_PARA = "".join( (magicWord, initWankenSensi_high_grade, initWankenSensi_high_level, initWankenSensi_low_grade, initWankenSensi_low_level, wakeupMode, amIndex, transPower, txFilter)) sc = __askForPlateDeviceCom() passwordFile = os.path.dirname( os.path.abspath(__file__)) + os.sep + "versions\\obu-vat.txt" try: sc.startBslWriting(passwordFile) uiLog(u"开始写入CONFIG_BUILD_INFO,值:%s" % CONFIG_BUILD_INFO) sc.save_CONFIG_BUILD_INFO(__toBytesarray(CONFIG_BUILD_INFO)) uiLog(u"开始写入CONFIG_RF_PARA,值:%s" % CONFIG_RF_PARA) sc.save_CONFIG_RF_PARA(__toBytesarray(CONFIG_RF_PARA)) finally: sc.finishBslWritten() time.sleep(1) sc.clearSerialBuffer()
def _T_05_carving_A(product): u"卡面镭雕-将CPC ID镭雕到卡面" carvingCode = serialCode("carvingCode") print "5" product.setTestingSuiteBarCode(carvingCode) __getLaserCaving().toCarveCode(carvingCode) try: autoCloseAsynMessage(u"操作提示(提示框会自动关闭)",u"当前镭雕号:%s,请踩下踏板进行镭雕"%carvingCode, lambda:__getLaserCaving().carved() ,TestItemFailException(failWeight = 10,message = u'镭雕机未响应')) except TestItemFailException,e: __getLaserCaving().clearCarveCode() raise e
def performTestThread(): global totalProductCount with ServerBusiness() as sb: while True: startTime = time.time() idCode = serialCode("mac") sb.uploadTestReport(generateMockReport(idCode, 1)) time.sleep(3.5) sb.uploadTestReport(generateMockReport(idCode, 2)) time.sleep(3.5) sb.uploadTestReport(generateMockReport(idCode, 3)) totalProductCount = totalProductCount + 1 time.sleep(3.5) endTime = time.time() print u'完成一个,平均交互耗时:%f秒' % ((endTime - startTime - 10.5) / 3)
def T_01_inventoryAndGetSys_A(product): u"卡片唤醒-唤醒卡片并读取CPC-ID等系统信息,并验证MAC" rsu = __getRsu() rsu.cpcHfActive() cpcSysInfo = rsu.cpcHFReadSysInfo() cpcId = cpcSysInfo["cpcId"] mac = rsu.cpcReadMac() uiLog(u"读取到MAC:%s,当前(临时)CPCID:%s" % (mac, cpcId)) if mac.upper().startswith(PARAM["macPrefix"]): #MAC前缀正确,不需要补写MAC product.param["retest"] = True product.setTestingProductIdCode(mac) product.param["targetMac"] = mac else: product.param["retest"] = False product.param["targetMac"] = serialCode("cpc.mac") uiLog(u"分配新MAC:%s" % product.param["targetMac"]) product.param["cpcId"] = cpcId return cpcSysInfo
def T_06_setDeviceSn_A(product): u"分配设备编号-自动分配全局唯一的设备编号" global CURRENT_TESTING_READER, TC ret = CURRENT_TESTING_READER.readDeviceSn() if not ret.startswith("FFFF"): uiLog(u"设备编号已分配:" + ret) product.setTestingProductIdCode(ret) return {u"设备编号": ret} else: deviceSn = serialCode("rd40.deviceSn") uiLog(u"分配新的设备编号:" + deviceSn) CURRENT_TESTING_READER.setDeviceSn(deviceSn) ret = CURRENT_TESTING_READER.readDeviceSn() TC.assertEqual(ret, deviceSn, u"DeviceSN读取验证失败") uiLog(u"设备编号写入DeviceSn成功") CURRENT_TESTING_READER.setAppDeviceId(deviceSn) ret = CURRENT_TESTING_READER.readAppDeviceId() TC.assertEqual(ret, deviceSn, u"AppDeviceId读取验证失败") uiLog(u"设备编号写入AppDeviceId成功") product.setTestingProductIdCode(ret) return {u"设备编号": ret}
def T_01_scanCode_A(product): u'扫码条码-扫描条码' barCode1 = askForSomething(u'扫描条码', u'请扫描RSDB5数字单板条码', autoCommit=False) __checkRSDB5Finished(barCode1) barCode2 = askForSomething(u'扫描条码', u'请扫描RSRB4射频单板条码', autoCommit=False) __checkRSRB4Finished(barCode2) barCode3 = askForSomething(u'扫描条码', u'请扫描整机条码', autoCommit=False) while not __checkBarCode(barCode3): barCode3 = askForSomething(u"扫描条码", u"整机条码扫描错误,请重新扫描", autoCommit=False) product.setTestingProductIdCode(barCode3) product.setTestingSuiteBarCode(barCode1) with ServerBusiness(testflow=True) as sb: getMac = sb.getBindingCode(productName=u"RD52_RSU", idCode=barCode3, bindingCodeName=u"MAC") if getMac is not None and getMac != "": mac = getMac else: mac = serialCode(PARAM["macName"]) if int(mac, 16) > int(PARAM["macMax"], 16): raise AbortTestException(message=u"MAC地址超出范围,没有可分配mac") product.addBindingCode(u"MAC", mac) # mac = serialCode(PARAM["macName"]) # if int(mac, 16) > int(PARAM["macMax"], 16): # raise AbortTestException(message=u"MAC地址超出范围,没有可分配mac") # product.addBindingCode(u"MAC", mac) return { u"RSDB5数字单板条码": barCode1, u"RSRB4射频单板条码": barCode2, u'整机条码': barCode3, u"MAC地址": mac }
def T_04_initDeviceId_A(product): u'''分配设备标识-分配唯一的设备标识并写入设备''' global usbTestor try: usbTestor.setUp() oriDeviceSn = testCases.GS25.readDeviceSn()[0] deviceSn = None if oriDeviceSn == "ffffffffff": if SESSION["testor"] == u"单机": deviceSn = "0000000001" uiLog(u"因单机运行而无法分配设备序列号,写入测试值:" + deviceSn) else: deviceSn = serialCode("gs25DeviceSn") #分配新标识 usbTestor.test_writeDeviceSn(deviceSn) else: uiLog(u"存在原序列号:" + oriDeviceSn) deviceSn = oriDeviceSn product.setTestingProductIdCode(deviceSn) return {u"设备序列号": deviceSn} except Exception, e: print e raise TestItemFailException(failWeight=10, message=u"USB通信失败 " + str(e))
def T_04_allotMac_A(product): u"分配MAC地址-从服务统一分配MAC" # 读MAC,检查之 board = __downloadBoard() info40000, info40040, info40080 = board.readInfo(product.productSlot) board.activeEsam(product.productSlot) targetMac = board.readMacFromEsam(product.productSlot, chooseDf01=True) mac = None # 检查MAC是否已经写过,如果写过,就不用分配了 if info40000[:8] == "55555555": mac = info40000[8:16] if mac.upper().startswith( PARAM["macPrefix"]) and targetMac.upper() == mac.upper(): uiLog(u"产品已测试过,原MAC:%s" % mac) product.param["retest"] = True else: mac = None product.param["retest"] = False if mac is None: mac = serialCode("cpc.mac") uiLog(u"new mac:%s" % mac) if mac > PARAM["endMac"]: global shouldNotRun shouldNotRun = True retrieveSerialCode("cpc.mac", mac) raise AbortTestException(u"MAC已超过范围,产量已完成") uiLog(u"分配新MAC:%s" % mac) product.param["retest"] = False mac = mac.upper() product.param["mac"] = mac product.setTestingProductIdCode(mac) product.addBindingCode("MAC", mac) return {"mac": mac}
def T_03_initFactorySetting_A(product): u'''出厂信息写入-写入MAC地址,唤醒灵敏度参数等,通过ICP方式写入并自动判断信息一致''' #读取旧的信息内容 magicWord = "55555555" try: uiLog(u"切换至NuLink模式") __getIoBoard().switchToNuLink() nul = __getNuLink() infos = None try: infos = nul.readInfo() obuid = infos[8:16] superUiLog(u"单板信息区内容:" + infos) if infos.startswith( magicWord) and obuid != "FFFFFFFF": #有魔术字,说明出场信息已经写过了 uiLog(u"出厂信息已写入,原标识:%s" % obuid) product.setTestingProductIdCode(obuid) uiLog(u"复位芯片...") nul.resetChip() return { "OBUID": obuid, "原出厂信息区": infos[:36] + "," + infos[128:200] } except TestItemFailException, e: #如果读出失败,那么也判定为需要写 uiLog(u"区域读取失败,开始写入出厂信息") obuid = serialCode("mac") #分配新的MAC地址(obuid) displayDirect = SP("gs11.initParam.displayDirect", "00", str) #显示方向 softwareVerionFile = SP("gs11.vatVersion.filename", "GS11-VAT-09.00.00.version", str) softwareVersion = "".join( softwareVerionFile.split("-")[2].split(".")[:3]) + "00" hardwareVersion = SP("gs11.initParam.hardwareVersion", "010000", str) #硬件版本号 initWankenSensi_high_grade = SP('gs11.initWanken.high.grade', "03", str) #高灵敏度-grade initWankenSensi_high_level = SP('gs11.initWanken.high.level', "0E", str) #高灵敏度-level initWankenSensi_low_grade = SP('gs11.initWanken.low.grade', "03", str) #低灵敏度-grade initWankenSensi_low_level = SP('gs11.initWanken.low.level', "0E", str) #低灵敏度-level wakeupMode = SP("gs11.initParam.wakeupMode", "04", str) #唤醒模式 amIndex = SP("gs11.initParam.amIndex", "00", str) #AmIndex transPower = SP("gs11.initParam.transPower", "02", str) #发射功率 txFilter = SP("gs11.initParam.txFilter", "06", str) #TxFilter sensitivity = SP("gs11.initParam.sensitivity", "00", str) #使用灵敏度 CONFIG_BUILD_INFO = "".join((magicWord, obuid, displayDirect, softwareVersion, hardwareVersion)) CONFIG_RF_PARA = "".join( (magicWord, initWankenSensi_high_grade, initWankenSensi_high_level, initWankenSensi_low_grade, initWankenSensi_low_level, wakeupMode, amIndex, transPower, txFilter, sensitivity)) uiLog(u"初始化config区配置") nul.initCfg() nul.writeToInfo(CONFIG_BUILD_INFO, CONFIG_RF_PARA) uiLog(u"分配新的OBUID:%s" % obuid) product.setTestingProductIdCode(obuid) uiLog(u"复位芯片...") nul.resetChip() return { "OBUID": obuid, u"初始信息区": CONFIG_BUILD_INFO + "," + CONFIG_RF_PARA }