• 0
  • 0
分享
  • 完整的自动化测试流程——软件测试圈
  • 北极 2021-05-26 15:17:00 字数 5981 阅读 1899 收藏 0

环境准备:

操作系统:Windows7

集成开发环境:eclipse+pydev

一、编写测试用例

点击返回目录

可以直接使用Python自带的单元测试框架unittest来编写自动化测试用例,利用其组织测试用例,断言预期结果,以及批量执行测试用例等功能,可以很好的进行Web自动化测试的开发。

可以直接查看我另外一篇博文总结:unittest单元测试框架总结

里边详细总结了使用unittest框架编写测试用例思路(模板)和使用unittest框架编写测试用例实例。

目录结构如下组织:

1.jpg

如上图: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文件

2.png

将jenkins.war文件放入tomcat下的webapps目录下,启动jenkins时,会自动在webapps目录下建立jenkins目录,所以在地址栏上需要输入的地址于上一种方法有点不一样。
项目配置
点击左方的“新建”。

3.png

4.png

直接在eclipse运行,运行结果如下:

..表示两个测试用例都执行通过。

5.jpg

三、定时执行测试用例

点击返回目录

方案一:直接使用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下正常运行。如不能正常运行,请继续调试,找出问题,直到能够正常运行。如下:

6.jpg

2、创建任务计划

2.1 右键计算机,点击管理,点击任务计划程序,再点击右方的创建任务。

7.jpg

2.2 常规中,填写名称,如:定时执行Python脚本

触发器中,指定执行脚本时间。

最重要的是操作设置:

程序和脚本填写runner.bat这个文件的名称

起始于填写runner.bat所在路径,D:\systemfiles\workspace\selenium\test_project

如下:

8.jpg

3、查看

在任务计划程序库中,就会出现该任务。

9.jpg

方案二:使用Jenkins定时执行脚本

Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,所以可用于定时执行python脚本。

环境准备:jdk1.7及以上+Jenkins[+tomcat(可选)]

Jenkins的安装可以通过tomcat作为容器安装,由于Jenkins包就自带了servlet,所以我们只需要下载安装就可以直接启动。

下方为配置说明:

10.png

说明:日程表依次是分钟小时日月星期

*:表示每,每分钟,每小时,每天,每月,每星期等

,:表示指定列表范围。

-:表示区间范围

所以01**1-5表示每个月的星期一到星期五,凌晨一点定时执行脚本。

11.png

说明:执行脚本的命令。

上面配置完成后点击保存即可。

立即构建

可先手动构建项目,查看项目是否能够执行通过。

点击左方的“立即构建”

12.png

构建完成后,BuildHistory就会有一条记录。

13.png

点击这条历史记录进去

14.png

再点击ConsoleOutput,可查看到日志,Finished:SUCCESS,说明已成功。

15.png

四、成果验收

点击返回目录

然后只需要静静的等待,测试报告邮件的到来。

16.jpg

同时也要感谢原创博主。


作者:让学习成为一种生活方式

原文链接:https://www.cnblogs.com/star12111/p/8046419.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   大疆即将推出的一款全新无人机 Neo 遭到泄露,根据曝光的照片、包装盒、参数以及沃尔玛的定价信息,这款无人机有望成为大疆旗下最轻、最便宜的全功能无人机。  泄露的沃尔玛产品页面显示,大疆 Neo Fly More 组合套装的售价仅为 329 美元(IT之家备注:当前约 2385 元人民币)。考虑到该套装通常包含额外电池、充电器和肩包,单独无人机的起售价可能会更低。  爆料人 Jasper Ellens 在社交媒体上发布的零售包装照片以及 FCC 数据库的信息进一步揭示了该无人机的参数,其将支持 4K 视频拍摄。  这款无人机仅重 135 克,有望成为大疆迄今为止最轻的消费级无人机,比 24...
            0 0 467
            分享
          • 编写一份优秀的接口文档会让软件开发中变得更加轻松,更有效率。这可是关键任务,写得好不仅可以帮助开发人员更好地理解和使用 API 接口,还可以提高整个团队的协作效率。大家可以在线感受一下优秀的接口文档是怎样的:https://petstore.apifox.cn那么我们该如何写好一份优秀的接口文档呢?接口文档结构首先我们要知道文档结构是什么样子的。接口文档应该有清晰明确的结构,以便开发人员能快速定位自己需要的 API 接口信息,同时帮助快速理解。一般来说,接口文档应该包括以下内容:接口概述接口参数接口请求和响应示例接口返回码接口调用方法这些内容都包括的话,起码在结构完整性上就已经做得很好了。接下...
            0 0 1259
            分享
          •   一、银行海外业务总概  在银行系统中,国内业务系统和海外业务系统是分开的,它们的业务、功能、流程不同,那意味着环境、应用、部署等等是完全不一样的,那对于测试人员来说,这就是国内外的业务系统,就是两套完全不一样的功能系统,但测试方法是可以相通的。总体来说,海外业务的比国内业务少一些,主要集中在票据业务、支付清算、定期业务、活期业务和客户业务等等方面。  二、银行系统术语定义  三、银行海外系统的架构  四、票据业务  银行票据交换业务是银行之间进行商业汇票、本票、支票、汇票等票据交换的业务。目前来说,海外的业务一般指的是澳门分行和香港分行的业务,他们的票据业务包括本行交换票扣账、他行交换票扣...
            0 0 863
            分享
          • 通常我们在谈论性能测试的时候,往往将性能测试分为压力测试和负载测试两大类去讨论,在设计性能测试方案和执行性能测试过程的时候,也是基于这两个角度去思考。在传统意义上,通过这两个手段去评估某个系统的性能表现已经很完美了。但是随着大数据互联网、移动互联网等新兴概念的兴起,传统的性能测试概念、方法已经无法全面的引导我们开展性能测试工作。比如移动端的兴起与广泛应用,移动端的性能也是性能测试的范围;再比如如何评估系统扩展性、弹性性能表现相关的容量测试,也要我们去关注。因为公司最近做服务端容量的相关工作,因此我们就性能测试,容量评估两个角度去重新定义性能测试的工作范围和职责。1、性能测试性能测试的最终目的是...
            0 0 6065
            分享
          •   机器学习中各式各样的聚类算法层出不穷,包括层次聚类、系统聚类、K中心聚类、DBSCAN聚类等等。DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法,它最大的优点是能够把具有足够高密度的区域划分为簇,并在具有噪声的空间中发现任意形状的聚类,因而被广泛应用。  01  传统DBSCAN聚类算法采用穷举搜索进行数据的划分,通过在聚类过程中多次遍历待划分数据得到划分结果。这种算法称为蛮力算法,时间复杂度达到了O(n2),数据量较少时可以在较短时间内完成数据划分。  02  Kd...
            0 0 965
            分享
      • 51testing软件测试圈微信