Python 通过配置文件 读取参数,执行测试用例,生成测试报告并发送邮件

时间:2022-06-22 18:34:58

 

 

 

#-*-coding:utf-8-*-
#
测试用例配置参数
#XXXXX
_Uitest->baseinfo->__init__.py


base_url
= "http://XXXXxxxxx.com"
undirect_username
= "XXXX"
undirect_password
= "XXXXX"
direct_username
= XXXXX"
direct_password = "xxxxxx"


#发送邮件配置参数
Smtp_Server = 'smtp.mxhichina.com'
Smtp_Sender
= 'XXXXX@xxx。com'
Smtp_Sender_Password
= 'XXXXXXX'
Smtp_Receiver
= ['XXXXXX@123.cn','SSSSSS@123.cn']


#测试用例及报告路径配置参数
test_dir = './test_case'
test_report
= './test_report/'

 

 

#测试用例,测试代码
#test_cart.py

import unittest
import os

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

class TestCart(unittest.TestCase):

def setUp(self):
print('setup')

self.url
= 'http://www.XXX.mm'
self.driver
= webdriver.Firefox()
self.driver.implicitly_wait(
5)
self.driver.get(self.url)
self.driver.maximize_window()
print("open browser")
#return self.driver

def get_Info(self):
filePath
= os.path.join(os.getcwd(),'user_info')
filename
= filePath + '\\user_info.txt'
print(filename)
fo
= open(filename, 'r')
lines
= fo.readlines()
for data in lines:
name,pwd
= data.split(',')
print(name, pwd)
return name,pwd

def test_to_login(self):
'''验证是否登陆'''
name,pwd
= self.get_Info()
time.sleep(
5)
print(name,pwd)
self.driver.implicitly_wait(
5)
self.driver.find_element_by_id(
'new-username').clear()
self.driver.find_element_by_id(
'new-username').send_keys(name)
self.driver.find_element_by_id(
'new-password').clear()
self.driver.find_element_by_id(
'new-password').send_keys(pwd)
self.driver.implicitly_wait(
5)
#回车登陆,因为登陆按钮不好定位
self.driver.find_element_by_xpath("html/body/div[9]/div[3]/div[1]/div[1]/div[4]/span").send_keys(Keys.ENTER)
self.driver.implicitly_wait(
10)
login_test
= self.driver.find_element_by_xpath(".//*[@id='loginOut']").text
self.assertEqual(login_test,
'[退出]')


def tearDown(self):
print("tearDown")
time.sleep(
5)
print("close browser")
self.driver.quit()

if __name__ == '__main__':
unittest.main()

 

 

 

 

#runtest.py

import smtplib
import unittest
import time
import xlrd
import os
from HTMLTestRunner import HTMLTestRunner
from email.header import Header
from email.mime.text import MIMEText
#导入baseinfo
import baseinfo
from email.mime.multipart import MIMEMultipart


def get_sender():

filePath
= os.path.join(os.getcwd(),'user_info')
print("get_sender")
print(filePath)
fileName
= filePath + '\Mail_info.xlsx'
print(fileName)
readExcel
= xlrd.open_workbook(fileName)
sender
= readExcel.sheet_by_name('sender')
get_sender
= sender.row_values(1)
#print(get_sender)

return get_sender

def get_Receiver():

filePath
= os.path.join(os.getcwd(),'user_info')
fileName
= filePath + '\Mail_info.xlsx'
print("get_Receiver()")
print(fileName)
readExcel
= xlrd.open_workbook(fileName)
receiver_sheet
= readExcel.sheet_by_name('receiver')
receiver_temp
= receiver_sheet.col_values(0)
getReceiver
= receiver_temp[1:]
print(getReceiver)
print(type(getReceiver))
return getReceiver

def get_NewReport(testreport):
dirs
= os.listdir(testreport)
dirs.sort()
newreportname
= dirs[-1]
print('The new report name: {0}'.format(newreportname))
file_new
= os.path.join(testreport, newreportname)
print(file_new)
return file_new

def send_Mail(file_new):
f
= open(file_new, 'rb')
# 读取测试报告正文
mail_body = f.read()
f.close()

try:
     #通过 baseinfo 引用 __init__ 初始化的参数值
smtp
= smtplib.SMTP(baseinfo.Smtp_Server, 25)
sender
= baseinfo.Smtp_Sender
password
= baseinfo.Smtp_Sender_Password
receiver
= baseinfo.Smtp_Receiver
smtp.login(sender, password)

msg
= MIMEMultipart()
# 编写html类型的邮件正文,MIMEtext()用于定义邮件正文
# 发送正文

text
= MIMEText(mail_body, 'html', 'utf-8')
text[
'Subject'] = Header('自动化测试报告', 'utf-8')
msg.attach(text)


# 发送附件
# Header()用于定义邮件标题
msg['Subject'] = Header('自动化测试报告', 'utf-8')
msg_file
= MIMEText(mail_body, 'html', 'utf-8')
msg_file[
'Content-Type'] = 'application/octet-stream'
msg_file[
"Content-Disposition"] = 'attachment; filename="TestReport.html"'
msg.attach(msg_file)
#定义发件人,如果不写,发件人为空
msg['From'] = sender
#定义收件人,如果不写,收件人为空
msg['To'] = ",".join(receiver)

tmp = smtp.sendmail(sender, receiver, msg.as_string())
print(receiver)

print(tmp)
smtp.quit()
return True
except smtplib.SMTPException as e:
print(str(e))
return False


if __name__ == '__main__':
test_dir
= os.path.join(os.getcwd(),'test_case')
print(test_dir)
report_dir
= os.path.join(os.getcwd(),'report')
test_discover
= unittest.defaultTestLoader.discover(test_dir,pattern='test*.py')
print("test_discover")
now
= time.strftime("%Y-%m-%d-%H_%M_%S")
filename
= report_dir+'/result-'+now+'.html'
fp
= open(filename, 'wb')
runner
= HTMLTestRunner(stream = fp, title = 'UI自动化测试报告', description = '用例执行情况')
#runner = unittest.TextTestRunner()
runner.run(test_discover)
fp.close()

new_report
= get_NewReport(report_dir)
mail
= send_Mail(new_report)
if mail:
print("发送成功!")
else:
print("发送失败!")