Selenium自动化初学-第六节:unittest扩展

# 六、unittest扩展


# 1、html报告
# import unittest
# from time import time, ctime, localtime, strftime
#
# from XTestRunner import HTMLTestRunner
#
# test_dir3 = './test_web'
# suits = unittest.defaultTestLoader.discover(test_dir3, pattern='test_*.py')
#
# if __name__ == '__main__':
# # 生成HTML格式的报告
# # fp=open('./test_report/result.html','wb')#.就是上一级
# # 生成不同名字的HTML格式的报告
# report_title1 = time()
# report_title2 = ctime()
# report_title3 = localtime()
# report_title4 = strftime("%Y-%m-%d %H_%M_%S")
# reportName = './test_report/{}{}'.format(report_title1, 'result.html')
# fp = open(reportName, 'wb')
# runner = HTMLTestRunner(stream=fp, title="百度测试报告", description="hahahaha哈哈哈")
# runner.run(suits)
# fp.close()
# 2、数据驱动
# 1》parameterized
# import unittest
# from time import strftime
#
# from XTestRunner import HTMLTestRunner
#
# test_dir3 = './test_web'
# suits = unittest.defaultTestLoader.discover(test_dir3, pattern='test_bd_parameterized.py') #要想查看测试报告必须这么写,suit.addTest创建报告不生效
#
# if __name__ == '__main__':
# report_title = strftime('%H-%M-%S')
# reportPath = './test_report/{}{}'.format(report_title, 'canShu.html')
# fp = open(reportPath, 'wb')
# runner = HTMLTestRunner(stream=fp, title="测试报告", description="啊啊啊啊啊")
# runner.run(suits)
# fp.close()
# 2》DDT
# import unittest
# from time import strftime
#
# from XTestRunner import HTMLTestRunner
#
# test_dir = './test_web'
# suits = unittest.defaultTestLoader.discover(test_dir, pattern='test_bd_ddt.py')
# if __name__ == '__main__':
# report_title = strftime('%H-%M-%S')
# reportPath = './test_report/{}{}'.format(report_title, 'ddt.html')
# fp = open(reportPath, 'wb')
# runner = HTMLTestRunner(stream=fp, title="ddt测试报告", description="ddt数据驱动")
# runner.run(suits)
# 3、自动发送邮件功能
# python自带的发送功能-smtplib
# import smtplib
# from email.header import Header
# from email.mime.multipart import MIMEMultipart
# from email.mime.text import MIMEText
#
# subject = 'python email'
# # 1>发送邮件正文
# # msg = MIMEText('<html><h1>你</h1></html>', 'html', 'utf-8')
# # msg['Subject'] = Header(subject, 'utf-8')
# # 2》发送附件
# with open('/Users/a58/Desktop/1.txt', 'rb') as f:
# send_att = f.read()
# att = MIMEText(send_att, 'text', 'utf-8')
# att['Content-Type'] = 'application/octet-stream'
# att['Content-Disposition'] = 'attachment;filename="log.txt"'
# msg = MIMEMultipart()
# msg['Subject'] = Header(subject, 'utf-8')
# msg.attach(att)
# # 文本
# part_text = MIMEText('这是一封文本 + 图片的邮件', 'plain', 'utf-8')
# msg.attach(part_text)
# # 发送
# smtp = smtplib.SMTP()
# smtp.connect("smtp.126.com")
# smtp.login("@126.coma", "T")
# smtp.sendmail("sender@126.com", "receive@126.com", msg.as_string())
# smtp.quit()
#yagmail发送邮件
# import yaml
# yag=yaml.SMTP(user='@126.com',password="T",host='smtp.126.com')
# content=['呢呢呢hahah']
# yag.send('@126.com','主题1-前面的是收件人',content)
# yag.send(['@126.com','@126.com'],'主题1-前面的是收件人',content)
# yag.send(['e@126.com','@126.com'],'主题1-前面的是收件人',content,['/Users/a58/Desktop/1.txt','/Users/a58/Desktop/2.txt'])

 test_baidu.py

import unittest
from time import sleep

from selenium import webdriver
from selenium.webdriver.common.by import By


class test_baidu(unittest.TestCase):
driver = None

@classmethod
def setUpClass(cls) -> None:
options = webdriver.ChromeOptions()
options.add_experimental_option('detach', True) # 不自动关闭浏览器
cls.driver = webdriver.Chrome(options=options)
cls.base_url="https://www.baidu.com"

@classmethod
def tearDownClass(cls) -> None:
cls.driver.quit()

