def interface(task_name, failcount, email_data): #将这次是第几次执行写入mongo数据库 global test_carryid try: test_carryid = CarryTask.objects.values("id").aggregate( id=Max('id'))['id'] + 1 except: #第一次执行时 test_carryid = 1 #获取权重 case_names_weights = {} task_cases = Task.objects.filter(task_name=task_name).values("case_id") for task_case in task_cases: case_steps = Case.objects.filter(id=task_case['case_id']).values( "case_name", "case_weights") for case_step in case_steps: case_names_weights[ case_step['case_name']] = case_step['case_weights'] task_dir = os.getcwd() + "\\task\\" + task_name timer = time.strftime("%y-%m-%d%H-%M-%S", time.localtime(time.time())) #print (os.getcwd()) #report_dir=os.getcwd()+"/report/" report_dir = task_dir + r"\report" #文件名字 filename = report_dir + r"\report" + timer + ".html" #print("filename is ") #print(filename) #print filename fp = open(filename, "wb") #日志服务 global Successlogname Successlogname = report_dir + r"\Successlog" + timer + ".text" #print (Successlogname) #rm_file(Successlogname) global Errorlogname Errorlogname = report_dir + r"\Errorlog" + timer + ".text" #rm_file(Errorlogname) #目录名字 #case_dir=os.getcwd()+"/testcase/" case_dir = task_dir + r"\testcase" #print case_dir def createSuite(): #suiteunit=unittest.TestSuite() #对应suit进行重构,调用重构的 suiteunit = Suit() suiteunit.editfailcount(failcount) #os.path.abspath(os.path.join(task_dir, "../")) #print(case_dir) #print(case_names_weights) #print(os.path.abspath(os.path.join(task_dir, "..\\"))) #start_dir = "C:\\Users\\zhangjian01\\PycharmProjects\\AAP2\\task\\0605\\testcase" #discover=unittest.defaultTestLoader.discover(case_dir,case_names_weights,pattern="*.py",top_level_dir=os.path.abspath(os.path.join(task_dir, "../"))) #print(case_dir) discover = unittest.defaultTestLoader.discover(case_dir, pattern="*.py", top_level_dir=None) #print("-=-=-=") #suite.addTest(unittest.makeSuite("SVCTest")) for test_suite in discover: print(test_suite) for i in test_suite: print(i) suiteunit.addTests(i) print(suiteunit) return (suiteunit) ''' suiteunit=unittest.TestSuite() #print(case_dir) discover=unittest.defaultTestLoader.discover(case_dir,pattern="*.py",top_level_dir=None) for test_suite in discover: for i in test_suite: suiteunit.addTests(i) ''' #原始报告 #runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title=u'测试',description=u'接口报告的描述') #新报告 runner = HTMLTestRunner(stream=fp, title=u'测试', description=u'接口报告的描述') runner.run(createSuite()) #runner.run(suiteunit) fp.close() print("over") #print discover #runner.run(discover)interface #判断是否发送邮件是则发送 if email_data != None: logs = {"successlog": Successlogname, "errorlog": Errorlogname} sendemail = SendEmail(email_data['host_dir'], email_data['email_port'], email_data['username'], email_data['passwd']) sendemail.add_message(filename, logs) sendemail.add_header(email_data['Headerfrom'], email_data['Headerto'], email_data['subject']) sendemail.send(email_data['sender'], email_data['receivers'].split(',')) #开始拿去报告和日志的数据 spider = Spider(filename) test_steps, statuses = spider.get_html_data() spider.get_log_data(Successlogname, Errorlogname) responses = spider.get_response(test_steps, statuses) #把执行表新增一次执行任务 CarryTask.objects.create(task_name=task_name, htmlreport=filename, successlogname=Successlogname, errorlogname=Errorlogname) test_carryTaskid = CarryTask.objects.values("id").aggregate( id=Max('id'))['id'] #把执行数据全部入库 #如果正常 try: for i in range(len(test_steps)): LogAndHtmlfeedback.objects.create( test_step=test_steps[i], test_status=statuses[i], test_response=responses[i], test_carryTaskid=test_carryTaskid) # 如果全部时内部错误返回,不生成文件 except: for i in range(len(test_steps)): LogAndHtmlfeedback.objects.create( test_step=test_steps[i], test_status=statuses[i], test_response="", test_carryTaskid=test_carryTaskid)
def interface(task_name, failcount, email_data, env_desc, nosqldb_desc, out_id, test_carryTaskid, wechat): startTimer = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())) stepcountpass = 0 stepcountrate = 0 #获取权重 case_names_weights = {} task_cases = Task.objects.filter(task_name=task_name).values( "case_id", "uuid") for task_case in task_cases: UUID = task_case['uuid'] case_steps = Case.objects.filter(id=task_case['case_id']).values( "case_name", "case_weights") for case_step in case_steps: case_names_weights[ case_step['case_name']] = case_step['case_weights'] task_dir = os.getcwd() + r"/task/" + task_name + "---" + UUID timer = time.strftime("%y-%m-%d%H-%M-%S", time.localtime(time.time())) #print (os.getcwd()) #report_dir=os.getcwd()+"/report/" report_dir = task_dir + r"/report" #文件名字 filename = report_dir + r"/report" + timer + ".html" #print filename fp = open(filename, "wb") #日志服务 global successlogname Successlogname = report_dir + r"/Successlog" + timer + ".text" try: successlogname.update({ str(test_carryTaskid) + "successlogname": report_dir + r"/Successlog" + timer + ".text" }) except: successlogname = { str(test_carryTaskid) + "successlogname": report_dir + r"/Successlog" + timer + ".text" } global errorlogname Errorlogname = report_dir + r"/Successlog" + timer + ".text" try: errorlogname.update({ str(test_carryTaskid) + "errorlogname": report_dir + r"/Errorlog" + timer + ".text" }) except: errorlogname = { str(test_carryTaskid) + "errorlogname": report_dir + r"/Errorlog" + timer + ".text" } #目录名字 #case_dir=os.getcwd()+"/testcase/" case_dir = task_dir + r"/testcase" def createSuite(): #suiteunit=unittest.TestSuite() #对应suit进行重构,调用重构的 #global stepcountall stepcountall = 0 suiteunit = Suit() suiteunit.editfailcount(failcount) os.path.abspath(os.path.join(task_dir, "../")) discover = unittest.defaultTestLoader.discover( case_dir, case_names_weights, pattern="*.py", top_level_dir=os.path.abspath(os.path.join(task_dir, "../"))) for test_suite in discover: for i in test_suite: #统计步骤总数 for _ in i: stepcountall += 1 suiteunit.addTests(i) return (suiteunit, stepcountall) #suiteunit=unittest.TestSuite() #discover=unittest.defaultTestLoader.discover(case_dir,pattern="*.py",top_level_dir=None) #原始报告 #runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title=u'测试',description=u'接口报告的描述') #新报告 runner = HTMLTestRunner(stream=fp, title=task_name.split('---')[0], description=u'接口报告的描述') testsuite, stepcountall = createSuite() CarryTask.objects.filter(task_name=task_name, out_id=out_id).update( htmlreport=filename, successlogname=Successlogname, errorlogname=Errorlogname, stepcountall=stepcountall) # 将这次是第几次执行写入mongo数据库 global test_carryid try: test_carryid = test_carryTaskid except: # 第一次执行时 test_carryid = 1 runner.run(testsuite) fp.close() # 任务表的carrystatus置成3 Task.objects.filter(task_name=task_name).update(carrystatus=3) endTimer = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())) #开始拿去报告和日志的数据 spider = Spider(filename) test_steps, statuses = spider.get_html_data() spider.get_log_data(Successlogname, Errorlogname) responses = spider.get_response(test_steps, statuses) #获取用例名和用例对应的api test_stepCuts = [] apis = [] statusesMessages = [] result = [] title = ['用例名', '接口路径', '状态'] # 状态中文 for statuse in statuses: if statuse == 0: statusesMessage = "非断言性错误" elif statuse == 1: stepcountpass += 1 statusesMessage = "成功" elif statuse == 2: statusesMessage = "断言性错误" statusesMessages.append(statusesMessage) if stepcountall != 0: stepcountrate = int(stepcountpass / stepcountall * 100) #把执行数据全部入库 #如果正常 try: for i in range(len(test_steps)): LogAndHtmlfeedback.objects.create( test_step=test_steps[i], test_status=statuses[i], test_response=responses[i], test_carryTaskid=test_carryTaskid) #邮件数据准备 #用例名 test_stepCut = test_steps[i][5:] test_stepCuts.append(test_stepCut) # api caseId = Step.objects.filter( step_name=test_stepCut).values('case')[0]['case'] api = Case.objects.filter(id=caseId).values('api')[0]['api'] apis.append(api) # 得到邮件正文html result.append(test_stepCuts) result.append(apis) result.append(statusesMessages) body = makeEamilBody(result, title, task_name, env_desc, nosqldb_desc) # 如果全部是内部错误返回,不生成文件 except: for i in range(len(test_steps)): LogAndHtmlfeedback.objects.create( test_step=test_steps[i], test_status=statuses[i], test_response="", test_carryTaskid=test_carryTaskid) # 邮件数据准备 # 用例名 test_stepCut = test_steps[i][5:] test_stepCuts.append(test_stepCut) # api caseId = Step.objects.filter( step_name=test_stepCut).values('case')[0]['case'] api = Case.objects.filter(id=caseId).values('api')[0]['api'] apis.append(api) # 得到邮件正文html result.append(test_stepCuts) result.append(apis) result.append(statusesMessages) body = makeEamilBody(result, title, task_name, env_desc, nosqldb_desc) # 判断是否发送邮件是则发送 if email_data != None: logs = { "successlog": Successlogname, "errorlog": Errorlogname, "report": filename } sendemail = SendEmail(email_data['host_dir'], email_data['email_port'], email_data['username'], email_data['passwd']) sendemail.add_message(body, logs) sendemail.add_header(email_data['Headerfrom'], email_data['Headerto'], email_data['subject']) sendemail.send(email_data['sender'], email_data['receivers'].split(',')) # 判断是否发送企信 if wechat != None: users = "yiqian" content = ''' 服务:{} 环境:{} 开始时间:{} 结束时间:{} 接口测试通过数:{} 接口测试总数:{} 接口测试通过率:{}'''.format(task_name, env_desc, startTimer, endTimer, stepcountpass, stepcountall, stepcountrate) subject = "接口测试质量" url = "http://{}:8000/htmlreport/?task_name={}&find_way=findhtmlreport&carrytaskid={}".format( getLocalIp(), task_name, test_carryTaskid) sendWechat(users, content, subject, url) return filename
def interface(task_name, failcount, email_data): task_dir = os.getcwd() + r"/task/" + task_name timer = time.strftime("%y-%m-%d%H-%M-%S", time.localtime(time.time())) #print (os.getcwd()) #report_dir=os.getcwd()+"/report/" report_dir = task_dir + r"/report" #文件名字 filename = report_dir + r"/report" + timer + ".html" #print filename fp = open(filename, "wb") #日志服务 global Successlogname Successlogname = report_dir + r"/Successlog" + timer + ".text" #print (Successlogname) #rm_file(Successlogname) global Errorlogname Errorlogname = report_dir + r"/Errorlog" + timer + ".text" #rm_file(Errorlogname) #目录名字 #case_dir=os.getcwd()+"/testcase/" case_dir = task_dir + r"/testcase" #print case_dir def createSuite(): #suiteunit=unittest.TestSuite() #对应suit进行重构,调用重构的 suiteunit = Suit() suiteunit.editfailcount(failcount) os.path.abspath(os.path.join(task_dir, "../")) discover = unittest.defaultTestLoader.discover( case_dir, pattern="*.py", top_level_dir=os.path.abspath(os.path.join(task_dir, "../"))) #suite.addTest(unittest.makeSuite("SVCTest")) for test_suite in discover: print(test_suite) for i in test_suite: print(i) suiteunit.addTests(i) #print(suiteunit) return (suiteunit) #suiteunit=unittest.TestSuite() #discover=unittest.defaultTestLoader.discover(case_dir,pattern="*.py",top_level_dir=None) runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'测试', description=u'接口报告的描述') runner.run(createSuite()) fp.close() #print discover #runner.run(discover)interface #判断是否发送邮件是则发送 if email_data != None: logs = {"successlog": Successlogname, "errorlog": Errorlogname} sendemail = SendEmail(email_data['host_dir'], email_data['email_port'], email_data['username'], email_data['passwd']) sendemail.add_message(filename, logs) sendemail.add_header(email_data['Headerfrom'], email_data['Headerto'], email_data['subject']) sendemail.send(email_data['sender'], email_data['receivers'].split(',')) #开始拿去报告和日志的数据 spider = Spider(filename) test_steps, statuses = spider.get_html_data() spider.get_log_data(Successlogname, Errorlogname) responses = spider.get_response(test_steps) ''' print(test_cases) print(statuses) print(responses) ''' #把执行表新增一次执行任务 CarryTask.objects.create(task_name=task_name) test_carryTaskid = CarryTask.objects.values("id").aggregate( id=Max('id'))['id'] #把执行数据全部入库 for i in range(len(test_steps)): LogAndHtmlfeedback.objects.create(test_step=test_steps[i], test_status=statuses[i], test_response=responses[i], test_carryTaskid=test_carryTaskid)
def interface(task_name, failcount, email_data): print(1) #获取权重 case_names_weights = {} task_cases = Task.objects.filter(task_name=task_name).values("case_id") for task_case in task_cases: case_steps = Case.objects.filter(id=task_case['case_id']).values( "case_name", "case_weights") for case_step in case_steps: case_names_weights[ case_step['case_name']] = case_step['case_weights'] task_dir = os.getcwd() + r"/task/" + task_name timer = time.strftime("%y-%m-%d%H-%M-%S", time.localtime(time.time())) #print (os.getcwd()) #report_dir=os.getcwd()+"/report/" report_dir = task_dir + r"/report" #文件名字 filename = report_dir + r"/report" + timer + ".html" #print filename fp = open(filename, "wb") #日志服务 global Successlogname Successlogname = report_dir + r"/Successlog" + timer + ".text" #print (Successlogname) #rm_file(Successlogname) global Errorlogname Errorlogname = report_dir + r"/Errorlog" + timer + ".text" #rm_file(Errorlogname) #目录名字 #case_dir=os.getcwd()+"/testcase/" case_dir = task_dir + r"/testcase" #print case_dir def createSuite(): #suiteunit=unittest.TestSuite() #对应suit进行重构,调用重构的 global stepcountall stepcountall = 0 suiteunit = Suit() suiteunit.editfailcount(failcount) os.path.abspath(os.path.join(task_dir, "../")) discover = unittest.defaultTestLoader.discover( case_dir, case_names_weights, pattern="*.py", top_level_dir=os.path.abspath(os.path.join(task_dir, "../"))) for test_suite in discover: #print (test_suite) for i in test_suite: #统计步骤总数 for _ in i: stepcountall += 1 suiteunit.addTests(i) return (suiteunit) #suiteunit=unittest.TestSuite() #discover=unittest.defaultTestLoader.discover(case_dir,pattern="*.py",top_level_dir=None) #原始报告 #runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title=u'测试',description=u'接口报告的描述') #新报告 runner = HTMLTestRunner(stream=fp, title=task_name.split('---')[0], description=u'接口报告的描述') testsuite = createSuite() # 把执行表新增一次执行任务 out_id = str(uuid.uuid1()) CarryTask.objects.create(task_name=task_name, htmlreport=filename, successlogname=Successlogname, errorlogname=Errorlogname, stepcountall=stepcountall, out_id=out_id) #任务表的carrystatus置成1 #Task.objects.filter(task_name=task_name).update(carrystatus=1) #test_carryTaskid = CarryTask.objects.values("id").aggregate(id=Max('id'))['id'] test_carryTaskid = CarryTask.objects.filter( out_id=out_id).values("id")[0]['id'] # 将这次是第几次执行写入mongo数据库 global test_carryid try: test_carryid = test_carryTaskid except: # 第一次执行时 test_carryid = 1 runner.run(testsuite) fp.close() #print discover #runner.run(discover)interface #判断是否发送邮件是则发送 if email_data != None: logs = { "successlog": Successlogname, "errorlog": Errorlogname, "report": filename } sendemail = SendEmail(email_data['host_dir'], email_data['email_port'], email_data['username'], email_data['passwd']) sendemail.add_message(filename, logs) sendemail.add_header(email_data['Headerfrom'], email_data['Headerto'], email_data['subject']) sendemail.send(email_data['sender'], email_data['receivers'].split(',')) #开始拿去报告和日志的数据 spider = Spider(filename) test_steps, statuses = spider.get_html_data() spider.get_log_data(Successlogname, Errorlogname) responses = spider.get_response(test_steps, statuses) #把执行数据全部入库 #如果正常 try: for i in range(len(test_steps)): LogAndHtmlfeedback.objects.create( test_step=test_steps[i], test_status=statuses[i], test_response=responses[i], test_carryTaskid=test_carryTaskid) # 如果全部时内部错误返回,不生成文件 except: for i in range(len(test_steps)): LogAndHtmlfeedback.objects.create( test_step=test_steps[i], test_status=statuses[i], test_response="", test_carryTaskid=test_carryTaskid) # 任务表的carrystatus置成3 Task.objects.filter(task_name=task_name).update(carrystatus=3) return filename