看到就是赚到!Selenium完整框架——告别2017
这个框架大家可以拿过去直接用——作为送给大家的元旦礼物——船长对你们简直太好了!
学了这么长时间,又是定位,又是发邮件,还有乱七八糟的unittest,现在时候后把东西用起来了~而且学会了这一篇你就可以说自己会selenium自动化测试啦~~~看到就是赚到啊!
1、新建项目,结构如图:
注意:整个项目除了最外层的是文件夹,其他的都是包(package)。也就是说每一个文件夹下面都是有一个__init__.py文件的。只有包才能顺利的用import导入哦~~
2、文件介绍及代码
baseinfo
这里面只有一个__init__.py文件,里面放的是常量:比如邮件的设置信息、发送的固定URL等。
# coding: utf-8
'''
发送邮件参数
'''
Smtp_Server = 'smtp.mxhichina.com'
Smtp_Sender = 'abc@tenez.cn'
Smtp_Sender_Password = '**********'
Smtp_Receiver = ['312652826@qq.com', 'warrior_meng08@163.com']
module
这个包下面有:__init__.py(确定它是包而不是文件夹的文件),getTestcase.py——获取测试用例文件;getTestResult.py——获取用例执行结果文件,以及sendEmail.py——发送邮件文件。这个包里放的都是封装好的方法,也就是说以后我们只需要调用这些方法就可以实现相应的功能了。
__init__.py
这个文件里面的内容:
# coding: utf-8
import getTestcases
import sendEmail
import getTestResult
正如大家看到的,这里面只有几个import,这样写是为了后面利用from module import * 这种导入方式,如果不在__init__.py里写这些导入的话,前面的那种导入方式是不能用的。
getTestcase.py
# coding: utf-8
import unittest
import os
def testcaseDir(test_directory):
'''
os.walk()传入顶层文件夹路径,返回三个内容:
1、根路径;
2、路径下所有文件夹名;
3、路径下所有非文件夹名【2,3都是以列表形式返回】
这个是遍历文件夹,然后遍历对应文件夹下面的文件
'''
# for a, b, c in os.walk(test_directory):
# for dirs in b:
# test_dir = '%s\\%s' % (test_directory, dirs)
# test_discover = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py', top_level_dir=test_dir)
# return test_discover
'''
事实证明加了文件夹也没关系,但是不能是文件夹,必须是包,也就是你新建的时候必须选package(必须有__init__.py文件)
'''
discover = unittest.defaultTestLoader.discover(test_directory, pattern='test*.py', top_level_dir=test_directory)
return discover
这个方法是读取testcase文件夹(包)【以后说的文件夹其实是包】里面的测试用例。大家也看到了,一开始我建的就是文件夹,然后怎么样都读不出testcase文件夹下面的文件夹里面的用例,最后我写了一个具体的遍历文件夹的方法,然后去读用例,最后经人指点,加了__init__.py方法,把文件夹变成了包,瞬间就OK了。
getTestResult.py
# coding: utf-8
from selenium import webdriver
from time import sleep
def get_result(filename):
driver = webdriver.Firefox()
driver.maximize_window() # 得到测试报告路径
result_url = "file://%s" % filename
driver.get(result_url)
sleep(3)
res = driver.find_element_by_xpath("/html/body/div[1]/p[4]").text
result = res.split(':')
driver.quit()
return result[-1]
这个方法是将生成的测试报告对应的测试运行结果拿出来,到时候作为发送邮件的标题发送。
sendEmail.py
# coding: utf-8
import smtplib
import baseinfoimport time
from email.mime.multipart
import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText
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()
text = MIMEText(mail_body, 'html', 'utf-8')
text['Subject'] = Header('UI自动化测试报告', 'utf-8')
msg.attach(text)
now = time.strftime("%Y-%m-%d")
msg['Subject'] = Header('[ 执行结果:' + result + ' ]'+ 'UI自动化测试报告' + 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
发送邮件的方法,说了好多遍了。都是一个道理。
test_report
testReport_path.py
# coding: utf-8
import os
# 获取当前文件夹路径
def report_path():
return os.path.split(os.path.realpath(__file__))[0]
testcase
login
testLogin1.py【测试用例1】
# coding: utf-8
from selenium import webdriver
import timeimport unittest
import baseinfo
import sys
reload(sys)
sys.setdefaultencoding('utf8')
class TestLogin(unittest.TestCase):
print '1.这是testLogin1用例打印内容,文件夹login'
@ classmethod
def setUpClass(self):
self.driver = webdriver.Firefox()
time.sleep(1)
self.driver.maximize_window()
@ classmethod
def tearDownClass(self):
time.sleep(1)
self.driver.quit()
def test_purchase(self):
print(u"因未找到对应元素,测试用例未正常执行!")
testLogin2【测试用例2】
# coding: utf-8
import unittest
class testLogin2(unittest.TestCase):
def setUp(self):
print '2.这是testLogin2文件夹下面的setup方法'
def test11(self):
return '3.return 方法返回'
def testLogin(self):
print 222
testcase2
testBuy.py【测试用例3】
# coding: utf-8
import unittest
class testBuy(unittest.TestCase):
print '4.这是testBuy方法,来自testcase2文件夹'
def testPrint(self):
print '5.这是test_1打印的内容,文件夹是testcase2'
testSell.py【测试用例4】
# coding: utf-8
print '6.这里只有print--testSell.py文件'
与login和testcase2文件夹同级文件testcase_path.py
# coding: utf-8
import os
# 获取当前文件夹路径
def dir_path():
return os.path.split(os.path.realpath(__file__))[0]
runtest.py
# coding: utf-8
import time
from module import *
from testcase import testcase_path
from test_report import testReport_path
from HTMLTestRunner import HTMLTestRunner
if __name__ == '__main__':
# 测试用例路径
test_dir = testcase_path.dir_path()
# 测试报告存放路径
report_dir = testReport_path.report_path()
# print report_dir
now = time.strftime("%Y-%m-%d")
filename = report_dir + '\\report-' + now + '.html'
# print filename
fp = open(filename, 'wb')
runner = HTMLTestRunner(stream=fp, title='UI自动化测试报告', description='用例执行情况')
runner.run(getTestcases.testcaseDir(test_dir))
fp.close()
result = getTestResult.get_result(filename)
print result
mail = sendEmail.send_Mail(filename, result)
if mail:
print(u"邮件发送成功!")
else:
print(u"邮件发送失败!")
用例执行这里只有一个方法,其他全是调用module文件夹下面的方法。
大家注意一下我的用例,大家运行,可以看到输出结果:
只有1、4、6打印出来了哦,其他的是不会打印的,也就是说你在用例里写的print是不会打印的,这是因为HTMLTestRunner.py规定的。船长试过自己修改过的可以打印用例里面的print了,但是会返回很多None,也就是说说出里面会有好多红色的None。如果你能忍受这些None(没有用),那就用船长修改过的HTMLTestRunner.py文件~~怎么修改船长前面介绍过。
哇,直接可以用的代码啊!!复制过去就能用的框架,看到就是赚到,花两天时间就学会一个可以用的Selenium框架啊,纯粹的福利啊~~~
2017就要过去了,祝大家新年快乐~~船长在这里祝大家在2018年工作顺利、梦想成真!
感谢大家这么长时间的陪伴~~还有,打赏过船长的朋友在后台回复一下你的QQ号,船长拉你进一个船长的群,只有四个人,不闲聊,只给大家解决问题和发红包,哈哈~~
再次感谢大家的陪伴和支持!
希望2018善待我们这些努力、善良的人。加油!
We deserves!
![]()
![]()
![]()
![]()
![]()
![]()
微信公众号搜索“自动化测试实战”或扫描下方二维码添加关注~~~

看到就是赚到!Selenium完整框架——告别2017的更多相关文章
- Selenium自动化测试框架入门整理
关注嘉为科技,获取运维新知 本文主要针对Selenium自动化测试框架入门整理,只涉及总体功能及框架要点介绍说明,以及使用前提技术基础要求整理说明.作为开发人员.测试人员入门参考. 本文参考:Se ...
- 《手把手教你》系列基础篇(九十一)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-下篇(详解教程)
1.简介 为了方便查看和归档:(1)不同包的日志可能要放到不同的文件中,如service层和dao层的日志:(2)不同日志级别:调试.信息.警告和错误等也要分文件输出.所以宏哥今天主要介绍和分享的是: ...
- selenium测试框架使用xml作为对象库
之前已经写过一篇: selenium测试框架篇,页面对象和元素对象的管理 上次使用的excel作为Locator对象管理,由于excel处理不够方便,有以下缺点: 不能实现分page 加载Locato ...
- Selenium自动化测试框架介绍
Selenium自动化测试框架介绍 1.测试架构作用 a.可维护性 b.提高编写脚本效率 c.提高脚本的可读性 2.框架的几大要素: Driver管理,脚本,数据,元素对象,LOG,报告,运行机制,失 ...
- python+selenium+unnittest框架
python+selenium+unnittest框架,以百度搜索为例,做了一个简单的框架,先看一下整个项目目录结构 我用的是pycharm工具,我觉得这个工具是天使,超好用也超好看! 这些要感谢原作 ...
- Pytest(18)pytest接口自动化完整框架思维导图
pytest接口自动化完整框架思维导图
- 《Selenium自动化测试实战:基于Python》Selenium自动化测试框架入门
第1章 Selenium自动化测试框架入门 1.1 Selenium自动化测试框架概述 说到目前流行的自动化测试工具,相信只要做过软件测试相关工作,就一定听说过Selenium. 图1-1是某企业 ...
- 『心善渊』Selenium3.0基础 — 2、Selenium测试框架环境搭建(Windows)
目录 1.浏览器安装 2.浏览器驱动下载 (1)ChromeDriver for Chrome (2)Geckodriver for Firefox (3)IEDriverServer for IE ...
- 《手把手教你》系列基础篇(七十五)-java+ selenium自动化测试-框架设计基础-TestNG实现DDT - 中篇(详解教程)
1.简介 上一篇中介绍了DataProvider如何传递参数,以及和一些其他方法结合传递参数,今天宏哥接着把剩下的一些常用的也做一下简单的介绍和分享. 2.项目实战1 @DataProvider + ...
随机推荐
- TCP_DB_中间件_数据打包格式
ZC: 这里约定的是,C和S之间 传输的TCP数据包的格式 1.TCP数据包 打包格式 1.1.TCP包长度(int32) + TCP包序号(int32) + TCP包类型(int32) + TCP包 ...
- Windows Server 2008 R2网站访问PHP响应慢的解决方法
最近换了台新服务器,由于内存是8G的,所以就换了Windows Server 2008 R2 这款系统,虽然有点陌生,但是熟悉了一下感觉性能非常好,但是在配置完PHP环境之后却发现了问题,访问HTML ...
- Linux命令详解-hwclock/chock
hwclock命令可以用来显示/设置硬件时钟命令. 在Linux中有硬件时钟与系统时钟等两种时钟.硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟.系统时钟则是指kernel中 的 ...
- Java集合详解8:Java的集合类细节精讲
Java集合详解8:Java集合类细节精讲 今天我们来探索一下Java集合类中的一些技术细节.主要是对一些比较容易被遗漏和误解的知识点做一些讲解和补充.可能不全面,还请谅解. 本文参考:http:// ...
- torch7 调用caffe model 作为pretrain
torch7 调用caffe model 作为pretrain torch7 caffe preTrain model zoo torch7 通过 loadcaffe 包,可以调用caffe训练得到的 ...
- nyoj762——分解质因数+容斥+二分
第k个互质数 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 两个数的a,b的gcd为1,即a,b互质,现在给你一个数m,你知道与它互质的第k个数是多少吗?与m互质的 ...
- windows使用pip安装selenium报错问题
UnicodeDecodeError: 'ascii' codec can't decode byte 0xb9 in position 7: ordinal not in range(128) 这是 ...
- 利用expect和sshpass完美非交互性执行远端命令
yum install expect -y expect 参考:http://blog.csdn.net/snow_114/article/details/53245466 yum install s ...
- laravel怎么获取到public路径
app_path() app_path函数返回app目录的绝对路径: $path = app_path(); 你还可以使用app_path函数为相对于app目录的给定文件生成绝对路径: $path = ...
- Unity 3D插入MySql中文无法显示问题
使用Unity3D向mySql中插入数据,然后进入mySql查看数据库,吓我一跳中文全部乱码. 随后各种查阅资料,网站上给出解释,MySql应该使用utf8编码,查看我的mySql默认是使用utf8编 ...