【Python + Selenium3】自动化测试之DDT数据驱动并生成测试报告以及用yagmail邮件发送文件

我的文件路径

 

 

一、DDT代码:

复制代码
import unittest
from time import sleep
from selenium import webdriver
from ddt import ddt,data,file_data,unpack
from selenium.webdriver.common.by import By


@ddt
class TestBaiduSearch(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Chrome()
        cls.url = "https://baidu.com"


    def baidu_search(self,keys):
        self.driver.get(self.url)
        self.driver.find_element(By.CSS_SELECTOR,"#kw").send_keys(keys)
        self.driver.find_element(By.CSS_SELECTOR,"#su").click()
        sleep(5)


    # 参数化例1
    @data(["case1","selenium3"],["case2","python3"],["case3","百度"])
    @unpack
    # @unittest.skip
    def test_baiduSearch01(self,case,data_key):
        print("第一组测试用例:"+case)
        self.baidu_search(data_key)
        self.assertEqual(self.driver.title,data_key + "_百度搜索",msg="标题不正确!")




    # 参数化例2:json
    @file_data("./data/ddt_data_file.data")
    def test_baiduSearch02(self,keys):
        print("第二组测试用例:",keys)
        self.baidu_search(keys)
        self.assertEqual(self.driver.title, keys + "_百度搜索", msg="标题不正确!")


    # 参数化例3:yaml
    @file_data("./data/ddt_data_file.yaml")
    @unpack
    def test_baiduSearch03(self,**kwargs):
        keys = kwargs['data1'][1]['keys']
        print("第三组测试用例:",keys)
        self.baidu_search(keys)
        self.assertEqual(self.driver.title, keys + "_百度搜索", msg="标题不正确!")


    @classmethod
    def tearDownClass(cls):
        print("用例结束!")
        cls.driver.quit()


if __name__ == '__main__':
    unittest.main(verbosity=2)
复制代码

json文件:ddt_data_file.data

{
  "case1":{"keys":"11"},
  "case2":{"keys":"12"},
  "case3":{"keys":"13"}
}

 

yaml文件:ddt_data_file.yaml

复制代码
用例1:
  data1:
    - keys: "yaml01"
    - keys: "yaml02"
  data2:
    - keys: "yaml03"
    - keys: "yaml04"
用例2:
  data1:
    - keys: "yaml05"
    - keys: "yaml06"
  data2:
    - keys: "yaml07"
    - keys: "yaml08"
用例3:
  data1:
    - keys: "yaml09"
    - keys: "yaml10"
  data2:
    - keys: "yaml11"
    - keys: "yaml12"
复制代码

yaml转换数组:

复制代码
list = 
[{
'case1':
{ 'data1': [ { 'keys': 'yaml01' }, { 'keys': 'yaml02' } ],
'data2': [ { 'keys': 'yaml03' }, { 'keys': 'yaml04' } ] },
'case2':
{ 'data1': [ { 'keys': 'yaml05' }, { 'keys': 'yaml06' } ],
'data2': [ { 'keys': 'yaml07' }, { 'keys': 'yaml08' } ] },
'case3':
{ 'data1': [ { 'keys': 'yaml09' }, { 'keys': 'yaml10' } ],
'data2': [ { 'keys': 'yaml11' }, { 'keys': 'yaml12' } ] }
}]
复制代码

 

 

二、生成报告并发送邮件

运行代码:

复制代码
import time
import yagmail
import unittest
from BSTestRunner import BSTestRunner

def send_mail(report):
    yag = yagmail.SMTP(user='xxx@126.com',
                       password='xxx',
                       host='smtp.126.com'
                       )
    subject = '邮件标题:自动化测试报告'
    contents = '正文,请查看附件'
    yag.send('xxx@qq.com',subject,contents,report)
    print("邮件发送成功!")



if __name__ == '__main__':

    case_path = "./test_case/"
    time = time.strftime("%Y-%m-%d_%H-%M-%S")
    report_name = time + "_report.html"
    report_path = "./report/" + report_name

    fp = open(report_path,'wb')

    discover = unittest.defaultTestLoader.discover(case_path,pattern='test*.py')
    runner = BSTestRunner(stream = fp,
                          title = '数据驱动测试用例:',
                          description = '执行下面的用例:')

    runner.run(discover)
    fp.close()

    send_mail(report_path)
复制代码

 

posted @   Owen_ET  阅读(611)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
  1. 1 イエスタデイ(翻自 Official髭男dism) 茶泡饭,春茶,kobasolo
  2. 2 模様 (TV size ver.) Ivy to Fraudulent Game
  3. 3 河口恭吾
  4. 4 愛してる 高鈴
  5. 5 一生所爱 卢冠廷,莫文蔚
  6. 6 世间美好与你环环相扣 柏松
  7. 7 理想三旬 陈鸿宇
  8. 8 不浪漫罪名 王杰
  9. 9 樱花树下 张敬轩
  10. 10 因为你在 达闻西乐队,福禄寿FloruitShow
  11. 11 悬溺 葛东琪
不浪漫罪名 - 王杰
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 陈少琪

作曲 : 王杰

没有花 这刹那被破坏吗

没有花 这刹那被破坏吗

无野火都会温暖吗

无烟花一起庆祝好吗

若爱恋 彷似戏剧那样假

若爱恋 彷似戏剧那样假

如布景一切都美化

连相拥都参照主角吗

你说我未能定时 令你每天欢笑一次

你说我未能定时 令你每天欢笑一次

我没说出一句美丽台词

是你心中一种缺陷定义

流进了眼角里的刺

为何不浪漫亦是罪名 为何不轰烈是件坏事情

为何不浪漫亦是罪名 为何不轰烈是件坏事情

从来未察觉我每个动作 没有声都有爱你的铁证

为何苦不浪漫亦是罪名 为何总等待着特别事情

从来未察觉我语气动听 在我呼吸声早已说明

甚么都会用一生保证

没有花 这刹那被破坏吗

没有花 这刹那被破坏吗

无野火都会温暖吗

无烟花一起庆祝好吗

若爱恋 彷似戏剧那样假

若爱恋 彷似戏剧那样假

如布景一切都美化

连相拥都参照主角吗

你说我未能定时 令你每天欢笑一次

你说我未能定时 令你每天欢笑一次

我没说出一句美丽台词

是你心中一种缺陷定义

流进了眼角里的刺

为何不浪漫亦是罪名 为何不轰烈是件坏事情

为何不浪漫亦是罪名 为何不轰烈是件坏事情

从来未察觉我每个动作 没有声都有爱你的铁证

为何苦不浪漫亦是罪名 为何总等待著特别事情

从来未察觉我语气动听 在我呼吸声早已说明

什么都会用一生保证

为何不浪漫亦是罪名 为何不轰烈是件坏事情

为何不浪漫亦是罪名 为何不轰烈是件坏事情

从来未察觉我每个动作 没有声都有爱你的铁证

为何苦不浪漫亦是罪名 为何总等待著特别事情

从来未察觉我语气动听 在我呼吸声早已说明

什么都会用一生保证

点击右上角即可分享
微信分享提示