我的文件路径

一、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. web安全常用工具

    简单工具:明小子,阿d注入工具,namp,穿山甲,御剑,旁注 漏洞扫描工具:appscan .awvs.nbsi 端口扫描工具:nessus.namp.天镜脆弱性扫描与管理系统 数据库备份工具:中国菜 ...

  2. 遇到了Microsoft Visual Studio is Busy!

    最近两天,我点击F5进入调试模式,VS左下角状态显示一直在加载符号文件,然后加载的超级慢,不多一会儿,显示VS正忙!如上图所示. 然后的然后,VS就卡死了~~~.之后,在网上查找原因和解决办法,找来找 ...

  3. B端产品经理的金字塔能力模型

    工作这几年,时长思考,作为B端产品经理自己应该具备什么样的能力? 虽然工作依旧在有条不紊的进行,但是时常会陷入到对知识或者能力的焦虑当中.特别时是工作三五年,产品经理进阶门槛时. 虽然产品经理的能力是 ...

  4. JavaScript深入浅出第3课:什么是垃圾回收算法?

    摘要: JS是如何回收内存的? <JavaScript深入浅出>系列: JavaScript深入浅出第1课:箭头函数中的this究竟是什么鬼? JavaScript深入浅出第2课:函数是一 ...

  5. Tomcat服务器编码格式设置

    /** *1.找到.xml server文件 */ /** * 2. 设置encoding */

  6. python数据类型之三

    字典 字典的基本结构 # 字典, 键值对 dict类# 字典的基本结构# 字典的值可以是任何值# 字典的键不能是列表,字典, 最好也不要用布尔值(可能会和1和0重复)# 字典无序, my_dict = ...

  7. Kubernetes 资源对象

    概述 我将它们简单的分类为以下几种资源对象: 类别 名称 资源对象 Pod.ReplicaSet.ReplicationController.Deployment.StatefulSet.Daemon ...

  8. 小学四则运算口算练习app---No.6

    今天主要解决按钮的闪退问题以及答案页面的设置: (位置问题还是无能为力....) 除此之外加了一些菜单键,右上角 resultActivity.class ; String select=;i< ...

  9. plv8 require 模块试用

    plv8 是postgres 的一个比较强大的插件,社区有人基于babel,browserify 实现了一个方便的require 模块加载 实际上官方也有介绍过了类似的基于数据库存储js,然后通过ev ...

  10. 安装PyInstaller失败

    pip install PyInstaller 报错: 后运行: 指定安装源进行安装: pip3 install pyinstaller -i https://pypi.doubanio.com/si ...