1、UI测试框架搭建-目录结构

2、 文件介绍

2.1、baseinfo->__init__.py

配置文件定义基础参数

#-*-coding:utf-8-*-
#测试用例配置参数 base_url = "http://xxxxx.com"
undirect_username = "username"
undirect_password = "password"
direct_username = "username"
direct_password = "password" buyerName = 'username'
buyerPassword = 'password' sellerName = 'username'
sellerPassword = 'password' #发送邮件配置参数
Smtp_Server = 'smtp.xxxx.com'
Smtp_Sender = 'nnv@xx.cn'
Smtp_Sender_Password = 'Password'
#Smtp_Receiver = ['nnv1@xx.cn','nnv2@xx.cn','nnv3@xx.cn','nnv4@xx.cn']
Smtp_Receiver = ['nnv1@xx.cn']
Smtp_Receiver_pre = ['nnv1@xx.cn'] #测试邮箱配置
#Smtp_Server = 'smtp.163.com'
#Smtp_Sender = 'wmqyyj_test@163.com'
#Smtp_Sender_Password = 'Password'
#Smtp_Receiver = ['wmqyyj_test@163.com']
#Smtp_Receiver_pre = ['wmqyyj_test@163.com'] #测试用例及报告路径配置参数
# case_dir = './test_case'
# test_report = './test_report/' #测试用例及报告路径配置参数
test_dir = 'D:\\WorkSpace\\Python\\UiTest\\test_case'
test_report = 'D:\\WorkSpace\\Python\\UiTest\\test_report\\'

2.2、caseData

用于存放测试数据,这里用于存放文件上传功能中的上传的文件。

2.3、test_case

用于存放测试用例,根据下图定义的pattern的值,所以用例必须以test开头

2.4、test_report

用户存放测试报告文件

报告内容如下

2.5、测试执行程序

编写用例执行程序 runtest.py

# -*-coding:utf-8-*-
# Time:2017/7/1-0:18
# Author:YangYangJun
import sys reload(sys)
sys.setdefaultencoding('utf8')
import smtplib
import unittest
import time
import os
from HTMLTestRunner import HTMLTestRunner
from email.header import Header
from email.mime.text import MIMEText
import baseinfo
from email.mime.multipart import MIMEMultipart from selenium import webdriver def get_NewReport(testreport):
#获取testreport 目录下的文件返回一个list
dirs = os.listdir(testreport)
#对文件list 进行排序 进行增序排列
dirs.sort()
#获取序列最后一个元素,即最大的一个元素。
newreportname = dirs[-1]
print('The new report name: {0}'.format(newreportname))
file_new = os.path.join(testreport, newreportname)
print file_new
return file_new
def get_Result(filename):
driver = webdriver.Firefox()
driver.maximize_window()
##得到测试报告路径
result_url = "file://%s" % filename
driver.get(result_url)
time.sleep(5) result = driver.find_element_by_xpath("html/body/div[1]/p[3]").text result = result.split(':')
print result
driver.quit()
return result[-1] def send_Mail(file_new,result):
f = open(file_new, 'rb')
# 读取测试报告正文
mail_body = f.read()
f.close()
try:
smtp = smtplib.SMTP(baseinfo.Smtp_Server, 25)
sender = baseinfo.Smtp_Sender
password = baseinfo.Smtp_Sender_Password
receiver = baseinfo.Smtp_Receiver
smtp.login(sender, password)
msg = MIMEMultipart()
# 编写html类型的邮件正文,MIMEtext()用于定义邮件正文
# 发送正文
text = MIMEText(mail_body, 'html', 'utf-8')
# 定义邮件正文标题
text['Subject'] = Header('XXXXUI自动化测试报告', 'utf-8')
msg.attach(text)
# 发送附件
# Header()用于定义邮件主题,主题加上时间,是为了防止主题重复,主题重复,发送太过频繁,邮件会发送不出去。
msg['Subject'] = Header('[执行结果:' + result + ']'+ 'XXXXUI自动化测试报告' + now, 'utf-8')
msg_file = MIMEText(mail_body, 'html', 'utf-8')
msg_file['Content-Type'] = 'application/octet-stream'
msg_file["Content-Disposition"] = 'attachment; filename="TestReport.html"'
msg.attach(msg_file)
# 定义发件人,如果不写,发件人为空
msg['From'] = sender
# 定义收件人,如果不写,收件人为空
msg['To'] = ",".join(receiver)
tmp = smtp.sendmail(sender, receiver, msg.as_string())
print tmp
smtp.quit()
return True
except smtplib.SMTPException as e:
print(str(e))
return False if __name__ == '__main__':
# test_dir = os.path.join(os.getcwd(),'test_case')
# print(test_dir)
# report_dir = os.path.join(os.getcwd(),'test_report')
# 测试用例路径
test_dir = baseinfo.test_dir
# est_dir = os.path.join(os.getcwd(),'test_case') # print(test_dir)
# report_dir = os.path.join(os.getcwd(),'test_report')
# 测试报告存放路径
report_dir = baseinfo.test_report test_discover = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')
now = time.strftime("%Y-%m-%d-%H_%M_%S")
filename = report_dir + 'result-' + now + '.html'
print filename
fp = open(filename, 'wb')
runner = HTMLTestRunner(stream=fp, title='XXXXUI自动化测试报告', description='用例执行情况')
runner.run(test_discover)
fp.close()
#其实根本不需要这里获取最新报告,filename就是最新的报告了,可以直接使用了
#new_report = get_NewReport(report_dir)
result = get_Result(filename) mail = send_Mail(filename,result) print mail
if mail:
print(u"邮件发送成功!")
else:
print(u"邮件发送失败!")

