我的文件路径

一、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. Java初学者推荐学习书籍PDF免费下载

    场景 Effective Java 中文版Java核心技术 卷Ⅰ 基础知识(第8版)Java语言程序设计-进阶篇(原书第8版)疯狂Java讲义Java从入门到精通 第三版Java编程思想第4版重构-改 ...

  2. nginx配置多个TLS证书,以及TLS SNI简介

    背景 原来申请的正式域名备案通过,TLS证书也申请了.之前使用的临时域名和证书作为测试环境使用.于是要在单个ECS主机上配置nginx多个证书和多个域名. 实践 nginx部署多个TLS证书很简单,在 ...

  3. LIBRARY_PATH和LD_LIBRARY_PATH

    LIBRARY_PATH是编译时指定的路径. LD_LIBRARY_PATH是运行时指定的动态链接库所在目录. 在运行一个可执行文件之前,可以通过ldd a.exe命令查看a.exe所依赖的动态链接库 ...

  4. Java 之 Stack 集合

    一.Stack:栈 概述 栈是一种先进后出(FILO)或后进先出(LIFO:Last in first out)的数据结构. Stack是Vector的子类,比Vector多了几个方法,它的后进先出的 ...

  5. Python基础(三)--流程控制之if、while、for,break与continue

    一.流程控制之if……else…… if语句是指编程语言中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一 if 条件1: 缩进的代码块 elif 条件2: 缩进的代码 ...

  6. 安装centos6.10时,安装完成重启报错error 15,file not found

    今天在一台老式联想服务器上安装centos6.10操作系统,安装完成,重启时,出现报错 error 15, file not found...... 在百度上搜索到进grub编辑,可还是无法解决问题, ...

  7. github1:workq

    https://github.com/taf2/workq https://github.com/erez-strauss/lockfree_mpmc_queue  多生产者 多消费者 队列 < ...

  8. Mybatis-plus中不列出全部字段

    //不列出全部字段 @Test public void test10() { QueryWrapper<User> wrapper = new QueryWrapper<>() ...

  9. phpcms添加https后台分页错误的解决方法

    今天修改一位客户的phpcms网站,他要求添加https,这对ytkah来说是轻车熟路了,但是后台稍微有点问题,点击分页出现错误,将鼠标移到下一页显示的链接是https://www.abc.com/w ...

  10. telnet安装和使用教程

    一.安装telnet 1.检测telnet-server的rpm包是否安装 [root@localhost ~]# rpm -qa telnet-server若无输入内容,则表示没有安装.出于安全考虑 ...