摘要:本文将带你了解软件测试技术之自动化测试项目实战一(增加自动发送邮件报告接口),希望对大家学测试技术有所帮助
本文将带你了解软件测试技术之自动化测试项目实战一(增加自动发送邮件报告接口),希望对大家学测试技术有所帮助
python3.6+selenium3.13 自动化测试项目实战一(增加自动发送邮件报告接口)
说明:继实战项目一的基础上添加自动发送报告邮件接口,代码有部分调整,可以结合实战一和上篇文章学习
变动:
1.增加文本文档SendToUserinfo.txt 用来保存邮件接收者的信息
2.修改测试报告文件名称格式并添加reprot目录保存测试报告
3.添加代码注释,更方便阅读
项目目录:
代码:
修改过的代码直接贴上,没修改的代码就不贴了,可以去实战一直接拿过来用就ok
login_test.py
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 = '281754043@qq.com'
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','281754043@qq.com','gifhhsbgqyovbhhc','281754043@qq.com',msg)
111 #ele_dict = {'url': '//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()
View Code
log_fiile.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()
View Code
send_email.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','281754043@qq.com','gifhhsbgqyovbhhc','281754043@qq.com',read_msg)
73 sendmail.send_email('./report/2018-07-16 13_09_21.txt')
View Code
刚测试这里面的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
SendToUserinfo.txt 文件内的信息用‘,’号分割开
1 281754043@qq.com,486668776@qq.com
View Code
总结:目前这个小项目所有最基本的功能都有了 , 我会慢慢的再完善,毕竟是学习,希望把它完善的越来越好,自己动手知识记得的牢固一点
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标软件测试之测试技术频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号