zoukankan      html  css  js  c++  java
  • (转载)最完整的自动化测试流程:Python编写执行测试用例及定时自动发送最新测试报告邮件

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

    目录

    一、编写测试用例

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

    三、定时执行测试用例

       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:Python27Lib目录下即可。

        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 unittest
    from HTMLTestRunner import HTMLTestRunner
    import time
    import os
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.header import 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!
    The attachment is new testreport.
    Please check it."  
        #中文测试ok
    #    text = "Dear all!
    附件是最新的测试报告。
    麻烦下载下来看,用火狐浏览器打开查看。
    请知悉,谢谢。"   
    #    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 = MIMEText(mail_body,'html','utf-8')
        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['Subject']=Header(subject,'utf-8')
    
        #连接发送邮件
        smtp=smtplib.SMTP()
        smtp.connect(smtpserver,25)
        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 filesworkspaceselenium	est_project
    untest_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=time.strftime('%Y-%m-%d_%H_%M_%S_')
        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)
    #注意:调用函数一定要加括号,一个括号害死个人,哎,查了几天的问题,才发现导致html文件始终显示空白,就是因为close函数调用不正确,漏了括号。
        fp.close() 
        
        #2.取最新测试报告
        new_report=new_file(test_report_dir)
    #调试用的
    #    print new_report
        
        #3.发送邮件,发送最新测试报告html
        send_email(new_report)
        print '=====AutoTest Over======'
        
    复制代码

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

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

     

    三、定时执行测试用例

    点击返回目录

    方案一:直接使用Windows任务计划执行Python测试脚本。

    1.创建runner.bat

        由于runtest_htmltestrunner_autosendemail.py脚本目录为D:system filesworkspaceselenium est_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 filesworkspaceselenium est_project

        如下:

    3.查看

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

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

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

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

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

        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: omcat9,进入tomcat下的/bin目录,启动tomcat:即双击startup.bat文件
    将jenkins.war文件放入tomcat下的webapps目录下,启动jenkins时,会自动在webapps目录下建立jenkins目录,所以在地址栏上需要输入的地址于上一种方法有点不一样。
     
    项目配置
    点击左方的“新建”。

    下方为配置说明:

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

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

    , :表示指定列表范围。

    - :表示区间范围 

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

    说明:执行脚本的命令。

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

    立即构建

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

    点击左方的“立即构建”

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

     

    点击这条历史记录进去

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

     

    四、成果验收

    点击返回目录

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

    原文出处:https://www.cnblogs.com/yufeihlf/p/5752146.html    如有侵权,请联系本人删除,非常感谢!

                    

  • 相关阅读:
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 344 反转字符串
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
  • 原文地址:https://www.cnblogs.com/linuxchao/p/linuxchao-autotest-reprinted-1.html
Copyright © 2011-2022 走看看