python smtplib 모듈 자동 메 일 수신 기능(2)

이 어 python smtplib 모듈 자동 메 일 수신 기능(1),python smtplib 모듈 로 메 일 발송 프로그램 을 실 현 했 습 니 다.그럼 이제 우리 가 해결 해 야 할 문 제 는 testreport\디 렉 터 리 에서 최신 생 성 된 보고 서 를 찾 을 수 있 습 니 다.찾 아야 메 일 보 내기 기능 을 우리 의 자동화 테스트 응용 프로그램 에 통합 할 수 있 습 니 다.
1.최신 test 획득report

#coding=utf-8
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import os,datetime,time

result_dir='C:\\Python34\\test_report' # test_report      

lists=os.listdir(result_dir)
print (lists)
lists.sort(key=lambda fn: os.path.getmtime(result_dir+"\\"+fn)
   if not os.path.isdir(result_dir+"\\"+fn) else 0)
print ('      :'+lists[-1])
file=os.path.join(result_dir,lists[-1])
print (file)
F5,실행,획득:

그러면 C:\Python 34\testreport\2016-03-24-16_00_34_result.html 는 최신 testreport
2.자동 발송 메 일 기능 통합
주로 다음 과 같은 몇 가지 부분 을 실현 한다.
1.관련 케이스 를 실행 하여 HTML test report 를 생 성 합 니 다.
2.test report 를 지정 한 메 일 로 보 냅 니 다.
스 크 립 트 바로 올 리 기:

import unittest
import HTMLTestRunner
import os
import time
import datetime

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.header import Header


#      
def sentemail(file_new):
 #    
 sender='[email protected]'
 #    
 receiver='[email protected]'
 #    
 f=open(file_new,'rb')
 mail_body=f.read()
 f.close()
 msg=MIMEText(mail_body,_subtype='html',_charset='utf-8')
 #    
 msg['Subject']=u"        "
 msg['date']=time.strftime('%a, %d %b %Y %H:%M:%S %z')
 smtp=smtplib.SMTP()
 #smtpserver='smtp.263xmail.com'
 smtp.connect('smtp.263xmail.com')
 username='[email protected]'
 password='123456'
 smtp.login(username,password)
 smtp.sendmail(sender,receiver,msg.as_string())
 smtp.quit()
 print ('Email has been sent out!')

#      ,        
def sendreport():
 result_dir='C:\\Python34\\test_report'
 lists=os.listdir(result_dir)
 lists.sort(key=lambda fn: os.path.getmtime(result_dir+"\\"+fn)
   if not os.path.isdir(result_dir+"\\"+fn) else 0)
 #print (u'         :'+lists[-1])
 print (u'         :'+lists[-2])

 #         
 #file_new=os.path.join(result_dir,lists[-1])
 file_new=os.path.join(result_dir,lists[-2])
 print (file_new)
 sentemail(file_new)

listaa='C:\\Python34\\test_case'
def createsuitel():
 testunit=unittest.TestSuite()
 '''discover    '''
 discover=unittest.defaultTestLoader.discover(listaa,
             pattern='UnitTestHtml_*.py',
             top_level_dir=None)
 for test_suite in discover:
  for test_case in test_suite:
   testunit.addTests(test_case)
   print (testunit)
 return testunit
alltestnames=createsuitel()
now = time.strftime('%Y-%m-%d-%H_%M_%S',time.localtime(time.time()))
file_name='C:\\Python34\\test_report\\'+now+'_result.html'
fp = open(file_name, 'wb')
runner =HTMLTestRunner.HTMLTestRunner(
stream=fp,
title=u'        ',
description=u'      :')

if __name__=="__main__": 
 runner.run(alltestnames)
 time.sleep(2)
 sendreport()
 fp.close()
F5 실행,획득:
 
그림 과 같이 메 일 박스 보기:
 
그림 과 같이 메 일 내용 열기:

OK,이렇게 실제 프로젝트 의 자동 메 일 수신 기능 을 실현 했다.
그리고 몇 가지 지식 포인트:
1. os.listdir()
디 렉 터 리 에 있 는 모든 파일 목록 가 져 오기
2. lists.sort()
Python 목록 에 내 장 된 목록 이 있 습 니 다.sort()방법 은 목록 에 있 는 요소 의 위 치 를 바 꾸 는 데 사 용 됩 니 다.
3. key=lambda fn:
key 는 매개 요소 에 비교 값 을 추출 하 는 매개 변 수 를 가 진 함수 입 니 다.기본 값 은 None 입 니 다.즉,모든 요 소 를 직접 비교 하 는 것 입 니 다.
4.os.path.isdir()
isdir()함수 가 디 렉 터 리 인지 여 부 를 판단 합 니 다.
5.lists[-1]
-1 은 파일 목록 의 최대 값,즉 최근 에 만 든 파일 을 가 져 오 는 것 을 나타 낸다.
6.os.path.join()
join()방법 은 문자열 을 연결 하 는 데 사 용 됩 니 다.경로 와 파일 이름 을 연결 하면 디 렉 터 리 에 새로 만 든 파일 이름 의 전체 경 로 를 얻 을 수 있 습 니 다.
7.sentmail(file_new)
sentmail()메 일 함 수 를 정의 하고 매개 변수 file 을 받 습 니 다.new,최신 생 성 된 테스트 보고서 파일 을 받 는 것 을 표시 합 니 다.
8.open(file_new, ‘rb')
최신 생 성 된 테스트 보고서 파일 을 읽 기(rb)방식 으로 엽 니 다.
9.sendreport()
sendreport()를 정의 하여 최신 생 성 된 테스트 보고서 파일 filenew.
이 sample 을 성공 적 으로 실현 하기 전에 다음 과 같은 문제 가 발생 했 습 니 다.
지정 한 메 일 은 정상적으로 메 일 을 받 을 수 있 지만 받 은 메 일의 내용 은 비어 있 습 니 다.이것 은 HTML TestRunner 가 파일 을 보고 하 는 메커니즘 에 의 한 것 입 니 다.테스트 용례 가 실행 되 기 전에 보고 파일 을 생 성 합 니 다.전체 프로그램 이 완전히 실행 되 기 전에 프로그램 이 실행 한 결 과 를 파일 에 기록 하지 않 았 기 때문에 용례 가 실 행 된 후에 메 일 을 보 내 면 메 일의 내용 이 비어 있 습 니 다.
첫 번 째 스 크 립 트 중 두 줄 은 다음 과 같 습 니 다.

print (u'         :'+lists[-1])
#         
file_new=os.path.join(result_dir,lists[-1])
그래서 운행 이 끝 난 후 문제 가 생 겨 지정 한 메 일 은 정상적으로 메 일 을 받 을 수 있 지만 받 은 메 일의 내용 은 비어 있 었 다.스 크 립 트 실행 이 끝나 기도 전에 메 일의 자동 발송 기능 이 실 행 된 것 이다.
따라서 위의 두 줄 을 고 친 스 크 립 트:

print (u'         :'+lists[-2]) 
#         
file_new=os.path.join(result_dir,lists[-2])
따라서 전체 프로그램 이 실행 되 지 않 았 을 때 현재 테스트 보고 서 를 보 낼 수 없습니다.우 리 는 지난번 실행 결과 의 보고 서 를 선택 하여 보 낼 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기