Python unittest 自动识别并执行测试用例方式


Posted in Python onMarch 09, 2020

自动化测试执行的用例有很多,python额测试用例文件,都是以“test”开头的。

TestLoader(defaultTestLoader)是unittest的测试用例加载器,它包括多个加载测试用例的方法。它的结果是返回一个测试套件。本文介绍discover()用法与功能

结构:

discover(start_dir, pattern='test*.py', top_level_dir=None)

作用:找到指定目录下所有测试用例模块,并递归查询子目录下的测试模块,找到匹配的文件进行加载。

解释:

start_dir:需要测试的用例文件目录或是模块

pattern:用例匹配原则

top_level_dir:测试模块的顶层目录,没有就默认None。

例子:

#coding=utf-8
import unittest
 
#定义测试用例的目录为当前目录
test_dir = './'
discover = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')
 
if __name__ == '__main__':
 runner = unittest.TextTestRunner()
 runner.run(discover)

注释:

1)discover = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py') :匹配查找测试用例文件,以test*.py开头,并将查找到的测试用例组装到测试套件中

2)runner.run(discover) :通过run()函数执行discover

补充知识:unittest框架执行测试并发送邮件

我就废话不多说了,还是直接看代码吧!

#coding=utf8
 
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from HTMLTestRunner import HTMLTestRunner
from email.header import Header
import unittest
import time,os
 
#==============定义发送邮件 ===============
 
def send_mail(file_new):
 f = open(file_new,'rb')
 #读取测试报告正文
 mail_body = f.read()
 f.close()
 
 #发送邮件的
 smtpserver = 'smtp.exmail.qq.com'
 
 username = 'fengyanfang@innobuddy.com'
 passwd = 'Fyf136066'
 
 sender = 'fengyanfang@innobuddy.com'
 receiver = ['fengyanfang@innobuddy.com']
 tname = time.strftime('%Y-%m-%d %H-%M-%S',time.localtime())
 header = u'%s 接口自动化测试报告 ' % tname
 
 
# 只发正文,不发附件
 msg = MIMEText(mail_body, 'html', 'utf-8')
 msg['Subject'] = Header('自动化测试报告', 'utf-8')
 msg['Header'] = header
 msg['From'] = sender
 msg['To'] = ",".join(receiver)
 
 
 #连接发送邮件
 # 发送邮件,端口用465, keyfile = 'vxkdfejinpifbeaj'
 smtp = smtplib.SMTP_SSL(smtpserver, 465)
 
 smtp.helo(smtpserver)
 smtp.ehlo(smtpserver)
 
 smtp.login(username, passwd)
 smtp.sendmail(sender, receiver, msg.as_string())
 
 smtp.quit()
 
 
#======================查找最新的测试报告==========================
 
def new_report(testreport):
 #方式1:
 # lists = os.listdir(testreport)
 # lists.sort(key = lambda fn: os.path.getmtime(testreport + '\\' + fn))
 # file_new = os.path.join(testreport,lists[-1])
 # print(file_new)
 # return file_new
 
 #方式2:
 dirs = os.listdir(testreport)
 dirs.sort()
 newreportname = dirs[-1]
 print('The new report name: {0}'.format(newreportname))
 file_new = os.path.join(testreport, newreportname)
 return file_new
 
if __name__ == '__main__':
 #获取当前的项目目录UskidInterface
 testdir = os.path.dirname(os.path.dirname(__file__))
 
 test_dir = os.path.join(testdir,'testcase')
 test_report = os.path.join(testdir, 'report')
 discover = unittest.defaultTestLoader.discover(test_dir,pattern='test*.py')
 
 now = time.strftime("%Y-%m-%d %H_%M_%S",time.localtime())
 filename = test_report+'/result_'+now+'.html'
 fp = open(filename,'wb')
 
 #stream放生成报告的路径
 runner = HTMLTestRunner(stream=fp,title="测试报告",description='用例执行情况:')
 runner.run(discover)
 fp.close()
 
 new_report = new_report(test_report)
 send_mail(new_report)

以上这篇Python unittest 自动识别并执行测试用例方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python序列操作之进阶篇
Dec 08 Python
详解Python多线程Selenium跨浏览器测试
Apr 01 Python
Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例
Sep 26 Python
Python中的id()函数指的什么
Oct 17 Python
详解Python中的动态属性和特性
Apr 07 Python
Python实现插入排序和选择排序的方法
May 12 Python
Python库skimage绘制二值图像代码实例
Apr 10 Python
python3实现将json对象存入Redis以及数据的导入导出
Jul 16 Python
python 如何利用argparse解析命令行参数
Sep 11 Python
python破解同事的压缩包密码
Oct 14 Python
几款Python编译器比较与推荐(小结)
Oct 15 Python
matplotlib 范围选区(SpanSelector)的使用
Feb 24 Python
python爬虫开发之urllib模块详细使用方法与实例全解
Mar 09 #Python
在Python IDLE 下调用anaconda中的库教程
Mar 09 #Python
python shell命令行中import多层目录下的模块操作
Mar 09 #Python
使用Python获取当前工作目录和执行命令的位置
Mar 09 #Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
Mar 09 #Python
Python如何存储数据到json文件
Mar 09 #Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
Mar 09 #Python
You might like
php xml文件操作实现代码(二)
2009/03/20 PHP
php抽奖小程序的实现代码
2013/06/18 PHP
php四种基础算法代码实例
2013/10/29 PHP
CodeIgniter CLI模式简介
2014/06/17 PHP
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
PHP中字符安全过滤函数使用小结
2015/02/25 PHP
Laravel创建数据库表结构的例子
2019/10/09 PHP
多浏览器支持的右下角浮动窗口
2010/04/01 Javascript
JavaScript游戏之优化篇
2010/11/08 Javascript
JS继承 笔记
2011/07/13 Javascript
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
js简单实现交换Li的值
2014/05/22 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
JavaScript中操作Mysql数据库实例
2015/04/02 Javascript
javascript实现列表滚动的方法
2015/07/30 Javascript
JS使用parseInt解析数字实现求和的方法
2015/08/05 Javascript
深入理解setTimeout函数和setInterval函数
2016/05/20 Javascript
实例讲解JavaScript中instanceof运算符的用法
2016/06/08 Javascript
在js中做数字字符串补0(js补零)
2017/03/25 Javascript
node通过express搭建自己的服务器
2017/09/30 Javascript
vue实现自定义多选与单选的答题功能
2018/07/05 Javascript
vue监听键盘事件的快捷方法【推荐】
2018/07/11 Javascript
vue router 跳转后回到顶部的实例
2018/08/31 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
Python字符串拼接六种方法介绍
2017/12/18 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
2018/11/10 Python
用python建立两个Y轴的XY曲线图方法
2019/07/08 Python
python中如何实现将数据分成训练集与测试集的方法
2019/09/13 Python
Python Pickle 实现在同一个文件中序列化多个对象
2019/12/30 Python
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
施华洛世奇中国官网:SWAROVSKI中国
2020/06/16 全球购物
高中班长自我鉴定
2013/12/20 职场文书
大学班级干部的自我评价分享
2014/02/10 职场文书
导游词格式
2015/02/13 职场文书
JavaScript实现音乐播放器
2022/08/14 Javascript