def getExpectedValue(valueAccessMethod, value, paramDataDict, actionJson): result = None if valueAccessMethod == "getGlobalVariable": result = publicMethod.getGlobalVariable(value) elif valueAccessMethod == "getParam": result = getParam(paramDataDict, value) elif valueAccessMethod == "getCustom": actualValueType = actionJson["expectedValueType"] result = publicMethod.convertType(value, actualValueType) return result
def publicAssert(actionData, paramDataDict): print("=======actionData========") print(actionData) actionJson = demjson.decode(actionData["actionJson"]) print("<b><-----执行assert操作-----></b>") actualValueAccessMethod = actionJson["actualValueAccessMethod"] actualValue = actionJson["actualValue"] actual = None if actualValueAccessMethod == "getGlobalVariable": actual = publicMethod.getGlobalVariable(actualValue) expectedValueAccessMethod = actionJson["expectedValueAccessMethod"] expectedValue = actionJson["expectedValue"] expect = None if expectedValueAccessMethod == "getCustom": expectedValueType = actionJson["expectedValueType"] expect = publicMethod.convertType(expectedValue, expectedValueType) elif expectedValueAccessMethod == "getParam": expect = getParam(paramDataDict, expectedValue) elif expectedValueAccessMethod == "getGlobalVariable": expect = publicMethod.getGlobalVariable(expectedValue) print("实际值:" + str(actual)) print("期望值:" + str(expect)) assert actual == expect, actionData["stepName"]
def runTask(toDoTaskData, reportPath): testSuite = unittest.TestSuite() reportId = toDoTaskData[0] taskType = toDoTaskData[2] taskId = toDoTaskData[3] try: print("开始执行任务,type:" + str(taskType) + ",id:" + taskId) # 加载环境变量 environmentId = toDoTaskData[12] getEnvironmentVariablesSql = "select * from environment_variables where environmentId = %s and status = %s" getEnvironmentVariablesSqlParamList = [environmentId, 1] environmentVariables = mySqlOperate.search( getEnvironmentVariablesSql, getEnvironmentVariablesSqlParamList) if not (environmentVariables is None): for environmentVariable in environmentVariables: try: environmentVariableName = environmentVariable[2] environmentVariableType = environmentVariable[7] environmentVariableValue = environmentVariable[3] value = publicMethod.convertType( environmentVariableValue, environmentVariableType) publicMethod.environmentVariableDict[ environmentVariableName] = value except Exception as e: print("加载环境变量失败2") failed(reportId, 4) print(e) else: print("加载环境变量失败1") failed(reportId, 4) if runAndReport.lock == 0: # 加载测试用例 if taskType == 1: caseId = taskId publicMethod.caseIdList.append(caseId) publicMethod.casesDataDict[caseId] = {} publicMethod.casesDataDict[caseId][ "caseName"] = toDoTaskData[1] publicMethod.casesDataDict[caseId]["caseData"] = [] elif taskType == 2: publicMethod.currentSuiteName = toDoTaskData[1] suiteStepsSql = "select * from suite_step where suiteId = %s and status = %s" suiteStepsSqlParamList = [taskId, 1] suiteSteps = mySqlOperate.search(suiteStepsSql, suiteStepsSqlParamList) if not (suiteSteps is None): for suiteStep in suiteSteps: if runAndReport.lock == 0: caseId = suiteStep[2] publicMethod.caseIdList.append(caseId) publicMethod.casesDataDict[caseId] = {} caseSql = "select * from `case` where id = %s" caseSqlParamList = [caseId] case = mySqlOperate.search( caseSql, caseSqlParamList) if not (case is None): case = case[0] publicMethod.casesDataDict[caseId][ "caseName"] = case[1] publicMethod.casesDataDict[caseId][ "caseData"] = [] else: print("获取测试用例失败") failed(reportId, 5) else: print("获取集合步骤失败") failed(reportId, 6) if runAndReport.lock == 0: # 加载测试用例步骤,即测试片段 for caseId in publicMethod.caseIdList: caseStepsSql = "select * from `case_step` where caseId = %s and status = %s order by sequence asc" caseStepsSqlParamList = [caseId, 1] caseSteps = mySqlOperate.search( caseStepsSql, caseStepsSqlParamList) caseStepDict = {} if not (caseSteps is None): for caseStep in caseSteps: testSuite.addTest( publicTestCase('test_public')) if runAndReport.lock == 0: caseStepDict = {} fragmentId = caseStep[2] fragmentSql = "select * from `fragment` where id = %s" fragmentSqlParamList = [fragmentId] fragment = mySqlOperate.search( fragmentSql, fragmentSqlParamList) if not (fragment is None): fragment = fragment[0] fragmentId = fragment[0] fragmentName = fragment[1] fragmentTemplateId = fragment[2] caseStepDict["fragmentId"] = fragmentId caseStepDict[ "fragmentName"] = fragmentName caseStepDict[ "fragmentTemplateId"] = fragmentTemplateId # 加载测试片段参数 fragmentParamsSql = "select * from fragment_param where fragmentId = %s and status = %s" fragmentParamsSqlParamList = [ fragmentId, 1 ] fragmentParams = mySqlOperate.search( fragmentParamsSql, fragmentParamsSqlParamList) if not (fragmentParams is None): paramDict = {} for fragmentParam in fragmentParams: paramName = fragmentParam[1] paramType = fragmentParam[2] paramValue = fragmentParam[3] value = publicMethod.convertType( paramValue, paramType) print(paramName) paramDict[paramName] = value caseStepDict[ "fragmentParamDict"] = paramDict else: print("获取片段参数失败") failed(reportId, 9) if runAndReport.lock == 0: fragmentTemplateStepsSql = "select * from fragment_template_step where templateId = %s and parentId is %s and status = %s order by sequence asc" fragmentTemplateStepsParams = [ fragmentTemplateId, None, 1 ] fragmentTemplateSteps = mySqlOperate.search( fragmentTemplateStepsSql, fragmentTemplateStepsParams) if not (fragmentTemplateSteps is None): templateStepList = [] for fragmentTemplateStep in fragmentTemplateSteps: dictionary = {} dictionary[ "id"] = fragmentTemplateStep[ 0] dictionary[ "stepName"] = fragmentTemplateStep[ 1] dictionary[ "actionType"] = fragmentTemplateStep[ 2] dictionary[ "actionKey"] = fragmentTemplateStep[ 3] dictionary[ "actionJson"] = fragmentTemplateStep[ 4] dictionary[ "sequence"] = fragmentTemplateStep[ 5] templateStepList.append( dictionary) caseStepDict[ "templateStepList"] = templateStepList else: print("获取片段模板步骤失败") failed(reportId, 10) else: print("获取用例片段失败") failed(reportId, 8) if runAndReport.lock == 0: publicMethod.casesDataDict[caseId][ "caseData"].append(caseStepDict) else: print("获取用例步骤失败") failed(reportId, 7) print(publicMethod.casesDataDict) print(publicMethod.environmentVariableDict) if runAndReport.lock == 0: """执行所有测试用例,并把结果写入报告""" result = BeautifulReport(testSuite) now = time.strftime("%Y%m%d%H%M%S") if not os.path.exists(reportPath): os.makedirs(os.path.abspath(reportPath)) filename = now + '_' + toDoTaskData[1] + '.html' result.report(filename=filename, description=toDoTaskData[1], log_path=reportPath) now = time.strftime("%Y-%m-%d %H:%M:%S") reportPath = str( os.path.abspath(reportPath)) + "\\" + filename reportPath = reportPath.replace("\\", "/", -1) if runAndReport.lock == 0: suiteLastResult = 1 taskResult = 1 i = 0 for caseId in publicMethod.caseIdList: result = publicMethod.runCaseResultList[i] if taskType == 2: if result == 0: suiteLastResult = 0 if result == 0: taskResult = 0 now = time.strftime("%Y-%m-%d %H:%M:%S") updateCaseSql = "update `case` SET lastResult = %s, updateTime = %s where id = %s" updateCaseSqlParamList = [result, now, caseId] updateCaseSqlResult = mySqlOperate.update( updateCaseSql, updateCaseSqlParamList) i = i + 1 if taskType == 2: now = time.strftime("%Y-%m-%d %H:%M:%S") updateSuiteSql = "update `suite` SET lastResult = %s, updateTime = %s where id = %s" updateSuiteSqlParamList = [ suiteLastResult, now, taskId ] updateSuiteSqlResult = mySqlOperate.update( updateSuiteSql, updateSuiteSqlParamList) updateReportSql = "update report set status = %s, result = %s, reportPath = %s, updateTime = %s where id = %s" updateReportSqlParamList = [ 2, taskResult, reportPath, now, reportId ] updateReportSqlResult = mySqlOperate.update( updateReportSql, updateReportSqlParamList) if runAndReport.lock == 0: initializationData() except Exception as e: print("发生未知错误") failed(reportId, 11) print(e)
def public(actionData, paramDataDict): print("=======actionData========") print(actionData) actionJson = demjson.decode(actionData["actionJson"]) actionKey = actionData["actionKey"] if actionKey == "defineVariables": print("<b><-----执行defineVariables操作-----></b>") value = "" variableValueType = actionJson["variableValueType"] variableValue = actionJson["variableValue"] value = publicMethod.convertType(variableValue, variableValueType) variableStorageMethod = actionJson["variableStorageMethod"] variableStorageValue = actionJson["variableStorageValue"] if variableStorageMethod == "setGlobalVariable": try: print("定义变量为全局变量,变量名:" + variableStorageValue + ",值:" + str(value)) except: pass publicMethod.setGlobalVariable(variableStorageValue, value) elif actionKey == "if" or actionKey == "while": if actionKey == "if": print("<b><-----执行if操作-----></b>") elif actionKey == "while": print("<b><-----执行while操作-----></b>") while 1 == 1: actualValueAccessMethod = actionJson["actualValueAccessMethod"] actualValue = actionJson["actualValue"] actual = getActualValue(actualValueAccessMethod, actualValue, paramDataDict, actionJson) expectedValueAccessMethod = actionJson["expectedValueAccessMethod"] expectedValue = actionJson["expectedValue"] expected = getExpectedValue(expectedValueAccessMethod, expectedValue, paramDataDict, actionJson) condition = actionJson["condition"] try: print("进行逻辑判断,actual:" + str(actual) + ",condition:" + condition + ",expected:" + str(expected)) except: pass result = 0 if condition == "=": if actual == expected: result = 1 elif condition == ">": if actual > expected: result = 1 elif condition == "<": if actual < expected: result = 1 elif condition == "<=": if actual <= expected: result = 1 elif condition == ">=": if actual >= expected: result = 1 elif condition == "in": if actual in expected: result = 1 if result == 1: fragmentTemplateStepsSql = "select * from fragment_template_step where id = %s and parentId = %s order by sequence asc" fragmentTemplateStepsParams = [ publicMethod.currentTemplateId, actionData["id"] ] fragmentTemplateSteps = mySqlOperate.search( fragmentTemplateStepsSql, fragmentTemplateStepsParams) if not (fragmentTemplateSteps is None): templateStepList = [] for fragmentTemplateStep in fragmentTemplateSteps: dictionary = {} dictionary["id"] = fragmentTemplateStep[0] dictionary["stepName"] = fragmentTemplateStep[1] dictionary["actionType"] = fragmentTemplateStep[2] dictionary["actionKey"] = fragmentTemplateStep[3] dictionary["actionJson"] = fragmentTemplateStep[4] dictionary["sequence"] = fragmentTemplateStep[5] dictionary["parentId"] = fragmentTemplateStep[6] templateStepList.append(dictionary) print("开始执行" + actionData["id"] + "步骤的子级步骤") for step in templateStepList: if step["parentId"] == actionData["id"]: stepType = step["actionType"] if stepType == "selenium": uiAction(step, paramDataDict, "selenium") elif stepType == "appium": uiAction(step, paramDataDict, "appium") elif stepType == "public": public(step, paramDataDict) elif stepType == "assert": publicAssert(step, paramDataDict) elif stepType == "request": request(step, paramDataDict) elif stepType == "custom": custom(actionData, paramDataDict) else: raise Exception("actionType错误,actionType:" + stepType + "\n") elif result == 0: if actionKey == "if": print("条件不符,不执行if步骤下的子步骤") elif actionKey == "while": print("条件不符,跳出while循环") break if actionKey == "if": break elif actionKey == "for": print("<b><-----执行for操作-----></b>") dataListAccessMethod = actionJson["dataListAccessMethod"] dataListValue = actionJson["dataListValue"] dataList = None if dataListAccessMethod == "getParam": dataList = getParam(paramDataDict, dataListValue) elif dataListAccessMethod == "getGlobalVariable": dataList = publicMethod.getGlobalVariable(dataListValue) elif dataListAccessMethod == "getCustom": dataList = dataListValue try: print("循环列表/字符串为:" + str(dataList)) except: pass fragmentTemplateStepsSql = "select * from fragment_template_step where id = %s and parentId = %s order by sequence asc" fragmentTemplateStepsParams = [ publicMethod.currentTemplateId, actionData["id"] ] fragmentTemplateSteps = mySqlOperate.search( fragmentTemplateStepsSql, fragmentTemplateStepsParams) if not (fragmentTemplateSteps is None): templateStepList = [] for fragmentTemplateStep in fragmentTemplateSteps: dictionary = {} dictionary["id"] = fragmentTemplateStep[0] dictionary["stepName"] = fragmentTemplateStep[1] dictionary["actionType"] = fragmentTemplateStep[2] dictionary["actionKey"] = fragmentTemplateStep[3] dictionary["actionJson"] = fragmentTemplateStep[4] dictionary["sequence"] = fragmentTemplateStep[5] dictionary["parentId"] = fragmentTemplateStep[6] templateStepList.append(dictionary) for data in dataList: if "dataStorageMethod" in actionJson: if "dataStorageValue" in actionJson: dataStorageMethod = actionJson["dataStorageMethod"] dataStorageValue = actionJson["dataStorageValue"] if dataStorageMethod == "setGlobalVariable": print("将data设置为全局变量:" + dataStorageValue) publicMethod.setGlobalVariable(dataStorageValue, data) else: raise Exception("resultStorageValue不存在\n") else: raise Exception("resultStorageMethod不存在\n") print("开始执行" + actionData["id"] + "步骤的子级步骤") for step in templateStepList: if step["parentId"] == actionData["id"]: stepType = step["actionType"] if stepType == "selenium": uiAction(step, paramDataDict, "selenium") elif stepType == "appium": uiAction(step, paramDataDict, "appium") elif stepType == "public": public(step, paramDataDict) elif stepType == "assert": publicAssert(step, paramDataDict) elif stepType == "request": request(step, paramDataDict) else: raise Exception("actionType错误,actionType:" + stepType + "\n") elif actionKey == "arithmetic": print("<b><-----执行arithmetic操作-----></b>") num_1_AccessMethod = actionJson["num_1_AccessMethod"] num_1_Value = actionJson["num_1_Value"] num1 = None if num_1_AccessMethod == "getParam": num1 = getParam(paramDataDict, num_1_Value) elif num_1_AccessMethod == "getGlobalVariable": num1 = publicMethod.getGlobalVariable(num_1_Value) elif num_1_AccessMethod == "getCustom": num1 = publicMethod.convertType(num_1_Value, "float") condition = actionJson["condition"] num_2_AccessMethod = actionJson["num_2_AccessMethod"] num_2_Value = actionJson["num_2_Value"] num2 = None if num_2_AccessMethod == "getParam": num2 = getParam(paramDataDict, num_2_Value) elif num_2_AccessMethod == "getGlobalVariable": num2 = publicMethod.getGlobalVariable(num_2_Value) elif num_2_AccessMethod == "getCustom": num2 = publicMethod.convertType(num_2_Value, "float") result = None num1 = publicMethod.convertType(num1, "float") print("算数1:" + str(num1)) num2 = publicMethod.convertType(num2, "float") print("算数2:" + str(num2)) if condition == "+": print("执行加法运算") result = num1 + num2 elif condition == "-": print("执行减法运算") result = num1 - num2 elif condition == "*": print("执行乘法运算") result = num1 * num2 elif condition == "/": print("执行除法运算") result = num1 / num2 print("运算结果:" + str(result)) if "resultStorageMethod" in actionJson: if "resultStorageValue" in actionJson: resultStorageMethod = actionJson["resultStorageMethod"] resultStorageValue = actionJson["resultStorageValue"] if resultStorageMethod == "setGlobalVariable": print("将运算结果设置为全局变量:" + resultStorageValue) publicMethod.setGlobalVariable(resultStorageValue, result) else: raise Exception("resultStorageValue不存在\n") else: raise Exception("resultStorageMethod不存在\n") elif actionKey == "list_append": print("<b><-----执行list_append操作-----></b>") listAccessMethod = actionJson["listAccessMethod"] listName = actionJson["listName"] list_1 = [] print("list获取方式:" + listAccessMethod) print("list名称:" + listName) if listAccessMethod == "getParam": list_1 = getParam(paramDataDict, listName) elif listAccessMethod == "getGlobalVariable": list_1 = publicMethod.getGlobalVariable(listName) appendValueAccessMethod = actionJson["appendValueAccessMethod"] appendValue = actionJson["appendValue"] print("追加值获取方式:" + appendValueAccessMethod) value = None if appendValueAccessMethod == "getParam": value = getParam(paramDataDict, appendValue) elif appendValueAccessMethod == "getGlobalVariable": value = publicMethod.getGlobalVariable(appendValue) elif appendValueAccessMethod == "getCustom": appendValueType = actionJson["appendValueType"] print("追加值类型:" + appendValueType) value = publicMethod.convertType(appendValue, appendValueType) try: print("追加值:" + str(value)) except: pass list_1.append(value) if listAccessMethod == "getParam": setParam(paramDataDict, listName, list_1) elif listAccessMethod == "getGlobalVariable": publicMethod.setGlobalVariable(listName, list_1) elif actionKey == "dict_update": print("<b><-----执行dict_update操作-----></b>") dictAccessMethod = actionJson["dictAccessMethod"] dictName = actionJson["dictName"] print("dict获取方式:" + dictAccessMethod) print("dict名称:" + dictName) dict_1 = None if dictAccessMethod == "getParam": dict_1 = getParam(paramDataDict, dictName) elif dictAccessMethod == "getGlobalVariable": dict_1 = publicMethod.getGlobalVariable(dictName) dictKey = actionJson["dictKey"] valueAccessMethod = actionJson["valueAccessMethod"] dictValue = actionJson["dictValue"] print("追加值获取方式:" + valueAccessMethod) value = None if valueAccessMethod == "getParam": value = getParam(paramDataDict, dictValue) elif valueAccessMethod == "getGlobalVariable": value = publicMethod.getGlobalVariable(dictValue) elif valueAccessMethod == "getCustom": dictValueType = actionJson["dictValueType"] print("追加值类型:" + dictValueType) value = publicMethod.convertType(dictValue, dictValueType) try: print("追加Key:" + str(dictKey) + ",追加Value:" + str(value)) except: pass dict_1[dictKey] = value if dictAccessMethod == "getParam": setParam(paramDataDict, dictName, dict_1) elif dictAccessMethod == "getGlobalVariable": publicMethod.setGlobalVariable(dictName, dict_1) elif actionKey == "getListValue": print("<b><-----执行getListValue操作-----></b>") listAccessMethod = actionJson["listAccessMethod"] listName = actionJson["listName"] list_1 = [] print("list获取方式:" + listAccessMethod) print("list名称:" + listName) if listAccessMethod == "getParam": list_1 = getParam(paramDataDict, listName) elif listAccessMethod == "getGlobalVariable": list_1 = publicMethod.getGlobalVariable(listName) sequence = actionJson["sequence"] print("取第" + str(sequence) + "个的值") result = list_1[int(sequence)] try: print("result:" + str(result)) except: pass if "resultStorageMethod" in actionJson: if "resultStorageValue" in actionJson: resultStorageMethod = actionJson["resultStorageMethod"] resultStorageValue = actionJson["resultStorageValue"] if resultStorageMethod == "setGlobalVariable": print("将结果设置为全局变量:" + resultStorageValue) publicMethod.setGlobalVariable(resultStorageValue, result) else: raise Exception("resultStorageValue不存在\n") else: raise Exception("resultStorageMethod不存在\n") elif actionKey == "getDictValue": print("<b><-----执行getDictValue操作-----></b>") dictAccessMethod = actionJson["dictAccessMethod"] dictName = actionJson["dictName"] print("dict获取方式:" + dictAccessMethod) print("dict名称:" + dictName) dict_1 = None if dictAccessMethod == "getParam": dict_1 = getParam(paramDataDict, dictName) elif dictAccessMethod == "getGlobalVariable": dict_1 = publicMethod.getGlobalVariable(dictName) dictKey = actionJson["key"] print("取关键字为'" + str(dictKey) + "'的值") result = dict_1[dictKey] try: print("result:" + str(result)) except: pass if "resultStorageMethod" in actionJson: if "resultStorageValue" in actionJson: resultStorageMethod = actionJson["resultStorageMethod"] resultStorageValue = actionJson["resultStorageValue"] if resultStorageMethod == "setGlobalVariable": print("将结果设置为全局变量:" + resultStorageValue) publicMethod.setGlobalVariable(resultStorageValue, result) else: raise Exception("resultStorageValue不存在\n") else: raise Exception("resultStorageMethod不存在\n")