def setUp(self): self.dict = global_config._global_dict # 全局变量字典 self.moduleName = "报销单审批流" # 当前流程名称 global_config.set_value("MODULENAME",self.moduleName) self.url = Environment_Select[self.dict.get("ENVIRONMENT")] # 环境基础地址 self.caseName = None # 被测案例的案例名 self.myRow = global_config.get_value('TESTROW') # 调用数据行 self.result = None # 当前案例响应报文 self.testResult = None # 当前案例执行状态(在最后一个案例中还作为流程执行状态) self.terminateProcess = makeProcessData("#流程开关") # 案例执行开关 if self.terminateProcess == "": for (k,v) in self.dict.items(): if k != "TESTROW" and k != "TESTLOOPTIME": print("🔼 全局变量 %s 的值为: %s" %(k,v))
def getDataSheet(self): dataFileDirPath = os.path.dirname( os.path.abspath(__file__)) + u"\\interface" files = os.listdir(dataFileDirPath) for fileName in files: if fileName.find("销售合同新增") > 0: self.dataSheetName = "数据表-销售合同新增" break elif fileName.find("采购合同新增") > 0: self.dataSheetName = "数据表-采购合同新增" break elif fileName.find("上架") > 0 or fileName.find("下架") > 0: if fileName.find("并发上架") > 0: self.dataSheetName = "数据表-并发上架" break else: self.dataSheetName = "数据表-上下架" break elif fileName.find("库存调整") > 0: self.dataSheetName = "数据表-库存调整" break elif fileName.find("报销单") > 0: if fileName.find("报销单新增") > 0: self.dataSheetName = "数据表-报销单新增" break elif fileName.find("报销单标记") > 0: self.dataSheetName = "数据表-报销单标记" break elif fileName.find("审批流处理") > 0: self.dataSheetName = "数据表-审批流处理" break if self.dataSheetName: self.setGlobalVar("DATASHEETNAME", self.dataSheetName) if global_config.get_value("TESTLOOPTIME") == 1: print("◾ 遍历数据表:%s" % self.dataSheetName) else: print("⚡ 请检查 案例文件/excel文件数据表sheet/框架run_tests.py 同步情况!") os._exit(0)
def test01_box_uptray(self): ''' 登陆500环境PDA后,扫码进行箱子上托盘 ''' # **************************** 案例公共信息初始化 **************************** self.caseName = (lambda: sys._getframe(1).f_code.co_name)() global_config.set_value("CASENAME", self.caseName) login_url = self.url + getInterfaceData("登陆接口") base_url = self.url + getInterfaceData("调用接口") # 与库表中数据主键重复情况均需考虑是否用初始化 if getInterfaceData("是否数据库初始化") == "是": DB().delete(tableName, deleteData) try: # 确定并发流程数 multiAccount = eval(makeJsonData("并发流程数")) token = get_token(login_url, makeJsonData("经办登录名"), makeJsonData("登陆密码")) errAccount = 0 start = time.time() one_work_num = 1 # pool = multiprocessing.Pool(4) pool = threadpool.ThreadPool(10) for i in range(multiAccount): multiRow = global_config.get_value("TESTROW") + i # myProcess = threading.Thread(target=box_uptray,args=(login_url,base_url,multiRow,token)) requests = threadpool.makeRequests( box_uptray(login_url, base_url, multiRow, token), (login_url, base_url, multiRow, token)) [pool.putRequest(req) for req in requests] pool.wait() # pool.apply_async(box_uptray(login_url,base_url,multiRow,token)) # pool.close() # pool.join() # coroutine = run_more(login_url,base_url,token) # tasks = [ # asyncio.ensure_future(coroutine), # ] # loop2 = asyncio.get_event_loop() # loop2.run_until_complete(asyncio.wait(tasks)) # 主线程中等待所有子线程退出 end = time.time() for i in range(multiAccount): multiRow = global_config.get_value("TESTROW") + i if makeProcessData("#流程开关", multiRow=multiRow).find("报错") != -1: errAccount += 1 print("第 %d 次进程中累计报错数为: %d" % (i + 1, errAccount)) print( "========================================================================" ) print("接口性能测试开始时间:", time.asctime(time.localtime(start))) print("接口性能测试结束时间:", time.asctime(time.localtime(end))) print("接口地址:", base_url) print("接口类型:", "post") print("线程数:", multiAccount) print("每个线程循环次数:", 1) print("每次请求时间间隔:", 0) print("总请求数:", multiAccount * one_work_num) # print("错误请求数:", len(error)) print("总耗时(秒):", end - start) print("每次请求耗时(秒):", (end - start) / (multiAccount * one_work_num)) print("每秒承载请求数(TPS):", (multiAccount * one_work_num) / (end - start)) print("平均响应时间(毫秒):", CT.thread_response_avg()) print( "========================================================================" ) # **************************** 常规部分 **************************** assert errAccount == 0, \ "😭 箱子入托盘中,\n共需处理 '%s' 个流程, 有 '%d' 个失败!" \ %(multiAccount,errAccount) print("😭 箱子入托盘中,\n共需处理 '%s' 个流程, 有 '%d' 个失败!" \ %(multiAccount,errAccount)) except AssertionError as e: self.testResult = "失败" raise AssertionError(e) except Exception as e: self.testResult = "失败" raise e finally: if errAccount == 0: self.testResult = "成功" # 在excel中写值脚本不可写入try/except,否则html报告中无法区别体现“失败”和“异常” global_config.set_value("TESTRESULT", self.testResult) self.terminateProcess = True writeTextResult(myRow=self.myRow)
def box_uptray(login_url, base_url, multiRow, token): '''箱子上托盘主流程 :param loopTime: 并发数量 :param login_url: 登陆接口地址 :param base_url: 上架接口地址 :return: ''' # **************************** 登陆部分 **************************** # username = makeProcessData("经办登录名",multiRow=multiRow) # password = makeProcessData("登陆密码",multiRow=multiRow) # # token = get_token(login_url,username,password) # **************************** 交易部分 **************************** header = \ { "Authorization": "Bearer " + token, "Content-Type": "application/json" } params = \ { "box_codes": [], "tray": makeProcessData("托盘",multiRow=multiRow) } # 用于迭代添加多个箱号数据 for i in range(1, 100): if i < 10: varNum = "0%s" % i else: varNum = str(i) varName = "箱号-%s" % varNum varValue = makeProcessData(varName, multiRow=multiRow) if varValue != "" and varValue is not None \ and varValue != "": params["box_codes"].append(varValue) else: break params = json.dumps(params).replace("'", "\"") result = myRequest(base_url, headers=header, data=params) # **************************** 校验部分 **************************** initRow = global_config.get_value("TESTROW") global_config.set_value("TESTROW", multiRow) # if result.get("code") == 200 and result.get("msg") == "OK": # loadProcessValue("#流程开关",realValue="上架成功") # else: # # 交易失败,在该数据行“#流程开关”中写入报错信息 # if result: # loadProcessValue("#流程开关",realValue="报错:"+result.get("msg")) # else: # loadProcessValue("#流程开关",realValue="报错:系统未响应!") # initRow = global_config.get_value("TESTROW") # global_config.set_value("TESTROW",multiRow) if result.get("code") != 200 or result.get("msg") != "OK": # 交易失败,在该数据行“#流程开关”中写入报错信息 if result: loadProcessValue("#流程开关", realValue="报错:" + result.get("msg")) else: loadProcessValue("#流程开关", realValue="报错:系统未响应!") else: loadProcessValue("#流程开关", realValue="上架成功") global_config.set_value("TESTROW", initRow) time.sleep(1)
def test01_box_uptray(self): ''' 登陆500环境PDA后,扫码进行箱子上托盘 ''' # **************************** 案例公共信息初始化 **************************** self.caseName = (lambda: sys._getframe(1).f_code.co_name)() global_config.set_value("CASENAME", self.caseName) login_url = self.url + getInterfaceData("登陆接口") base_url = self.url + getInterfaceData("调用接口") # 与库表中数据主键重复情况均需考虑是否用初始化 if getInterfaceData("是否数据库初始化") == "是": DB().delete(tableName, deleteData) try: # 确定并发流程数 multiAccount = eval(makeJsonData("并发流程数")) token = get_token(login_url, makeJsonData("经办登录名"), makeJsonData("登陆密码")) errAccount = 0 start = time.time() maxNum = 10 # multis = [] p = multiprocessing.Pool(processes=maxNum) for i in range(multiAccount): multiRow = global_config.get_value("TESTROW") + i myProcess = p.apply_async(func=box_uptray, args=( login_url, base_url, multiRow, token, )) myProcess.daemon = True # multis.append(myProcess) p.close() p.join() end = time.time() for i in range(multiAccount): multiRow = global_config.get_value("TESTROW") + i if makeProcessData("#流程开关", multiRow=multiRow).find("报错") != -1: errAccount += 1 print("第 %d 次进程中累计报错数为: %d" % (i + 1, errAccount)) print( "========================================================================" ) print("接口性能测试开始时间:", time.asctime(time.localtime(start))) print("接口性能测试结束时间:", time.asctime(time.localtime(end))) print("接口地址:", base_url) print("接口类型:", "post") print("最大进程数:", maxNum) print("每个进程循环次数:", 1) print("每次请求时间间隔:", 0) print("总请求数:", multiAccount * 1) # print("错误请求数:", len(error)) print("总耗时(秒):", end - start) print("每次请求耗时(秒):", (end - start) / (multiAccount * 1)) print("每秒承载请求数(TPS):", (multiAccount * 1) / (end - start)) print("平均响应时间(毫秒):", CM.multi_response_avg()) print( "========================================================================" ) # **************************** 常规部分 **************************** assert errAccount == 0, \ "😭 箱子入托盘中,\n共需处理 '%s' 个流程, 有 '%d' 个失败!" \ %(multiAccount,errAccount) print("😭 箱子入托盘中,\n共需处理 '%s' 个流程, 有 '%d' 个失败!" \ %(multiAccount,errAccount)) except AssertionError as e: self.testResult = "失败" raise AssertionError(e) except Exception as e: self.testResult = "失败" raise e finally: if errAccount == 0: self.testResult = "成功" # 在excel中写值脚本不可写入try/except,否则html报告中无法区别体现“失败”和“异常” global_config.set_value("TESTRESULT", self.testResult) self.terminateProcess = True writeTextResult(myRow=self.myRow)