环境准备:
操作系统:Windows7
集成开发环境:eclipse+pydev
点击返回目录
可以直接使用Python自带的单元测试框架unittest来编写自动化测试用例,利用其组织测试用例,断言预期结果,以及批量执行测试用例等功能,可以很好的进行Web自动化测试的开发。
可以直接查看我另外一篇博文总结:unittest单元测试框架总结
里边详细总结了使用unittest框架编写测试用例思路(模板)和使用unittest框架编写测试用例实例。
目录结构如下组织:
如上图:test_case目录下有两个测试用例,其中test_baidu.py实例代码在博文“unittest单元测试框架总结”中有贴出。其他实例,可以参考模板实现,就不全部贴出代码了。
而这次需要测试的就是test_baidu.py和test_youdao.py这两个测试用例。
点击返回目录
整个代码执行过程可以分成三个步骤:
1、通过unittest框架的discover()找到匹配的测试用例(以test_开头的脚本),由HTMLTestRunner的run()方法执行测试用例并生成最新测试报告。HTMLTestRunner是Python标准卡unittest单元测试框架的一个扩展,主要用于生成HTML测试报告,以便生成一份通俗易懂的测试报告来展示自动化测试成果。
HTMLTestRunner模块下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html
将下载的文件保存在C:\Python27\Lib目录下即可。
2、先定义new_file()函数(找到某目录最新文件),调用new_file()函数找到测试报告目录下最新生成的测试报告,返回最新测试报告的路径。
3、先定义send_email()函数(发送指定路径下某文件的邮件),将得到的最新测试报告的完整路径传给send_email()函数,实现发邮件功能。
关于发邮件功能,也可以参考我另外一篇博文:Python自动发邮件总结及实例说明
代码如下:注释中包括实现的过程说明以及一些在测试过程中遇到的问题。
文件命名为runtest_htmltestrunner_autosendemail.py
#coding=utf-8 ''' Createdon2016-7-26 @author:Jennifer Project:整合自动发邮件功能,执行测试用例生成最新测试报告,取最新的测试报告,发送最新测试报告 问题,邮件始终不能显示html:将电脑时间改为北京时间即可 ''' importunittestfromHTMLTestRunnerimportHTMLTestRunnerimporttimeimportosimportsmtplibfromemail.mime.textimportMIMETextfromemail.mime.multipartimportMIMEMultipartfromemail.headerimportHeader#2.定义:取最新测试报告 defnew_file(test_dir): #列举test_dir目录下的所有文件,结果以列表形式返回。 lists=os.listdir(test_dir) #sort按key的关键字进行排序,lambda的入参fn为lists列表的元素,获取文件的最后修改时间 #最后对lists元素,按文件修改时间大小从小到大排序。 lists.sort(key=lambdafn:os.path.getmtime(test_dir+'\\'+fn)) #获取最新文件的绝对路径 file_path=os.path.join(test_dir,lists[-1])#L=file_path.split('\\') #file_path='\\\\'.join(L) returnfile_path#3.定义:发送邮件,发送最新测试报告html defsend_email(newfile): #打开文件 f=open(newfile,'rb') #读取文件内容 mail_body=f.read()#调试使用 #printu'打印' #printmail_body #关闭文件 f.close() #发送邮箱服务器 smtpserver='smtp.163.com' #发送邮箱用户名/密码 user='XXX@163.com' password='XXX' #发送邮箱 sender='XXX@163.com' #多个接收邮箱,单个收件人的话,直接是receiver='XXX@126.com' receiver=['XXX@126.com','XXX@126.com','XXX@doov.com.cn'] #发送邮件主题 subject='自动定时发送测试报告20160808' #编写HTML类型的邮件正文 #MIMEText这个效果和下方用MIMEMultipart效果是一致的,已通过。 #msg=MIMEText(mail_body,'html','utf-8') msg=MIMEMultipart('mixed') #注意:由于msg_html在msg_plain后面,所以msg_html以附件的形式出现 #text="Dearall!\nTheattachmentisnewtestreport.\nPleasecheckit." #中文测试ok #text="Dearall!\n附件是最新的测试报告。\n麻烦下载下来看,用火狐浏览器打开查看。\n请知悉,谢谢。" #msg_plain=MIMEText(text,'plain','utf-8') #msg.attach(msg_plain) msg_html1=MIMEText(mail_body,'html','utf-8')msg.attach(msg_html1)msg_html msg.attach(msg_html1) msg_html=MIMEText(mail_body,'html','utf-8')msg_html[ msg_html["Content-Disposition"]='attachment;filename="TestReport.html"' msg.attach(msg_html) #以附件的方式发送:但是会报554,倍163退信。--此路不通。 #msg_html=MIMEText(mail_body,'base64','utf-8') #msg_html["Content-Type"]='application/octet-stream' #msg_html.add_header('Content-Disposition','attachment',filename='testreport.html') #msg.attach(msg_html) #要加上msg['From']这句话,否则会报554的错误。 #要在163有限设置授权码(即客户端的密码),否则会报535 msg['From']='XXX@163.com<XXX@163.com>' #msg['To']='XXX@doov.com.cn' #多个收件人 msg['To']=";".join(receiver)msg[ msg['Subject']=Header(subject,'utf-8')#连接发送邮件 smtp=smtplib.SMTP()smtp.connect(smtpserver, smtp.connect(smtpserver,25)smtp.login(user,password)smtp.sendmail(sender,receiver,msg.as_string())smtp.quit()smtp.login(user,password) smtp.sendmail(sender,receiver,msg.as_string()) smtp.quit()if__name__=='__main__': print'=====AutoTestStart======' #1.执行测试用例,生成最新的测试用例 #指定测试用例为当前文件夹下的test_case目录 #如果用/可以不用r #test_dir='./test_case' #Windows的cmd执行:python"D:\systemfiles\workspace\selenium\test_project\runtest_htmltestrunner_autosendemail.py" #不用绝对路径会报:ImportError:Startdirectoryisnotimportable:'./test_case' test_dir='D:\\systemfiles\\workspace\\selenium\\test_project\\test_case' #知道测试报告的路径 test_report_dir='D:\\pythontest\\testresult' discover=unittest.defaultTestLoader.discover(test_dir,pattern='test_*.py')now now=time.strftime('%Y-%m-%d_%H_%M_%S_')filename filename=test_report_dir+'\\'+now+'result.html' fp=open(filename,'wb')#需屏蔽fp中的中文文字说明。否则在windows下执行会报:UnicodeDecodeError:'ascii'codeccan'tdecodebyte0xe7inposition553:ordinalnotinrange(128) runner=HTMLTestRunner(stream=fp,title=u'测试报告',description=u'用例执行情况:')runner.run(discover)runner.run(discover) #注意:调用函数一定要加括号,一个括号害死个人,哎,查了几天的问题,才发现导致html文件始终显示空白,就是因为close函数调用不正确,漏了括号。 fp.close() #2.取最新测试报告 new_report=new_file(test_report_dir)#调试用的 #printnew_report #3.发送邮件,发送最新测试报告html send_email(new_report) print'=====AutoTestOver======' 复制代码 jenkins下载地址:http://jenkins-ci.org选择LTS(长期支持的版本),比较稳定,下载war包。 第一种启动方法,切换到jenkins.war存放的目录(随便哪个目录),输入如下命令: >java-jarjenkins.war#这样的话默认端口是8080 若要指定端口,则: >java-jarjenkins.war--httpPort=8080 然后在浏览器中(推荐用火狐)输入localhost:8080,localhost可以是本机的ip,也可以是计算机名。就可以打开jenkins. 我就是用第一种方法安装Jenkins。 第二种方法是用tomcat打开 tomcat下载地址:http://tomcat.apache.org/ 解压tomcat到某个目录,如D:\tomcat9,进入tomcat下的/bin目录,启动tomcat:即双击startup.bat文件
将jenkins.war文件放入tomcat下的webapps目录下,启动jenkins时,会自动在webapps目录下建立jenkins目录,所以在地址栏上需要输入的地址于上一种方法有点不一样。 项目配置 点击左方的“新建”。
直接在eclipse运行,运行结果如下:
..表示两个测试用例都执行通过。
点击返回目录
方案一:直接使用Windows任务计划执行Python测试脚本。
1、创建runner.bat
由于runtest_htmltestrunner_autosendemail.py脚本目录为D:\systemfiles\workspace\selenium\test_project,
所以在该目录下创建runner.bat,runner.bat的内容如下:
pythonruntest_htmltestrunner_autosendemail.py
建议:可以事先在cmd命令行下执行runtest_htmltestrunner_autosendemail.py,确保该脚本能够在Windows下正常运行。如不能正常运行,请继续调试,找出问题,直到能够正常运行。如下:
2、创建任务计划
2.1 右键计算机,点击管理,点击任务计划程序,再点击右方的创建任务。
2.2 常规中,填写名称,如:定时执行Python脚本
触发器中,指定执行脚本时间。
最重要的是操作设置:
程序和脚本填写runner.bat这个文件的名称
起始于填写runner.bat所在路径,D:\systemfiles\workspace\selenium\test_project
如下:
3、查看
在任务计划程序库中,就会出现该任务。
方案二:使用Jenkins定时执行脚本
Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,所以可用于定时执行python脚本。
环境准备:jdk1.7及以上+Jenkins[+tomcat(可选)]
Jenkins的安装可以通过tomcat作为容器安装,由于Jenkins包就自带了servlet,所以我们只需要下载安装就可以直接启动。
下方为配置说明:
说明:日程表依次是分钟小时日月星期
*:表示每,每分钟,每小时,每天,每月,每星期等
,:表示指定列表范围。
-:表示区间范围
所以01**1-5表示每个月的星期一到星期五,凌晨一点定时执行脚本。
说明:执行脚本的命令。
上面配置完成后点击保存即可。
立即构建
可先手动构建项目,查看项目是否能够执行通过。
点击左方的“立即构建”
构建完成后,BuildHistory就会有一条记录。
点击这条历史记录进去
再点击ConsoleOutput,可查看到日志,Finished:SUCCESS,说明已成功。
点击返回目录
然后只需要静静的等待,测试报告邮件的到来。
同时也要感谢原创博主。
作者:让学习成为一种生活方式
原文链接:https://www.cnblogs.com/star12111/p/8046419.html