当前位置: 首页 > news >正文

3d网页游戏排行seo最好的网站源码

3d网页游戏排行,seo最好的网站源码,广告设计与制作专业简介,文化网站源码实现思路 使用excel管理用例用例信息#xff0c;requests模块发送http请求#xff0c;实现了记录日志#xff0c;邮件发送测试报告的功能 目录结构如下#xff1a; 下面直接上代码#xff1a; 统筹脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24…实现思路 使用excel管理用例用例信息requests模块发送http请求实现了记录日志邮件发送测试报告的功能 目录结构如下 下面直接上代码 统筹脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 # -*- coding:utf-8 -*- import os from interface import Interface from testcase_get import Get_testcase from result_save import Save_test_result from result_send import Send_report from config.config import Config from logging_save import logger if __name__  __main__:     cur_path  os.path.split(os.path.realpath(__file__))[0]  # 获取当前文件绝对路径     case_path  os.path.join(cur_path, test_case, 20170602.xls)     test_case  Get_testcase(case_path).readExcel()  # 获取用例     if not isinstance(test_case, list):  # 判断用例是否获取成功         logger.info(Test_case get failed... \n Done!)     else:         logger.info(获取用例成功)         # 调用接口         test_result  Interface().interfaceTest(test_case)         # 获取执行结果用于发邮件         count_success  test_result[3]         count_failure  test_result[4]         failed_case_detail  test_result[5]         # 保存测试结果         Save_test_result().save_result(case_path, test_result[0], test_result[1], test_result[2])         logger.info(保存测试结果成功)         # 获取邮件配置信息         mail_config  Config(os.path.join(cur_path, config, mail.conf)).get_mail_config()         logger.info(获取邮箱配置成功)         login_user  mail_config[0]         login_pwd  mail_config[1]         from_addr  mail_config[2]         to_addrs  mail_config[3]         smtp_server  mail_config[4]         mail_send  Send_report(count_success, count_failure, failed_case_detail)         # 获取最新测试报告         last_report  mail_send.newest_report()         logger.info(邮件发送结果)         mail_send.send_result(login_user, login_pwd,from_addr, to_addrs,smtp_server,last_report)         logger.info(DONE!) 请求封装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 # coding:utf-8 import json import requests from logging_save import logger from result_check import Result_check from url_transform import urltransform class Interface:     def __init__(self, ):         pass     def interfaceTest(self, case_list):                  接口调用主函数                  # 用于存结果         res_flags  []         # 用于存请求报文         request_urls  []         # 用于存返回报文         responses  []         # 用户存失败的用例         failed_case  []         # 统计成功失败的用例数         count_success  0         count_failure  0         for case in case_list:             try:                 # 模块                 product  case[0]                 # 用例id                 case_id  case[1]                 # 用例标题                 interface_name  case[2].strip(\n)                 # 用例描述                 case_detail  case[3]                 # 请求方式                 method  case[4]                 # 请求url                 url  case[5]                 # 入参                 param  case[6]                 # 预期结果                 res_check  case[7]             except Exception as e:                 return 测试用例格式不正确%s % e             # 定义消息头信息             headers  {content-type: application/json,                        User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0}             # 对url进行封装             new_url  urltransform().urltransform(url, method, param)             if method.upper()  GET:                 results  requests.get(new_url).text                 logger.info(u正在调用接口: %s % interface_name)                 # print results                 responses.append(results)                 # 用于存储预期结果与实际结果的比较结果                 res  Result_check().interface_result_check(results, res_check)                 request_urls.append(new_url)             else:                 request_urls.append(new_url)                 if param  :                     pass                 else:                     data  json.loads(param)  # 将参数转化为json格式                 results  requests.post(new_url, datajson.dumps(data), headersheaders).text                 responses.append(results)                 res  Result_check().interface_result_check(results, res_check)             if pass in res:                 res_flags.append(pass)                 count_success  1             else:                 logger.warning(u接口返回结果与预期结果不一致失败URL: %s METHOD :%s % (url, method))                 res_flags.append(fail)                 count_failure  1                 failed_case.append((interface_name, method, url))         logger.info(u共执行 %s 条用例,PASS: %s,FAILED: %s % (len(case_list), count_success, count_failure))         return res_flags, request_urls, responses, count_success, count_failure, failed_case 日志封装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 # codingutf-8 import logging import sys import traceback import time class LoggingUtils:          封装日志工具类的基本操作          def __init__(self,logfile):                  :param logfile:                  self.logger  logging.getLogger(logfile)         self.hdlr  logging.FileHandler(logfile)         formatter  logging.Formatter(%(asctime)s %(levelname)s - %(message)s)         self.ch  logging.StreamHandler()         self.ch.setLevel(logging.INFO)         self.ch.setFormatter(formatter)         self.hdlr.setFormatter(formatter)         self.logger.addHandler(self.hdlr)         self.logger.addHandler(self.ch)         self.logger.setLevel(logging.DEBUG)     def debug(self, msg):                  :param msg:         :return:                  self.logger.debug(msg)         self.hdlr.flush()     def info(self, msg):                            :param msg:         :return:                  self.logger.info(msg)         self.hdlr.flush()     def warning(self,msg):         self.logger.warning(msg)         self.hdlr.flush()     def error(self, msg):                  :param msg:         :return:                  self.logger.error(msg)         # self.logger.removeHandler(logging.StreamHandler())         self.logger.removeHandler(self.ch)         self.hdlr.flush()     def error_sys(self, limitNone):                  :param limit:         :return:                  exceptionType, exceptionValue, exceptionTraceback  sys.exc_info()         if limit is None:             if hasattr(sys, tracebacklimit):                 limit  sys.tracebacklimit         n  0         eline  \n         while exceptionTraceback is not None and (limit is None or n limit):             f  exceptionTraceback.tb_frame             lineno  exceptionTraceback.tb_lineno             co  f.f_code             filename  co.co_filename             name  co.co_name             eline   File %s, line %d, in %s \n  % (filename, lineno, name)             exceptionTraceback  exceptionTraceback.tb_next             n  n  1         eline  \n.join(traceback.format_exception_only(exceptionType, exceptionValue))         self.logger.error(eline)         self.hdlr.flush() timer  time.strftime(%Y-%m-%d,time.localtime()) logger  LoggingUtils(%s.log%timer) 结果比对 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 #coding:utf-8 class result_check():     def __init__(self):         pass     def result_check(self,results,res_check):                  结果对比函数                  #返回结果将结果中的json数据转化为可以和预期结果比较的数据         res  results.replace(:,).replace( : ,)         #预期结果是xx11;xx22         res_check  res_check.split(;)         for s in res_check:             if s in res:                 pass             else:                 return 结果不匹配  str(s)         return pass  result_save.py   保存测试结果的模块复制原有的用例保存为新的excel #coding:utf-8 from xlutils import copy import xlrd import time import os class Save_test_result():     def __init__(self):         pass     def save_result(self,file_path,res_flags,request_urls,responses):                  :return:                  book  xlrd.open_workbook(file_path)         new_book  copy.copy(book)         sheet  new_book.get_sheet(0)         i  1         for request_url, response, flag in zip(request_urls, responses, res_flags):             sheet.write(i, 8, u%s % request_url)             sheet.write(i, 9, u%s % response)             sheet.write(i, 10, u%s % flag)             i  1         report_path  os.path.abspath(os.path.join(report))         if not os.path.exists(report_path):             os.makedirs(report_path)         new_book.save(os.path.abspath(os.path.join(report_path, Report%s.xls % time.strftime(%Y.%m.%d%H%M%S)))) 结果邮件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 #coding:utf-8 import smtplib from email.mime.text import MIMEText from email.header import Header from email.mime.multipart import MIMEMultipart import os from logging_save import  logger class Send_report(object):     def __init__(self,count_success,count_failure,failed_case):                  :param count_success:         :param count_failure:         :param failed_case:                  self.count_success  count_success         self.count_failure  count_failure         self.failed_case  failed_case     def newest_report(self,testreportreport):                  获取最新的测试报告         :param testreport:         :return:                  lists  os.listdir(testreport)         lists.sort(keylambda fn: os.path.getmtime(os.path.join(testreport,fn)))         file_new  os.path.join(testreport, lists[-1])         logger.info(获取最新附件报告成功)         return file_new     def send_result(self,username,passwd,from_addr,to_addrs,smtpserver,*args):                  :param username:         :param passwd:         :param from_addr:         :param to_addrs:         :param smtpserver:         :param args:         :return:                  sender  from_addr         subject  财富港接口测试结果         username  username         passwd  passwd         邮件内容         tille  (u用例名称, u请求方式, uurl)         details  (u成功:   str(self.count_success)  u失败:   str(self.count_failure))  \n  u失败的用例如下 :  \                   \n  \n.join(str(zip(tille, i)) for i in self.failed_case).decode(unicode-escape)         logger.info(邮件附件为: %s %(args[0].split(\\)[1]))         if args ! None: #判断是否添加附件             msg  MIMEMultipart()             msg.attach(MIMEText(details, plain, utf-8))             i  0             while i  len(args): #可以添加多个附件                 part  MIMEText(open(args[i], rb).read(), base64, utf-8)                 part[Content-Type]  application/octet-stream                 part[Content-Disposition]  attachment; filename%s%args[i]                 msg.attach(part) #添加附件                 i  1             msg[subject]  Header(subject, utf-8)             msg[From]  from_addr             msg[To]  ,.join(eval(to_addrs)) #兼容多个收件人             smtp  smtplib.SMTP()             try:                 smtp.connect(smtpserver)                 smtp.login(username, passwd)                 smtp.sendmail(sender, eval(to_addrs), msg.as_string())                 smtp.close()                 logger.info(带附件测试报告发送成功)             except smtplib.SMTPAuthenticationError,e:                 logger.error(邮箱账户或密码错误:  str(e))         else:             msg  MIMEText(details, plain, utf-8)             msg[subject]  Header(subject, utf-8)             msg[From]  from_addr             msg[To]   ,.join(eval(to_addrs))             smtp  smtplib.SMTP()             try:                 smtp.connect(smtpserver)                 smtp.login(username, passwd)                 smtp.sendmail(sender, eval(to_addrs), msg.as_string())                 logger.info(测试报告发送成功)                 smtp.close()             except smtplib.SMTPAuthenticationError,e:                 logger.error(邮箱账户或密码错误 : str(e)) 用例获取及数据格式化 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #coding:utf-8 import xlrd from logging_save import logger class Get_testcase(object):     def __init__(self, file_path):                  :param file_path: 用例文件路径                  self.file_path  file_path     def readExcel(self):                  读取用例函数         :return: 测试用例列表                  try:             book  xlrd.open_workbook(self.file_path)  # 打开excel         except Exception, error:             logger.error(路径不在或者excel不正确 :   str(error))             return error         else:             sheet  book.sheet_by_index(0)  # 取第一个sheet页             rows  sheet.nrows  # 取这个sheet页的所有行数             case_list  []  # 用于保存用例信息             for i in range(rows):                 if i ! 0:                     case_list.append(sheet.row_values(i)) # 把每一条测试用例添加到case_list中             return case_list 请求url转换 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #coding:utf-8 class urltransform(object):     def __init__(self):         pass     def urltransform(self, url, method, param):                  :return:                  if param  :             new_url  url         else:             if method.upper()  GET:                 new_url  url  ?  param.replace(;, )  #如果有参数且为GET方法则组装url             else:                 new_url  url         return new_url 测试用例excel结构 config目录下config.py   获取配置文件信息的模块 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #conding:utf-8 import ConfigParser class Config(object):     def __init__(self,file_path):         self.config  ConfigParser.ConfigParser()         self.config.read(file_path)     def get_mail_config(self):         login_user  self.config.get(SMTP, login_user)         login_pwd  self.config.get(SMTP, login_pwd)         from_addr  self.config.get(SMTP, from_addr)         to_addrs  self.config.get(SMTP, to_addrs)         smtp_server  self.config.get(SMTP, smtp_server)         port  self.config.get(SMTP, port)         return login_user, login_pwd , from_addr, to_addrs,smtp_server, port     def report_save_config(self):         pass mail.conf 1 2 3 4 5 6 7 8 [SMTP] login_user  18******163.com login_pwd  ****** from_addr   BI18******163.com to_addrs  [18******163.com] #to_addrs [1******qq.com,******.com] smtp_server  smtp.163.com port  25 测试报告 邮件接收结果 Python接口自动化测试零基础入门到精通2023最新版
http://www.dnsts.com.cn/news/76853.html

