用例 1:
测试百度搜索蓝宝石,断言搜出来的页面的 title 是否正确
用例 2:
测试360搜索蓝宝石,并生成测试报告
目录结构 如下
model
driver_cls.py
from selenium import webdriver
# 启动浏览器驱动
def browser():
# driver=webdriver.Firefox()
driver = webdriver.Chrome()
return driver
# 调试运行
if __name__ == '__main__':
browser()
base_cls.py
from selenium.webdriver.common.action_chains import ActionChains
class Base():
def __init__(self,driver):
self.driver = driver
# id 选择器
def by_id(self,url):
return self.driver.find_element_by_id(url)
# selector 选择器
def selector(self,path):
return self.driver.find_element_by_css_selector(path)
# xpath 选择器
def xpath(self,path):
return self.driver.find_element_by_xpath(path)
#打开页面
def open(self,url):
return self.driver.get(url)
# 双击
def double_click(self,val):
return ActionChains(self.driver).double_click(val).perform()
# 右键
def context_click(self,val):
return ActionChains(self.driver).context_click(val).perform()
# 元素是否存在
def is_element_exist(self,element):
flag=True
try:
self.selector(element)
return flag
except:
flag=False
return flag
unit_cls.py
import unittest
from driver_cls import *
class TestBase(unittest.TestCase):
def setUp(self):
self.driver = browser()
self.driver.implicitly_wait(10)
self.driver.maximize_window()
def tearDown(self):
self.driver.quit()
mail_cls.py
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
import os
def send_mail(latest_report):
smtpserver = 'smtp.qq.com'
user = '576530483@qq.com'
password = 'vxcq************'
sender = '576530483@qq.com'
receviers = ['mshxuyi@163.com', 'mshxuyi@qq.com']
# 主题
subject = 'Pyhon 自动化测试报告'
# 构建附件内容
send_file = open(latest_report, 'rb').read()
filename = os.path.basename(latest_report)
enclosure = MIMEText(send_file, 'base64', 'utf-8')
enclosure['Content-type'] = 'application/octet-stream'
enclosure['Content-Disposition'] = 'attachment;filename="'+filename+'"'
# 内容
f=open(latest_report,'rb')
mail_content = f.read()
f.close()
# 构建发送与接收信息
msg = MIMEMultipart()
msg.attach(MIMEText(mail_content, 'html', 'utf-8'))
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = sender
msg['To'] = ','.join(receviers)
msg.attach(enclosure)
smtp = smtplib.SMTP_SSL(smtpserver, 465)
smtp.helo(smtpserver)
smtp.ehlo(smtpserver)
smtp.login(user, password)
print("Send Mail Start...")
smtp.sendmail(sender, receviers, msg.as_string())
smtp.quit()
print("Send Mail end...")
def lateset_report(report_dir):
lists = os.listdir(report_dir)
print(lists)
lists.sort(key=lambda fn:os.path.getatime(report_dir + '\\' + fn))
print("the latest report is " + lists[-1])
file = report_dir + '/' + lists[-1]
print(file)
return file
page_object
open_baidu.py
from model.base_cls import *
from time import sleep
class OpenBaidu(Base):
def search_info(self):
self.open("https://www.baidu.com")
self.by_id("kw").clear()
self.by_id("kw").send_keys("蓝宝石")
self.by_id("su").click()
sleep(5)
def get_title(self):
return self.driver.title
open_360.py
from model.base_cls import *
from time import sleep
class Open360(Base):
def search_info(self):
self.open("http://so.360.cn/")
self.by_id("input").clear()
self.by_id("input").send_keys("蓝宝石")
self.by_id("search-button").click()
sleep(5)
test_case
test_baidu.py
from page_object.open_baidu import *
from model.unit_cls import *
class SearchTest(TestBase):
def test_title(self):
op = OpenBaidu(self.driver)
op.search_info()
# 断言搜索结果是否能预期一致
self.assertEqual(op.get_title(),"蓝宝石_百度搜索")
if __name__ == '__main__':
unittest.main()
test_360.py
from page_object.open_360 import *
from model.unit_cls import *
class RunTest(TestBase):
def test_360(self):
oe=Open360(self.driver)
oe.search_info()
if __name__ == '__main__':
unittest.main()
test_report
# HTMLTestRunner 安装
https://blog.csdn.net/mshxuyi/article/details/103827474
HTMLTestRunner
BSTestRunner
运行用例
run_test.py
import unittest
# from HTMLTestRunner import HTMLTestRunner
from BSTestRunner import BSTestRunner
import time
from mail_cls import *
if __name__ == '__main__':
report_dir = "./test_report"
test_dir = "./test_case"
discover = unittest.defaultTestLoader.discover(test_dir, pattern="test*.py")
now = time.strftime("%Y%m%d_%H%M%S")
report_name = report_dir + '/' + now + ".html"
with open(report_name, 'wb') as f:
# runner=HTMLTestRunner(stream=f,title='Test Report',description='Test Case Result')
runner = BSTestRunner(stream=f, title='Test Report', description='Test Case Result')
runner.run(discover)
f.close()
# 发送邮件
lateset_report=lateset_report(report_dir)
send_mail(lateset_report)
input()