def sendKeys_tools(self, search_key):
self.driver.get(self.base_url)
self.driver.find_element(By.ID, "kw").send_keys(search_key)
self.driver.find_element(By.ID, 'su').click()
sleep(2)

def test_selenium(self):
"""搜索关键字selenium 测试报告中可以区分case"""
search_key = "selenium"
self.sendKeys_tools(search_key)
title = self.driver.title
self.assertEqual(title, 'nana_百度搜索')

def test_unittest(self):
"""搜索关键字unittest"""
search_key = "unittest"
self.sendKeys_tools(search_key)
title = self.driver.title
self.assertEqual(title, 'unittest_百度搜索')


# if __name__ == '__main__':
# unittest.main()

test_baidu_ddt.py

import unittest
from time import sleep

from ddt import ddt, data, unpack, file_data
from selenium import webdriver
from selenium.webdriver.common.by import By


@ddt
class TestBaidu(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
options = webdriver.ChromeOptions()
options.add_experimental_option('detach', True)
cls.driver = webdriver.Chrome(options=options)
cls.base_url = "https://www.baidu.com"

@classmethod
def tearDownClass(cls) -> None:
print("tearDownClass")
# cls.driver.quit()

def sendKeys_tools(self, words):
self.driver.get(self.base_url)
self.driver.find_element(By.ID, 'kw').send_keys(words)
self.driver.find_element(By.ID, 'su').click()
sleep(2)

# # 参数化使用方式一
# @data(["case1", "s"], ["case2", "a"], ["case3", "d"])
# @unpack
# def test_search1(self, case, search_key):
# self.sendKeys_tools(search_key)
# self.assertEqual(self.driver.title, search_key + "_百度搜索")
#
# # 参数化使用方式二
# @data(("smile1", "1"))
# @unpack
# def test_search2(self, case, search_key):
# self.sendKeys_tools(search_key)
# self.assertEqual(self.driver.title, search_key + "_百度搜索")
#
# #参数化使用方式三
# @data({"search_key":"1.0"},{"search_key":"2.1"})
# @unpack
# def test_search3(self, search_key):
# self.sendKeys_tools(search_key)
# self.assertEqual(self.driver.title, search_key + "_百度搜索")

# #参数化读取json文件
# @file_data('./files/ddt_file.json')
# def test_search4(self,search_key):
# self.sendKeys_tools(search_key)
# self.assertEqual(self.driver.title, search_key + "_百度搜索")

# 参数化读取yaml文件
@file_data('./files/ddt_file.yaml') # yaml文件需要安装PyYAML:pip install PyYAML
def test_search5(self, nana):
search_key = nana[0]["case"]
self.sendKeys_tools(search_key)
self.assertEqual(self.driver.title, search_key + "_百度搜索")


if __name__ == "__main__":
unittest.main(verbosity=2) # 更详细的信息

test_baidu_pt.py

import json
import unittest
from time import sleep

from parameterized import parameterized
from selenium import webdriver
from selenium.webdriver.common.by import By

filename = "./files/parameterizedJson.json"


def read_data(name):
with open(name, mode='r', encoding='utf8') as f:
jsonData = json.load(f) # 将读取的数据流f,转化为JSON格式文件,并定义变量接受
result_list = []
for data_single in jsonData:
result_list.append(tuple(data_single.values())) # python仅识别元组格式数据,需将JSON的字典数据转换成元组
print("result_list",result_list)
#result_list [('登录成功', {'mobile': '13800000002', 'password': '123456'}, '操作成功!'), ('手机号码为空', {'mobile': '', 'password': '123456'}, '用户名或密码错误'), ('SBB', {'mobile': '', 'password': '123456'}, 'SBBA')]
return result_list


class TestBaidu(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
options = webdriver.ChromeOptions()
options.add_experimental_option('detach', True)
cls.driver = webdriver.Chrome(options=options)
cls.base_url = "https://www.baidu.com"

@classmethod
def tearDownClass(cls) -> None:
print("tearDownClass")
# cls.driver.quit()

def sendKeys_tools(self, words):
self.driver.get(self.base_url)
self.driver.find_element(By.ID, 'kw').send_keys(words)
self.driver.find_element(By.ID, 'su').click()
sleep(2)

@parameterized.expand(read_data(filename)) # 需要用unittest模式运行才能使用这个注解
def test_baidu_selenium(self, case_name, request_body, words):
"""搜索关键字selenium 测试报告中可以区分case"""
self.sendKeys_tools(case_name)
self.assertEqual(self.driver.title, "手机号码为空_百度搜索")
if __name__=='__main__':
unittest.main()

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值