相关文章:

  • 建筑八大员证报考网站wordpress 顶部白条
  • 一个网站绑定多个域名哪些网站用织梦默认模板
  • 哈尔滨建设银行网站首页网站维护入门教程
  • 机关网站模板承德市住房和城乡建设局官网
  • 兰州北京网站建设九江 网站建设公司
  • 官方网站开发需要几个技术人员会议网站
  • 题库网站建设的绩效指标汕头市住监局官网
  • 桐城市美丽乡村建设专题网站网站建设开题报告书
  • 公司想建个网站怎么弄wordpress管理面板忘记密码
  • 绍兴手机网站建设网站开发的论文
  • 5000做网站网站定制开发 广州
  • 响应式网站是做多大尺寸wordpress 仪表盘美化
  • wordpress网站邀请码自己制作的网站如何发布
  • 都江堰市网站建设招标信息网哪个比较好
  • 网站标题分隔符原阳网站建设
  • 备案号怎么添加到网站太原网站建设价格
  • 一流的低价网站建设网页游戏大厅在线玩
  • 盈利网站网站上传用什么软件做视频教程
  • 5g对网站建设的影响企业查询软件排行榜
  • 怎样免费网站建设为什么不能安装wordpress
  • 做网站建设的有哪些分销系统网站
  • 手机网站首页怎么查一个网站是什么程序做的
  • 网站建设步骤及推广方法oa系统软件
  • 爱站网关键词排名旅游app页面设计图
  • iis 默认网站 删除名师工作室网站建设建议
  • 网站移动窗口代码四川人防工程建设网站
  • 一起做陶艺搬上网站中国的网站做欧美风
  • 做网站视频下载商品的销售网站总体设计
  • 网站开发模板下载网站搜索引擎友好性分析
  • 学校期末评语网站开发电子商务系统建设网站策划书