采用PO设计模式:
目录结构:
qq_test:项目名称
- driver:可以存放不同浏览器的驱动文件
- package:存放自动化所用到的扩展包
- qq:
-
- qq_case
-
- model:公共配置的函数及公共类
-
-
- page_obj:测试用例的页面对象
-
-
-
- test*.py:测试用例
-
- run_test:执行所有测试用例,并生成测试报告
base_el:对每个页面都可能用到的函数进行了定义
#coding=utf-8
class Page(object):
def __init__(self,driver):
self.driver=driver
self.timeout=30
def find_element(self,*loc):
return self.driver.find_element(*loc)
def script(self,src):
return self.driver.ececute_script(src)
def js_scroll_end(self):
js_heig = "window.scrollTo(0, document.body.scrollHeight)"
self.driver.execute_script(js_heig)
def open(self,url="https://mail.qq.com"):
self.driver.get(url)
sendmailPage.py:对qq写信界面进行了函数封装
#coding=utf-8
from selenium.webdriver.common.by import By
import base_el
import unittest
class sendmailPage(base_el.Page):
sendmail_write_loc=(By.LINK_TEXT,u"写信")#点击写信
sendmail_frame_loc="mainFrame"#切换到写信界面
sendmail_rec_loc=(By.CSS_SELECTOR,'#toAreaCtrl > div.addr_text > input.js_input')#收件人
sendmail_sub_loc=(By.ID,"subject")#主题
sendmail_textFrame_loc='//iframe[@scrolling="auto"]'#切换写信的框架
sendmail_text_loc=(By.XPATH,"html/body")
sendmail_send_loc=(By.LINK_TEXT,u"发送")
def type_write(self):
self.find_element(*self.sendmail_write_loc).click()
def switch_toText_frame(self,sendmail_frame_loc):
return self.driver.switch_to.frame(sendmail_frame_loc)
def sendmail_rec(self,rec):
self.find_element(*self.sendmail_rec_loc).send_keys(rec)
def sendmail_sub(self,sub):
self.find_element(*self.sendmail_sub_loc).send_keys(sub)
def sendmail_textFrame(self,sendmail_textFrame_loc):
return self.driver.switch_to.frame(self.driver.find_element_by_xpath(sendmail_textFrame_loc))#到写正文的框架
def sendmail_text(self,text):
self.find_element(*self.sendmail_text_loc).send_keys(text)
def sendmail_send(self):
self.find_element(*self.sendmail_send_loc).click()
def sendmail_login1(self,rec,sub,text,frame1='mainFrame',frame2='//iframe[@scrolling="auto"]'):#不能命名test* 要有self
self.type_write()
self.switch_toText_frame(frame1)#切换到写收件人框架
self.sendmail_rec(rec)
self.sendmail_sub(sub)
self.driver.switch_to.default_content()#回到topwindow
self.switch_toText_frame(frame1)#切换到写收件人框架
self.sendmail_textFrame(frame2)#切换到写信框架
self.sendmail_text(text)#写信
self.driver.switch_to.parent_frame()#回到上层
self.sendmail_send()
if __name__ == '__main__':
unittest.main()
run_test:执行所有测试用例,并生成测试报告
#coding=utf-8
import unittest
import HTMLTestRunner
import os,time
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import sys
reload(sys)# Python2.5 初始化后删除了 sys.setdefaultencoding 方法,我们需要重新载入
sys.setdefaultencoding('utf8')
def new_report(testreport):
lists=os.listdir(testreport)#用于获取目录下的所有文件列表
lists.sort(key=lambda fn:os.path.getmtime(testreport+"\\"+fn))
file_new=os.path.join(testreport,lists[-1])
print(file_new)
return file_new
def send_mail(file_new):
f=open(file_new,"rb")
mail_body=f.read()
f.close()
smtserver="smtp.qq.com" #设置服务器
mail_user="********@qq.com" #用户名
mail_pass="dwvv" #口令 (隐藏了)
sender = '*****@qq.com' #发送邮箱的地址
receiver = '*******@qq.com' # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
message = MIMEText(mail_body,"html",'utf-8')
message['From'] = Header(u'ma', 'utf-8')
message['To'] = Header(u'jin','utf-8')
message['Subject'] = Header('测试报告', 'utf-8')#邮件标题
message["date"]=time.strftime("%a, %d %b %Y %H:%M:%S %z")
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(smtserver) # 25 为 SMTP 端口号
smtpObj.login(mail_user,mail_pass)
smtpObj.sendmail(sender, receiver, message.as_string())
print "邮件发送成功"
except smtplib.SMTPException as msg:
print(msg)
if __name__ == "__main__":
now=time.strftime("%Y_%m_%d_%H_%M_%S")
filename = './qq/report/'+ now +'result.html'
fp=open(filename,'wb')#打开该文件,没有的话自动创建
runner = HTMLTestRunner.HTMLTestRunner(stream=fp,
title=u"测试报告", # 浏览器及报告title
description=u'用例执行情况:')
try:
#casePath='D:\\jin_python\\qq_test\\qq\qq_case\\'
casePath= 'E:\\learn\\qq_test\\qq\qq_case\\'
discover=unittest.defaultTestLoader.discover(start_dir=casePath)#加载所有的"test*."开头的用例
#print(discover)
runner.run(discover)
except Exception as msg:
print(msg)
fp.close()
file_path=new_report('./qq/report/')
send_mail(file_path)