我的文件路径

一、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)

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

  1. python自动化测试之DDT数据驱动

    时隔已久,再次冒烟,自动化测试工作仍在继续,自动化测试中的数据驱动技术尤为重要,不然咋去实现数据分离呢,对吧,这里就简单介绍下与传统unittest自动化测试框架匹配的DDT数据驱动技术. 话不多说, ...

  2. (appium+python)UI自动化_09_unittest批量运行测试用例&生成测试报告

    前言 上篇文章[(appium+python)UI自动化_08_unittest编写测试用例]讲到如何使用unittets编写测试用例,并执行测试文件.接下来讲解下unittest如何批量执行测试文件 ...

  3. 【python接口自动化】- DDT数据驱动测试

    简单介绍 ​ DDT(Date Driver Test),所谓数据驱动测试,简单来说就是由数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变.通过使用数据驱动测试的方法,可以在需要验证多组数据 ...

  4. 基于python的接口自动化测试+ddt数据驱动

    在测试接口时,一个接口会先写好测试用例,这个用例主要针对功能,传入参时考虑到各种场景,正常的,异常的,如:参数缺省,参数传一个六位数字写用例时考虑边界情况等. 一个接口设计用例时有可能会十几条到几十条 ...

  5. python接口自动化测试(七)unittest 生成测试报告

    用例的管理问题解决了后,接下来要考虑的就是报告我问题了,这里生成测试报告主要用到 HTMLTestRunner.py 这个模块,下面简单介绍一下如何使用: 一.下载HTMLTestRunner下载: ...

  6. python接口自动化(三十)--html测试报告通过邮件发出去——中(详解)

    简介 上一篇,我们虽然已经将生成的最新的测试报告发出去了,但是MIMEText 只能发送正文,无法带附件,因此我还需要继续改造我们的代码,实现可以发送带有附件的邮件.发送带附件的需要导入另外一个模块 ...

  7. Python+Selenium笔记(五):生成测试报告

    #HTMLTestRunner代码修改参考 微微微笑 的说明,下面是链接,这个已经说的很详细了 https://www.cnblogs.com/miniren/p/5301081.html (一) 前 ...

  8. python selenium自动化测试之路(1)--分层测试概念、selenium工具介绍

    1.分层自动化测试概念 传统的自动化市场更关注产品UI层的自动化测试,而分层的自动化测试倡导产品开发的不同阶段都需要自动化测试 大多公司与研发团队其实是忽略了单元测试与集成测试阶段的自动化测试工作,所 ...

  9. 【Selenium + Python】自动化测试之发送邮件正文以及附件同时发送

    废话不多说,直接上代码: import unittest import time import os import smtplib from HTMLTestRunner import HTMLTes ...

随机推荐

  1. Redis缓存数据库基础

    思维导图xmind文件:https://files-cdn.cnblogs.com/files/benjieming/Redis.zip

  2. JS树结构转list结构

    树转list /** * 树转list */ function treeToList(tree){ for(var i in tree){ var node = tree[i]; list = []; ...

  3. 盘点当下大热的7大Github机器学习创新项目

    哪个平台有最新的机器学习发展现状和最先进的代码?没错——Github!本文将会分享近期发布的七大GitHub机器学习项目.这些项目广泛覆盖了机器学习的各个领域,包括自然语言处理(NLP).计算机视觉. ...

  4. 【spring data jpa】带有条件的查询后分页和不带条件查询后分页实现

    一.不带有动态条件的查询 分页的实现 实例代码: controller:返回的是Page<>对象 @Controller @RequestMapping(value = "/eg ...

  5. notepad++ 设置运行python脚本

    按F5 在输入框中输入: cmd /k python “$(FULL_CURRENT_PATH)” &PAUSE & EXIT python路径必须在环境变量中. 否则需要输入完整的p ...

  6. rocketmq 两主两从异步集群搭建

    1.安装JDK 需要先卸载系统默认的OPENJDK,安装 JDK1.8 64位的版本. 卸载open-jdk rpm -qa|grep java 查到open jdk的安装. 使用命令 rpm -e ...

  7. elastic常用工具

    elasticsearch 常用工具: elasticsearch-dump :备份 elasticsearch-head :数据展示.操作平台 elasticsearch-head github 地 ...

  8. computer networking ---------DNS

    [DNS]domain named system 域名解析系统,即相当于对www.baidu.com的类似的域名进行解析,对于人而言,记忆一些域名相比于记忆一些Ip地址来说简单的多,而对于计算机而言, ...

  9. Jupyter Notebook 更换主题(背景、字体)

    通过命令行窗口或 Anaconda Prompt 窗口 1.安装 Jupyter 主题 pip install jupyterthemes 2.更新 Jupyter 主题 (可选) pip insta ...

  10. 逆向破解之160个CrackMe —— 027

    CrackMe —— 027 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...