第一個Python&Selenium項目實戰-添加發送HTML測試報告郵件

說明

  繼實第一個實戰項目的基礎上添加自動發送報告郵件接口,代碼有部分調整

變動

  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()
login_test.py
 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()
log_fiile.py
 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')
send_email.py

剛測試這裏面的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

總結

目前這個小項目所有最基本的功能都有了 , 我會慢慢的再完善,畢竟是學習,希望把它完善的越來越好,自己動手知識記得的牢固一點

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章