快速构建一个完整的Selenium框架
今天跟大家细讲如何构建一个完整的selenium框架,当你学会了这一篇你就也可以说自己会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-8import getTestcasesimport sendEmailimport getTestResult
正如大家看到的,这里面只有几个import,这样写是为了后面利用from module import * 这种导入方式,如果不在__init __.py里写这些导入的话,前面的那种导入方式是不能用的。
getTestcase.py
# coding: utf-8import unittestimport osdef 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-8from selenium import webdriverfrom time import sleepdef get_result(filename):driver = webdriver.Firefox()driver.maximize_window() # 得到测试报告路径result_url = "file://%s" % filenamedriver.get(result_url)sleep(3)res = driver.find_element_by_xpath("/html/body/div[1]/p[4]").textresult = res.split(':')driver.quit() return result[-1]
这个方法是将生成的测试报告对应的测试运行结果拿出来,到时候作为发送邮件的标题发送。
sendEmail.py
# coding: utf-8import smtplibimport baseinfoimport timefrom email.mime.multipart import MIMEMultipartfrom email.header import Headerfrom email.mime.text import MIMETextdef 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_Senderpassword = baseinfo.Smtp_Sender_Passwordreceiver = baseinfo.Smtp_Receiversmtp.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'] = sendermsg['To'] = ",".join(receiver)tmp = smtp.sendmail(sender, receiver, msg.as_string()) print tmpsmtp.quit() return Trueexcept smtplib.SMTPException as e:print(str(e)) return False
发送邮件的方法,都是一个道理。
test_report
testReport_path.py
# coding: utf-8import os# 获取当前文件夹路径def report_path():return os.path.split(os.path.realpath(__file__))[0]
testcase
login
testLogin1.py【测试用例1】
# coding: utf-8from selenium import webdriverimport timeimport unittestimport baseinfoimport sys
reload(sys)
sys.setdefaultencoding('utf8')class TestLogin(unittest.TestCase):print '1.这是testLogin1用例打印内容,文件夹login'@ classmethoddef setUpClass(self):self.driver = webdriver.Firefox()time.sleep(1)self.driver.maximize_window() @ classmethoddef tearDownClass(self):time.sleep(1)self.driver.quit() def test_purchase(self):print(u"因未找到对应元素,测试用例未正常执行!")
testLogin2【测试用例2】
# coding: utf-8import unittestclass 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-8import unittestclass testBuy(unittest.TestCase):print '4.这是testBuy方法,来自testcase2文件夹'def testPrint(self):print '5.这是test_1打印的内容,文件夹是testcase2'
testSell.py【测试用例4】
# coding: utf-8print '6.这里只有print--testSell.py文件'
与login和testcase2文件夹同级文件testcase_path.py
# coding: utf-8import os# 获取当前文件夹路径def dir_path():return os.path.split(os.path.realpath(__file__))[0]
如果对软件测试、接口测试、自动化测试、面试经验交流感兴趣可以加软件测试交流:1085991341,会有不定期的发放免费的资料链接,还会有同行一起技术交流。
runtest.py
# coding: utf-8import timefrom module import *from testcase import testcase_pathfrom test_report import testReport_pathfrom HTMLTestRunner import HTMLTestRunnerif __name__ == '__main__': # 测试用例路径test_dir = testcase_path.dir_path() # 测试报告存放路径report_dir = testReport_path.report_path() # print report_dirnow = time.strftime("%Y-%m-%d")filename = report_dir + '\\report-' + now + '.html'# print filenamefp = open(filename, 'wb')runner = HTMLTestRunner(stream=fp, title='UI自动化测试报告', description='用例执行情况')runner.run(getTestcases.testcaseDir(test_dir))fp.close()result = getTestResult.get_result(filename) print resultmail = sendEmail.send_Mail(filename, result) if mail:print(u"邮件发送成功!") else:print(u"邮件发送失败!")
用例执行这里只有一个方法,其他全是调用module文件夹下面的方法。
大家注意一下我的用例,运之后可以看到输出结果:
只有1、4、6打印出来了哦,其他的是不会打印的,也就是说你在用例里写的print是不会打印的,这是因为HTMLTestRunner.py规定的。试过自己修改过的可以打印用例里面的print了,但是会返回很多None,也就是说出里面会有好多红色的None。
以上内容希望对你有帮助,有被帮助到的朋友欢迎点赞,评论。
快速构建一个完整的Selenium框架相关推荐
- 如何使用ChatGPT快速构建一个网站模板
前端Q 我是winty,专注分享前端知识和各类前端资源,乐于分享各种有趣的事,关注我,一起做个有趣的人- 公众号 点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流群 英文 | https:/ ...
- 如何使用ChatGPT快速构建一个网站模板?
欢迎来到令人兴奋的自然语言处理和机器学习世界!今天,我们将探索 ChatGPT 的功能,它是由 OpenAI 公司开发的目前最先进的人工智能工具.当然,你也可以将其看作是一个智能机器人.ChatGPT ...
- iOS 教你使用MP、AVPlayer、AVPlayerVC构建一个完整的视频播放器
1.前言 标题必须要浮夸!要感觉像是一个大新闻.长者如是说. 其实是前几天去面试的时候,被要求说必须做过视频播放相关项目.有点闹心之余,就花了点时间在家写了一个简单播放器,基本实现了主流播放器的大致功 ...
- 深度学习笔记:01快速构建一个手写数字识别系统以及张量的概念
深度学习笔记:01快速构建一个手写数字识别系统 神经网络代码最好运行在GPU中,但是对于初学者来说运行在GPU上成本太高了,所以先运行在CPU中,就是慢一些. 一.安装keras框架 使用管理员模式打 ...
- myos1 大学生利用C++构建一个完整的操作系统打印helloworld
myos1 大学生利用C++构建一个完整的操作系统打印helloworld myos2 大学生利用C++构建一个完整的操作系统之响应键盘中断 myos3 大学生利用C++构建一个完整的操作系统之代码重 ...
- 【spring authorization server系列教程】(一)入门系列,spring authorization server简介。快速构建一个授权服务器(基于最新版本0.3.0)
系列文章目录 [spring authorization server系列教程](一)入门系列,快速构建一个授权服务器 文章目录 系列文章目录 前言 一.目前已实现的功能 二.入门,一步一步快速开始构 ...
- 使用飞冰+dva快速构建一个后台系统
使用飞冰+dva快速构建一个后台系统 写在前面 最近我们接到这样一个需求,要写一个后台管理系统,时间很急,产品也只是给出了原型稿,把功能陈列了一下,给出的要求就是先注重功能,用起来再去考虑美化.但是作 ...
- 如何快速开发一个完整的ios直播app
如何快速开发一个完整的iOS直播app 一.个人见解(直播难与易) 直播难:个人认为要想把直播从零开始做出来,绝对是牛逼中的牛逼,大牛中的大牛,因为直播中运用到的技术难点非常之多,视频/音频处理,图形 ...
- IDEA快速构建一个SpringBoot项目
IDEA快速构建一个SpringBoot项目 1.new一个Spring Initialiar 项目 2.设置项目名字等 3.选择依赖,随便选几个就行,后面再到POM加依赖就行 4.POM文件加依赖, ...
最新文章
- 打开文件和关闭文件的含义
- Codeforces Round #297 (Div. 2)E. Anya and Cubes 折半搜索
- batch helper mv_batch_body fill logic technical_request-filter_string
- 电脑屏保海底世界_水下栖息地:人类能否在海洋中居住?真的有人住在海底吗?...
- 通过生日查询各年龄段数量通过饼状图显示
- UVALive - 6442
- Linux 发行版本简介 (zz)
- python win32api win32gui win32con PyUserInput实现自动化脚本
- Matlab与微分方程解析解(dsolve)
- 计算机竞赛等级,美国计算机奥林匹克竞赛等级
- Android基于安卓手机个人理财系统
- NO.83 常用二维码对比(QR、PDF417、DM、汉信码)
- android app如何后台自启动,商家骑手端允许后台运行APP设置方法(安卓)
- 免费且非常实用的PPT模板网站(免费)亲测可用!!
- gt 630 linux驱动下载,Ubuntu 13.04 双显卡安装NVIDIA GT 630M驱动
- 百度百聘企业简单信息获取
- 属兔2013年蛇年运程
- 保卫城市消费券安全,从这些做起
- MyZip Pro for Mac(专业解压缩工具)
- 什么情况下JVM内存中的一个对象会被垃圾回收
热门文章
- Mac系统W10系统安装adb
- iOS8开发视频教程Swift语言版-Part 9:iOS分层架构设-关东升-专题视频课程
- 70-设置前台进程组
- RK3568平台开发系列讲解(环境篇)编译 Android 固件
- Android 异常 regist too many Broadcast Receivers
- windows 修改(pip/conda)镜像源
- jQuery根据身份证号判断性别(18位)
- 我的世界服务器物品栏不见,我的世界:物品展示框离不开玩家,距离过远就会凭空消失?...
- Ancient Distance
- 详细介绍预处理#define和编译链接等有关知识