最完整的自动化测试流程: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:\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 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 = ‘[email protected]‘
    password=‘XXX‘
    #发送邮箱
    sender=‘[email protected]‘
    #多个接收邮箱,单个收件人的话,直接是receiver=‘[email protected]‘
    receiver=[‘[email protected]‘,‘[email protected]‘,‘[email protected]‘]
    #发送邮件主题
    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 = 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‘] = ‘[email protected] <[email protected]>‘
#    msg[‘To‘] = ‘[email protected]‘
    #多个收件人
    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 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=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 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,所以我们只需要下载安装就可以直接启动。

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目录,所以在地址栏上需要输入的地址于上一种方法有点不一样。

项目配置

点击左方的“新建”。

下方为配置说明:

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

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

, :表示指定列表范围。

- :表示区间范围

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

说明:执行脚本的命令。

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

立即构建

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

点击左方的“立即构建”

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

点击这条历史记录进去

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

四、成果验收

点击返回目录

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

在此需要感谢虫师编著的“selenium2 自动化测试实战 基于Python语言”。

(尊重笔者的劳动哦,转载请说明出处哦。)

转自:https://www.cnblogs.com/yufeihlf/p/5752146.html

原文地址:https://www.cnblogs.com/smarter/p/9934984.html

时间: 2024-11-01 14:58:37

最完整的自动化测试流程:Python编写执行测试用例及定时自动发送最新测试报告邮件的相关文章

python编写执行指定路径下的hotup.sh脚本

#!/usr/bin/env python #coding:utf-8 import os import re import sys num = [] game_gen_path = '/data/bz-tw-and/' for dirs in os.listdir(game_gen_path): if re.match('s\d+',dirs): num.append(dirs[1:]) number = sorted(map(int,num)) def callable(input_args

Python 多线程执行测试用例并生成多个报告

为了满足之前的需求,同时运行多个测试用例. 1 #! /usr/bin/env python 2 #coding=utf-8 3 import threading 4 from multiprocessing import Queue 5 from time import ctime,sleep 6 from subprocess import Popen,PIPE 7 import os,time 8 lock=threading.Lock() 9 #单个测试用例生成的临时报告,当前目录下re

Python编写Appium测试用例(2)

#coding=utf-8import os,sysimport unittestfrom appium import webdriverimport timefrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC # Retur

Python3+Selenium2完整的自动化测试实现之旅(五):自动化测试框架、Python面向对象以及POM设计模型简介

前言 之前的系列博客,陆续学习整理了自动化测试环境的搭建.IE和Chrome浏览器驱动的配置.selenium-webdriver模块封装的元素定位以及控制浏览器.处理警示框.鼠标键盘等方法的使用,这些内容还需要后续多加练习掌握,以达到灵活运用的程度.but,这仅仅只是开始,说明咱们能够使用selenium框架下的webdriver写出一个个测试用例脚本,也仅仅写给自己看看,如果需要写100条.1000条测试脚本,并能够高效快速的编写完成并批量执行,且要看到完整的执行结果,失败多少,成功多少,等

python学习之内部执行流程,内部执行流程,编码(一)

python的执行流程: 加载内存--->词法分析--->语法分析--->编译--->转换字节码---->转换成机器码---->供给CPU调度 python的编码: 1. ASCII    2的256次表示. 2. UNICODE  最好16位表示2字节 3. UTF-8 能就8位表示就用8位表示,节省资源. python的注释: 字符 '#': 只注释一行 字符"  '''  ":注释多行 python的教程参数: 用 sys模块 的argv参数,

从底层理解Python的执行

摘要:是否想在Python解释器的内部晃悠一圈?是不是想实现一个Python代码执行的追踪器?没有基础?不要怕,这篇文章让你初窥Python底层的奥妙. [编者按]下面博文将带你创建一个字节码级别的追踪API以追踪Python的一些内部机制,比如类似YIELDVALUE.YIELDFROM操作码的实现,推式构造列表(List Comprehensions).生成器表达式(generator expressions)以及其他一些有趣Python的编译. 关于译者:赵斌, OneAPM工程师,常年使

[译]Python编写虚拟解释器

使用Python编写虚拟机解释器 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到程序: 1. LX终端(LXTerminal):Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令2. GVim:非常好用的编辑器,最简单的用法可以参考课程Vim编辑器 3. 环境使用 使用R语言交互式环境输入实验所需的代码及文件,使用LX终端(LXTermina

简单实现接口自动化测试(基于python+unittest)

简单实现接口自动化测试(基于python+unittest) 简介 本文通过从Postman获取基本的接口测试Code简单的接口测试入手,一步步调整优化接口调用,以及增加基本的结果判断,讲解Python自带的Unittest框架调用,期望各位可以通过本文对接口自动化测试有一个大致的了解. 引言 为什么要做接口自动化测试? 在当前互联网产品迭代频繁的背景下,回归测试的时间越来越少,很难在每个迭代都对所有功能做完整回归.但接口自动化测试因其实现简单.维护成本低,容易提高覆盖率等特点,越来越受重视.

使用C语言为python编写动态模块(1)--从底层深度解析python中的对象以及变量

楔子 我们知道可以通过使用C语言编写动态链接库的方式来给python加速,但是方式是通过ctypes来加载,通过类CDLL将动态链接库加载进来得到一个对象之后,通过这个对象来调用动态链接库里面的函数.那么问题来了,我们可不可以使用C语言为python编写模块呢?然后在使用的时候不使用ctypes加载动态库的方式,而是通过python的关键字import进行加载. 答案是可以的,我们知道可以通过编写py文件的方式来得到一个模块,那么也可以使用C语言来编写C源文件,然后再通过python解释器进行编