說明
繼實第一個實戰項目的基礎上添加自動發送報告郵件接口,代碼有部分調整
變動
1.增加文本文檔SendToUserinfo.txt 用來保存郵件接收者的信息
2.修改測試報告文件名稱格式並添加reprot目錄保存測試報告
3.添加代碼註釋,更方便閱讀
項目目錄
代碼
修改過的代碼直接貼上,沒修改的代碼就不貼了,可以去實戰一直接拿過來用就ok
1 #! user/bin/python 2 ''' 3 代碼說明:麥子學院登錄模塊自動化測試用例腳本 4 編寫日期: 5 設置者:linux超 6 ''' 7 8 import time 9 from selenium import webdriver 10 from webinfo import webinfo 11 from userinfo import userinfo 12 from log_fiile import login_log 13 from send_email import send_mail_init_info,read_SendToUserinfo_file 14 15 #account = '[email protected]' 16 def open_web(): 17 ''' 18 :return:web句柄 19 ''' 20 driver = webdriver.Firefox() 21 driver.maximize_window() 22 return driver 23 24 def load_url(driver,ele_dict): 25 ''' 26 :param driver: web主頁面句柄 27 :param ele_dict: web信息字典(從文件中讀取) 28 :return: 無 29 ''' 30 driver.get(ele_dict['Turl']) 31 time.sleep(5) 32 33 def find_element(driver,ele_dict): 34 ''' 35 :param driver: web句柄 36 :param ele_dict: web信息字典(從文件中讀取) 37 :return: 返回找到的元素 38 ''' 39 driver.find_element_by_class_name(ele_dict['image_id']).click() 40 if 'text_id' in ele_dict: 41 driver.find_element_by_link_text('登錄').click() 42 43 user_id = driver.find_element_by_id(ele_dict['userid']) 44 pwd_id = driver.find_element_by_id(ele_dict['pwdid']) 45 login_id = driver.find_element_by_id(ele_dict['loginid']) 46 return user_id,pwd_id,login_id 47 48 def send_val(ele_tuple,arg): 49 ''' 50 :param ele_tuple: web元素 51 :param arg: 可變長參數,接收用戶名和密碼 52 :return: 無 53 ''' 54 # input userinfo 55 listkey = ['uname','pwd'] 56 i = 0 57 for key in listkey: 58 ele_tuple[i].send_keys('') 59 ele_tuple[i].clear() 60 ele_tuple[i].send_keys(arg[key]) 61 i+=1 62 ele_tuple[2].click() 63 # 判斷登錄是否成功,並寫入測試報告 64 def check_login(driver,ele_dict,log,userlist): 65 ''' 66 :param driver: web句柄 67 :param ele_dict: 讀取到的元素信息(文件中讀到的) 68 :param log: login_log對象 69 :param userlist: 用戶信息(文件中讀取) 70 :return: False or Ture 71 ''' 72 result = False 73 time.sleep(3) 74 try: 75 err = driver.find_element_by_id(ele_dict['error']) 76 driver.save_screenshot(err.text+'.png') 77 log.log_write('賬號:%s 密碼:%s 提示信息:%s:failed\n' %(userlist['uname'],userlist['pwd'],err.text)) 78 79 print('username or password error') 80 except: 81 print('login success!') 82 log.log_write('賬號:%s 密碼:%s :passed\n'%(userlist['uname'],userlist['pwd'])) 83 #login_out(driver,ele_dict) 84 return True 85 return result 86 # 登出 87 def login_out(driver,ele_dict): 88 time.sleep(5) 89 driver.find_element_by_class_name(ele_dict['logout']).click() 90 ''' 91 def screen_shot(err): 92 i = 0 93 save_path = r'D:\pythondcode\capture' 94 capturename = '\\'+str(i)+'.png' 95 wholepath = save_path+capturename 96 if Path(save_path).is_dir(): 97 pass 98 else: 99 Path(save_path).mkdir() 100 while Path(save_path).exists(): 101 i+=1 102 capturename = '\\'+str(i)+'.png' 103 wholepath = save_path + capturename 104 err.screenshot(wholepath) 105 ''' 106 107 def login_test(): 108 log = login_log() 109 msg = read_SendToUserinfo_file(r'D:\pythoncode\login_test\SendToUserinfo.txt') 110 sendmail = send_mail_init_info('smtp.qq.com','[email protected]','gifhhsbgqyovbhhc','[email protected]',msg) 111 #ele_dict = {'url': 'http://www.maiziedu.com/', 'text_id': '登錄', 'user_id': 'id_account_l', 'pwd_id': 'id_password_l' 112 #, 'login_id': 'login_btn','image_id':'close-windows-btn7','error_id':'login-form-tips'} 113 ele_dict = webinfo(r'D:\pythoncode\webinfo.txt') 114 #user_list=[{'uname':account,'pwd':pwd}] 115 user_list = userinfo(r'D:\pythoncode\userinfo.txt') 116 driver = open_web() 117 # load url 118 load_url(driver,ele_dict) 119 #find element 120 ele_tuple = find_element(driver,ele_dict) 121 # send values 122 ftitle = time.strftime('%Y-%m-%d', time.gmtime()) 123 log.log_write('\t\t\t%s登錄系統測試報告\n' % (ftitle)) 124 # 循環用戶測試數據 125 for userlist in user_list: 126 send_val(ele_tuple,userlist) 127 # check login success or failed 128 result = check_login(driver,ele_dict,log,userlist) 129 if result: 130 login_out(driver,ele_dict) 131 time.sleep(3) 132 ele_tuple = find_element(driver,ele_dict) 133 134 time.sleep(3) 135 log.log_close() # 關閉log文件 136 # 發送報告到指定的郵箱 137 sendmail.send_email(log.filename) 138 driver.quit() 139 if __name__ == '__main__': 140 login_test()
1 #! user/bin/python 2 ''' 3 代碼說明:測試輸出報告 4 編寫日期: 5 設置者:linux超 6 ''' 7 8 import time 9 # 測試報告輸出接口 10 class login_log(object): 11 filename = './report/' + time.strftime('%Y-%m-%d %H_%M_%S') + '.txt' 12 def __init__(self,path='./report/',mode='w'): 13 #filename = path + time.strftime('%Y-%m-%d %H_%M_%S') +'.txt' 14 self.log = open(self.filename,mode) 15 def log_write(self,msg): 16 self.log.write(msg) 17 def log_close(self): 18 self.log.close() 19 if __name__ == '__main__': 20 log=login_log() 21 log.log_write('xiaochao11520') 22 mas = log.filename 23 print(mas) 24 log.log_close()
1 #! user/bin/python 2 ''' 3 代碼說明:通過郵件發送測試報告 4 編寫日期:2018.07.17 5 設置者:linux超 6 ''' 7 8 import smtplib 9 from email.mime.text import MIMEText 10 from email.header import Header 11 # 郵件發送接口 12 class send_mail_init_info(object): 13 ''' 14 郵件配置信息 15 ''' 16 def __init__(self,server,fromuser,frompassword,sender,receiver): 17 self.server = server 18 self.fromuser = fromuser 19 self.frompassword = frompassword 20 self.sender = sender 21 self.receiver = receiver 22 ''' 23 配置郵件發送者等信息 24 ''' 25 def send_email(self,filename): 26 # 打開報告文件讀取文件內容 27 #filename = './report/'+ time.strftime('%Y-%m-%d %H_%M_%S') 28 f = open(filename,'r') 29 file_msg = f.read() 30 print(filename) 31 print(file_msg) 32 f.close() 33 # 郵件服務器 34 smtpserver = self.server 35 # 發件人用戶名和密碼 36 user = self.fromuser 37 password = self.frompassword 38 # 發件人 39 sender = self.sender 40 # 收件人 41 receiver = self.receiver 42 # 郵件主題 43 subject = 'Python test report' #+ filename 44 # 郵件設置 45 msg = MIMEText(file_msg,'html','utf-8') 46 msg['subject'] = Header(subject,'utf-8') 47 msg['from'] = sender 48 # 連接服務器,登錄服務器,發送郵件 49 self.smtp = smtplib.SMTP() 50 self.smtp.connect(smtpserver) 51 self.smtp.login(user,password) 52 try: 53 self.smtp.sendmail(sender, receiver, msg.as_string()) 54 except Exception as e: 55 print('send failed', e) 56 else: 57 print('send success!') 58 def __del__(self): 59 self.smtp.quit() 60 # 從文件中讀取郵件接收人信息 61 def read_SendToUserinfo_file(filename): 62 ''' 63 :param filename: 讀取接收郵件人信息 64 :return: 接手郵件人信息 65 ''' 66 open_file = open(filename) 67 read_msg = open_file.read() 68 return read_msg 69 if __name__ == '__main__': 70 #send_email('./report/2018-07-16 13_09_21.txt') 71 read_msg=read_SendToUserinfo_file(r'D:\pythoncode\login_test\SendToUserinfo.txt') 72 sendmail = send_mail_init_info('smtp.qq.com','[email protected]','gifhhsbgqyovbhhc','[email protected]',read_msg) 73 sendmail.send_email('./report/2018-07-16 13_09_21.txt')
剛測試這裏面的def read_SendToUserinfo_file(filename) 方法有點問題,現在修改一下,如下:
1 def read_SendToUserinfo_file(filename): 2 ''' 3 :param filename: 讀取接收郵件人信息 4 :return: 接手郵件人信息 5 ''' 6 open_file = open(filename) 7 #read_msg = open_file.read() 8 #return read_msg 9 for line in open_file: 10 msg = [i.strip() for i in line.split(',')] 11 print(msg) 12 return msg
總結
目前這個小項目所有最基本的功能都有了 , 我會慢慢的再完善,畢竟是學習,希望把它完善的越來越好,自己動手知識記得的牢固一點