Python Selenium unittest+HTMLTestRunner实现 自动化测试及发送测试报告邮件的更多相关文章

  1. Python+Selenium+Unittest+HTMLTestRunner生成测试报告+发送至邮箱,记一次完整的cnblog登录测试示例,

    测试思路:单个测试集.单个测试汇成多个测试集.运行测试集.生成测试报告.发送至邮箱. 第一步:建立单个测试集,以cnblog登录为例. 测试用例: cnblog的登录测试,简单分下面几种情况:(1)用 ...

  2. Python+Selenium+Unittest+Ddt+HTMLReport分布式数据驱动自动化测试框架结构

    1.Business:公共业务模块,如登录模块,可以把登录模块进行封装供调用 ------login_business.py from Page_Object.Common_Page.login_pa ...

  3. Python+selenium+unittest+HTMLTestReportCN单元测试框架分享

    分享一个比较基础的,系统性的知识点.Python+selenium+unittest+HTMLTestReportCN单元测试框架分享 Unittest简介 unittest是Python语言的单元测 ...

  4. python+selenium+unittest 实现自动化测试

    示例代码: baidu.py import csv #导入csv模块 from itertools import islice #从itertools导入islice,后边让其默认跳过第一行使用 fr ...

  5. Python+Selenium之HTMLTestRunner

    下载 HTMLTestRunner 模块 下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html 保存路径:将下载的HTMLTestRunne ...

  6. python+selenium +unittest生成HTML测试报告

    python+selenium+HTMLTestRunner+unittest生成HTML测试报告 首先要准备HTMLTestRunner文件,官网的HTMLTestRunner是python2语法写 ...

  7. 使用python+selenium对web进行自动化测试

    想用python代码,对web网页进行自动化测试 web自动化测试和手动测试的区别: 手动测试:通过手动去对网页的功能进行点点点 web自动化:可以通过代码,自动对网页点点点 首先,将python+s ...

  8. python+selenium+unittest,爬虫电影网站

    以前经常在这个网站上下载电影下来看,这个网站比较坑的就是,主页上只有电影的名称,但是评分是看不到的:只有再点击电影名字,进入电影主页时才能看到评分.一般下载的电影都是评分高的才看,低的就忽略掉了.每次 ...

  9. 最完整的自动化测试流程:Python编写执行测试用例及定时自动发送最新测试报告邮件

    今天笔者就要归纳总结下一整套测试流程,从无到有,实现零突破,包括如何编写测试用例,定时执行测试用例,查找最新生成的测试报告文件,自动发送最新测试报告邮件,一整套完整的测试流程.以后各位只要着重如何编写 ...

随机推荐

  1. 基础_cifar10_序贯

    今天的基础研究主要是在cifar10数据集上解决一下几个问题: 1.从头开始,从最简单的序贯开始,尝试model的构造: 2.要将模型打印出来.最好是能够打印出图片,否则也要summary; 3.尝试 ...

  2. webpack对于引入的模块无法智能代码提示

    前端模块太多了,模块里的方法比较难记住,所以我们一般靠的都是IDE的代码提示. 但是有时候我们会发现对于引入的模块没有代码提示,我也安装了模块呀,为什么没有代码提示? 主要是package.json的 ...

  3. 【python35.2--图形用户界面EasyGui】

    一.猜字游戏 #猜字游戏(从1到10) import easygui as g import random g.msgbox('欢迎进入探险之路!') screct = random.randint( ...

  4. tomcat8.5之后版本,远程无法登录管理页面

    转载自http://jingyan.baidu.com/article/1612d500b56fa1e20e1eeed2.html 服务器采用的是linux系统. 安装tomcat在服务器上后,客户端 ...

  5. 从Hello World说起(Dart)到“几乎所有东西都是Widget”小部件。

    import 'package:flutter/material.dart'; void main() => runApp(new MyApp()); class MyApp extends S ...

  6. 打造性感好用的 VS Code 编辑器

    官网: https://code.visualstudio.com/ Blog链接:打造性感好用的VS Code编辑器 主命令框 F1或Ctrl+Shift+P: 打开命令面板.在打开的输入框内,可以 ...

  7. debian下如何源码安装tmux

    一.源码安装ncurses库 1.1 获取源码 wget https://invisible-island.net/datafiles/release/ncurses.tar.gz tar xvf n ...

  8. 开源代码中的autogen.sh干了些什么?

    答:重新根据当前所处环境生成新的configure 分析脚本都做了些什么? 1. 指定make工具 MAKE=gmake or MAKE=make 2. 执行autoreconf autoreconf ...

  9. Yii使用笔记 2

    yii中的 getId等函数, id更多的是一个 string, 而不是数字. CCaptchaAction > CAction > CComponent. 实现是 IAction. yi ...

  10. python 之 条件语句

    python 编程语言指定任何非0和非空(null)值为true, 0或者null为false. python 编程中if语句用于控制程序的执行,基本形式为: if 判断条件: 执行语句…… else ...