说明

  继第一个实战项目的基础上添加自动发送报告邮件接口,代码有部分调整

变动

  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 = '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': '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','281754043@qq.com','gifhhsbgqyovbhhc','281754043@qq.com',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

1   281754043@qq.com,486668776@qq.com

总结

  目前这个小项目所有最基本的功能都有了 , 我会慢慢的再完善,毕竟是学习,希望把它完善的越来越好,自己动手知识记得的牢固一点。

原文链接:

https://www.cnblogs.com/linuxchao/p/linuxchao-autotest-1-sendemail.html

本文为51Testing经授权转载,转载文章所包含的文字来源于作者。如因内容或版权等问题,请联系51Testing进行删除。

推荐阅读

点击阅读☞您如何使用Selenium来计算自动化测试的投资回报率?

点击阅读☞什么是Selenium Webdriver中的显式等待与隐式等待?

点击阅读☞Selenium 或 Splinter 定位不到元素?可能是 frame 在搞鬼!

点击阅读☞Selenium+Python面试题目总结,看看你会多少?

点击阅读☞快速掌握Python自动化测试之DDT数据驱动!

html项目_Python Selenium项目实战之添加发送HTML测试报告邮件!相关推荐

  1. python海龟图画龙珠_Python selenium+webdriver 实战龙珠直播

    selenium是一个自动化的web应用测试工具,直接可以运行在浏览器中模拟用户进行操作,有点类似于机器人,可以模拟用户进行点击,登陆,输入等操作. webdriver可以看成是驱动器,用来驱动我们的 ...

  2. python视频网站项目_Python Flask 项目实战—构建微电影视频网站

    下单后联系在线客服索取下载链接 课程章节 第1章 课程介绍 1-1 课程导学 1-2 课程介绍 第2章 准备开发环境 2-1 windows环境搭建 2-2 mac os环境搭建 2-3 virtua ...

  3. python如何批量下载邮箱全部附件_Python编写执行测试用例及定时自动发送最新测试报告邮件...

    环境准备: 操作系统:Windows7 集成开发环境:eclipse+pydev 一.编写测试用例 可以直接使用Python自带的单元测试框架unittest来编写自动化测试用例,利用其组织测试用例, ...

  4. python练习项目_python练习项目

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 这是<python基础教程>后面的实践,照着写写,一方面是来熟悉py ...

  5. python实现一个简单的项目_Python小项目四:实现简单的web服务器

    本博客是整理在学习实验楼的课程过程中记录下的笔记形成的,参考:https://www.shiyanlou.com/courses/552.不同之处在于实验楼使用python2.7,而博主这里使用的是p ...

  6. python视频网站项目_Python超羽量级灵活框架 Flask实战微电影视频网站 大小项目通吃 Flask实战项目...

    课程名称: Python超羽量级灵活框架 Flask实战微电影视频网站 大小项目通吃 Flask实战项目视频教程 课程简介: Flask作为Python编写的Web小型框架,可以使用Python快速开 ...

  7. 【Selenium项目实战】项目环境搭建:安装JDK、mysql、Tomcat、jpress和测试系统

    前言 一直想学习自动化测试,但是都没行动,业余时间学习零零碎碎并记录20210416. [Selenium项目实战] 项目环境搭建:安装JDK.mysql.Tomcat.jpress和测试系统 需求分 ...

  8. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(五)

    基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(五) 转载于:https://github.com/Meowv/Blog 上篇文章完成了文章详情页数据查询和清除缓存 ...

  9. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(四)

    基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(四) 转载于:https://github.com/Meowv/Blog 上篇文章完成了文章增删改的接口和友情链接列 ...

最新文章

  1. openapi开放平台架构_适用于所有人的MicroProfile OpenAPI
  2. matlab对比度锐化,对比度、清晰度与锐化的理解
  3. NLP之BoWNLTK:自然语言处理中常用的技术——词袋法Bow、NLTK库
  4. php 递归函数自调用函数,PHP闭包实现函数的自调用实现递归
  5. 将单词的首字母改为大写
  6. 动手学CV-目标检测入门教程4:模型结构
  7. ThinkPHP框架 _ 学习5
  8. 李开复谈创业失败十原因:经不住诱惑 直接山寨
  9. opencv4 图像特征匹配_【从零学习OpenCV 4】图像模板匹配
  10. POJ 1330 Nearest Common Ancestors(LCA Tarjan算法)
  11. 多线程之同步synchronized的使用不当造成java.lang.IllegalMonitorStateException 异常
  12. windows server 2012 R2 安装 vc2015 报错 0x80240017
  13. 台式计算机有哪些部分组成,常用台式电脑的基本组成
  14. 怎样将图片变成圆形?教你裁剪图片的方法
  15. 【产品经理】产品经理进阶之路(六):互联网思维详解
  16. 计算机软件对英语,计算机软件英语论文
  17. java神雕侠侣1古墓情缘游戏攻略_《神雕侠侣》古墓派加点详解攻略
  18. 开源一个win10二十四节气壁纸自动更换的程序
  19. 基于51单片机的故障灯检测
  20. 面试 | 什么是内部类?成员内部类、静态内部类、局部内部类和匿名内部类的区别及作用?

热门文章

  1. 今晚7点30,腾讯专家与你共探广告智能创意新可能
  2. python通过代理发送邮件_使用Python通过SMTP发送邮件
  3. mysql树形结构的效率_MySQL存储树形数据优化技笔记
  4. python win7 win10_Python如何获取Win7,Win10系统缩放大小
  5. 如何正确使用广告素材、优化Facebook广告
  6. iphone通知和android,手机App 通知数量太多,让你备感压力吗?教你如何消除令人心烦的信息通知(iPhone、Android)...
  7. JAVA开发面试常问问题总结1
  8. Leetcode每日一题:3.无重复字符的最长子串
  9. 数学建模-3.插值算法
  10. LeetCode刷题(18)