Python Selenium Unittest 自动化测试 简单封装类

用例 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()

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值