自动化测试流程

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

目录

一、编写测试用例

二、执行测试用例,查找最新测试用例,自动发送测试报告

三、定时执行测试用例

   3.1方案一:Windows任务计划

   3.2方案二:Jenkins持续集成

四、成果验收

环境准备:

操作系统: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

'''

Created on 2016-7-26

@author: Jennifer

Project:整合自动发邮件功能,执行测试用例生成最新测试报告,取最新的测试报告,发送最新测试报告

问题,邮件始终不能显示html:将电脑时间改为北京时间即可

'''

import unittestfrom HTMLTestRunner import HTMLTestRunnerimport timeimport osimport smtplibfromemail.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.headerimport Header#2.定义:取最新测试报告

def new_file(test_dir):

#列举test_dir目录下的所有文件,结果以列表形式返回。

lists=os.listdir(test_dir)

#sort按key的关键字进行排序,lambda的入参fn为lists列表的元素,获取文件的最后修改时间

#最后对lists元素,按文件修改时间大小从小到大排序。

lists.sort(key=lambda fn:os.path.getmtime(test_dir+'\\'+fn))

#获取最新文件的绝对路径

file_path=os.path.join(test_dir,lists[-1])# L=file_path.split('\\')

# file_path='\\\\'.join(L)

return file_path#3.定义:发送邮件,发送最新测试报告html

def send_email(newfile):

#打开文件

f=open(newfile,'rb')

#读取文件内容

mail_body=f.read()#调试使用

# print u'打印'

# print mail_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 = "Dear all!\nThe attachment is new testreport.\nPlease check it."

#中文测试ok

# text = "Dear all!\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 '=====AutoTest Start======'

#1.执行测试用例,生成最新的测试用例

#指定测试用例为当前文件夹下的test_case目录

#如果用/可以不用r

# test_dir='./test_case'

#Windows的cmd执行:python "D:\system files\workspace\selenium\test_project\runtest_htmltestrunner_autosendemail.py"

#不用绝对路径会报:ImportError: Start directory is not importable: './test_case'

test_dir = 'D:\\system files\\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' codec can't decode byte 0xe7 in position 553: ordinal not in range(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)#调试用的

# print new_report

#3.发送邮件,发送最新测试报告html

send_email(new_report)

print '=====AutoTest Over======'

 jenkins下载地址:http://jenkins-ci.org  选择LTS(长期支持的版本),比较稳定,下载war包。

第一种启动方法,切换到jenkins.war存放的目录(随便哪个目录),输入如下命令:

> java -jar jenkins.war  #这样的话默认端口是8080

若要指定端口,则:

>java -jar jenkins.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:\system files\workspace\selenium\test_project,

    所以在该目录下创建runner.bat,runner.bat的内容如下:

    python runtest_htmltestrunner_autosendemail.py

    建议:可以事先在cmd命令行下执行runtest_htmltestrunner_autosendemail.py,确保该脚本能够在Windows下正常运行。如不能正常运行,请继续调试,找出问题,直到能够正常运行。如下:

2.创建任务计划

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

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

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

    最重要的是操作设置:

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

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

    如下:

3.查看

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

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

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

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

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

下方为配置说明:

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

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

, :表示指定列表范围。

- :表示区间范围 

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

说明:执行脚本的命令。

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

立即构建

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

点击左方的“立即构建”

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

点击这条历史记录进去

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

四、成果验收

点击返回目录

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351