Commit ec46228e by zhangchunyao

code commit

parent 6a164efd
apiAutoByJenkins @ ee10ebab
Subproject commit ee10ebab9cbf5be98302a39730643b69c0421508
from common.Http import Http
from common.Excel import Reader, Writer
import unittest
import json,ddt
http = Http()
reader = Reader()
writer = Writer()
#reader.open_excle('D:/dminterfacetest/repot/testcase.xls')
reader.open_excle('/opt/apitest/apiAutoByJenkins/repot/testcase.xls')
sheetname = reader.get_sheets()
#writer.copy_open('D:/dminterfacetest/repot/testcase.xls', 'D:/dminterfacetest/repot/testcase1.xls')
writer.copy_open('/opt/apitest/apiAutoByJenkins/repot/testcase.xls', 'opt/apitest/apiAutoByJenkins/repot/testcase1.xls')
sheetname1 = writer.get_sheets()
writer.set_sheet(sheetname1[0])
for sheet in sheetname:
# 设置当前读取的sheet页面
reader.set_sheet(sheet)
data = reader.dict_data()
#print(data)
@ddt.ddt
class Run(unittest.TestCase):
@classmethod
def setUp(self):
pass
def runner(self,line,http):
if len(line[0])>0 or len(line[1])>0:
return
if line[3] == 'post':
result = http.post(line[4], line[5], line[6])
return result
if line[3] == 'addheader':
result = http.addheader(line[4])
return result
if line[3] == 'assertquals':
result = http.assertquals(line[4], line[5])
return result
if line[3] == 'savejson':
result = http.savejson(line[4], line[5])
return result
if line[3] == 'clear_values':
http.clear_values()
return
if line[3] == 'assertquals_int':
result = http.assertquals_int(line[4], line[5])
return result
if line[3] == 'seturl':
result = http.seturl(line[4])
return result
if line[3] == 'Addjson':
result = http.Addjson(line[4])
return result
if line[3] == 'Database_query':
result = http.Database_query(line[4],line[5])
return result
if line[3] =='get':
result = http.get(line[4], line[5], line[6])
return result
@ddt.data(*data)
def test_run(self,data):
result = self.runner(reader.readline_new(data[-1]), http)
if result != None:
print(result)
results = json.dumps(result)
writer.write(data[-1], 7, results)
writer.save_close()
if __name__ == '__main__':
run = Run()
run.test_run()
\ No newline at end of file
from common.Excel import Reader, Writer
from common.Http import InterFace
from xlutils.copy import copy
import unittest
import json
import ddt
reader = Reader()
writer = Writer()
inter = InterFace()
APIPATH = '/opt/apitest/apiAutoByJenkins/repot/apitest.xls'
#APIPATH = 'D:/workSpace/Python_workspace/apitestunit.xls'
br = reader.open_excle(APIPATH)
sheetname = reader.get_sheets()
bw = copy(br)
data = reader.sheet_cont()
@ddt.ddt
class Run(unittest.TestCase):
@classmethod
def setUp(self):
pass
@ddt.data(*data)
def test_run(self,data):
result = inter.dosheet(br, bw, data)
print(result)
def tearDown(self):
inter.xlsx_save(bw, APIPATH)
if __name__ == '__main__':
run = Run()
run.test_run()
\ No newline at end of file
import os,xlrd
from xlutils.copy import copy
class Reader:
'''
by LiangChao
at 2019/7/11
用来读取Excel文件内容
'''
def __init__(self):
#整个excel工作簿缓存
self.workbook=None
#当前工作簿sheet
self.sheet=None
#当前sheet的行数
self.rows=0
#当前读取到的行数
self.cols = 0
self.r=0
self.key_num = []
#打开Excel
def open_excle(self,srcfile):
#如果打开的文件不存在,就报错
if not os.path.isfile(srcfile):
print("error:%s not exist!" % (srcfile))
return
#设置读取exel使用utf8编码
xlrd.Book.encoding="utf8"
#读取EXCEL内容到缓存wordbook
self.workbook=xlrd.open_workbook(filename=srcfile)
#选取第一个sheet页面
self.sheet=self.workbook.sheet_by_index(0)
#设置rows为当前sheet行数
self.rows=self.sheet.nrows
self.cols = self.sheet.ncols
#设置默认读取为第一行
self.r=0
return self.workbook
#获取sheet页面
def get_sheets(self):
#通过sheet名字,切换sheet页面
sheets=self.workbook.sheet_names()
return sheets
#切换sheet页面
def set_sheet(self,name):
#通过sheet名字,切换sheet页面
self.sheet=self.workbook.sheet_by_name(name)
self.rows=self.sheet.nrows
self.r=0
return
#逐行读取
def readline(self):
row1=None
#如果当前还没到最后一行,则往下读取一行
if self.r<self.rows:
#读取第r行的内容
row=self.sheet.row_values(self.r)
#设置下一次读取r的下一行
self.r=self.r+1
#辅助遍历行里面的列
i=0
row1=row
#把读取的数据都变成字符串
for strs in row:
row1[i]=str(strs)
i=i+1
return row1
def dict_data(self):
if self.rows <= 1:
print("总行数小于1")
else:
r = []
for i in list(range(self.rows - 1)):
# 从第二行取对应values值
value = self.sheet.row_values(i+1)
values = value[2:4]
if values[0] !='' :
values.append(i+1)
#self.key_num.append(i+2)
r.append(values)
return r
def sheet_cont(self,):
cont = self.sheet.nrows
r = []
for i in range(1,cont):
r.append(i)
return r
def readline_new(self,num):
# num = self.key_num
row1 = None
# 如果当前还没到最后一行,则往下读取一行
if num < self.rows:
# 读取第r行的内容
row = self.sheet.row_values(num)
# 辅助遍历行里面的列
i = 0
row1 = row
# 把读取的数据都变成字符串
for strs in row:
row1[i] = str(strs)
i = i + 1
return row1
class Writer:
'''
by kongwen 2019/7/8 用来复制写入excel
'''
def __init__(self):
#读取需要的复制excel
self.workbook=None
#拷贝的工作簿
self.wb=None
#当前工作的sheet页
self.sheet=None
#记录生成的文件,用来保存
self.df=None
#记录写入的行
self.row=0
#记录写入的列
self.clo=0
#复制并打开excel
def copy_open(self,srcfile,dstfile):
#判断要复制的文件是否存在
if not os.path.isfile(srcfile):
print(srcfile+" not exist")
return
#判断要新建的文件是否存在,存在则提示
if os.path.isfile(dstfile):
print("warning:"+dstfile+"file already exist")
#记录要保存的文件
self.df=dstfile
#读取EXCEL到缓存
#formatting_info带格式的复制
self.workbook=xlrd.open_workbook(filename=srcfile,formatting_info=True)
#拷贝
self.wb=copy(self.workbook)
#默认使用第一个sheet
#sheet=wb.get_sheet('Sheet1')
return
#获取sheet页面
def get_sheets(self):
#获取所有sheet的名字,并返回第一个列表
sheets=self.workbook.sheet_names()
#print(sheets)
return sheets
#切换sheet页面
def set_sheet(self,name):
#通过sheet名字,切换sheet页面
self.sheet=self.wb.get_sheet(name)
return
#写入指定单元格,保留原格式
def write(self,r,c,value):
#获取写入的单元格
def _getCell(sheet,r,c):
#获取行
row=sheet._Worksheet__rows.get(r)
if not row:
return None
#获取单元格
cell=row._Row__cells.get(c)
return cell
#获取要写入的单元格
cell=_getCell(self.sheet,r,c)
#写入值
self.sheet.write(r,c,value)
if cell:
#获取要写入的单元格
ncell=_getCell(self.sheet,r,c)
if ncell:
#设置写入后格式和写入前一样
ncell.xf_idx=cell.xf_idx
return
#保存
def save_close(self):
#保存复制后的文件到硬盘
self.wb.save(self.df)
return
#调试
if __name__ == '__main__':
reader=Reader()
reader.open_excle('/Users/niweizhong/Desktop/case1.xls')
sheetname=reader.get_sheets()
for sheet in sheetname:
#设置当前读取的sheet页面
reader.set_sheet(sheet)
for i in range(reader.rows):
print(reader.readline())
writer=Writer()
writer.copy_open('/Users/niweizhong/Desktop/case1.xls','/Users/niweizhong/Desktop/case2.xls')
sheetname=writer.get_sheets()
writer.set_sheet(sheetname[0])
writer.write(1,1,'William')
writer.save_close()
This diff is collapsed. Click to expand it.
#coding=utf-8
import smtplib
from email.mime.text import MIMEText #MIMRText()定义邮件正文
from email.mime.multipart import MIMEMultipart #MIMEMulipart模块构造带附
def sendResultMail(smtpSever,sendUser,sendPwd,recvUser,reportName):
#发送邮件的服务器
#smtpserver = 'smtp.sina.com'
smtpserver =smtpSever
#发送邮件用户和密码
#user ="xxx@sina.com"
#password = "xxx"
user = sendUser
password = sendPwd
#发送者
#sender = "xxx@sina.com"
sender = sendUser
#接收者
#receiver = "1xxx@qq.com"
receiver = recvUser
#邮件主题
subject = "接口自动化执行结果"
#发送附件
sendfile = open(reportName,"rb").read()
att = MIMEText(sendfile,"base64","utf-8")
att["Content-Type"] = "application/octet-stream"
att["Content-Disposition"] = "attachment;filename = 'autoInterfaceResult.html'"
#msghtml = MIMEText('<h1 style="color:red;font-size:100px">各位好,附件为接口自动化测试详细结果,请查阅</h1><img src="cid:small">', 'html', 'utf-8')
msghtml = MIMEText('<h2 style="color:red;font-size:50px">各位好,附件为接口自动化测试详细结果,请查阅</h2>', 'html', 'utf-8')
#msg = MIMEText('接口自动化测试结果', 'plain', 'utf-8')
msgRoot = MIMEMultipart('related')
msgRoot['Subject'] = subject
msgRoot['from'] = "测试服务器"
msgRoot['To'] = receiver
msgRoot.attach(att)
msgRoot.attach(msghtml)
#msgRoot.attach(msg)
smtp = smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(user,password)
smtp.sendmail(sender,receiver,msgRoot.as_string())
smtp.quit()
import unittest
import HTMLTestReportCN
import time
from common.Mail import sendResultMail
#case_dir = 'D:/workSpace/Python_workspace/myPython/.idea/interfaceTest_ddt/case'
#report_dir = 'D:/workSpace/Python_workspace/myPython/.idea/interfaceTest_ddt/repot'
case_dir = '/opt/apitest/apiAutoByJenkins/case'
report_dir = '/opt/apitest/apiAutoByJenkins/repot'
discover = unittest.defaultTestLoader.discover(case_dir,pattern='test*.py')
now = time.strftime('%Y-%m-%d %H_%M_%S')
report_name = report_dir+'/'+now+' test_report.html'
with open(report_name, 'wb') as f:
runner = HTMLTestReportCN.HTMLTestRunner(stream=f, title='接口自动化测试报告', description='接口测试用例执行情况', tester='jenkins')
runner.run(discover)
smtpSer ="smtp.exmail.qq.com"
# 测试服务器群发测试组成员
sendUser ="apitest@demogic.com"
sendPwd ="Api@201906"
recvUser ="test@demogic.com"
#recvUser = "zhangchunyao@demogic.com"
sendResultMail(smtpSer,sendUser,sendPwd,recvUser,report_name)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment