Python3+unitest自动化测试初探(中篇)

目录

  • 6、生成测试报告
  • 7、编写邮件发送工具
  • 8、发送邮件


本篇随笔承接:Python3+unitest自动化测试初探(上篇)

地址:Python3+unitest自动化测试初探(上篇)

6、生成测试报告

6.1、下载HTMLTestRunner.py

原版下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html

原版的只支持Python 2.x版本,Python 3.x版本需要做适配

适配后的下载地址:https://github.com/Slience007/pyunitest/blob/master/untils/HTMLTestRunner.py

6.2、安装HTMLTestRunner.py

安装方法比较简单,将HTMLTestRunner.py放到sys.path路径下即可。ubuntu下,我放到了如下路径:/usr/lib/python3.7。

6.3、生成报告

HTMLTestRunner.py提供HTMLTestRunner()类来代替unittest.TextTestRunner()执行用例,修改后的run.py的代码如下:

#coding:utf-8
import  unittest
#导入HTMLTestRunner
from HTMLTestRunner import  HTMLTestRunner
#从testCase包里面导入测试类
from testCases.userLoginTest import loginTest
from testCases.userRegTest import regTest

#构造测试套
def suite():
    suite = unittest.TestSuite()
    suite.addTest(loginTest("test_loginsucess_L0"))
    suite.addTest(loginTest("test_pwdwrong_L0"))
    suite.addTest(loginTest("test_statuserr_L1"))
    suite.addTest(regTest("test_pwdlenerr_L1"))
    suite.addTest(regTest("test_regsucess_L0"))
    suite.addTest(regTest("test_regagain_L1"))
    return suite

#运行测试用例
if __name__ == ‘__main__‘:
    # runner = unittest.TextTestRunner()
    # #调用test runner的run方法执行用例
    # runner.run(suite())
    #以二进制格式打开TestReport.html用于写入数据
    with open("./TestReport.html","wb") as f:
        runner = HTMLTestRunner(stream=f,title="Reg And Login Test Report")
        runner.run(suite())

运行run.py后,打开TestReport.html,查看生成的测试报告。

7、编写邮件发送工具

在Project下新建包utils用来封装一些常用的工具,在utils下新建Python文件emailUtil.py。定义sendEmail类。这个类主要包含3个方法:

  1. init():初始化
  2. writeEmail():构造邮件主题,邮件正文,添加邮件附件。
  3. sendEmail():连接邮件服务器,认证,发送邮件。我采用的是网易邮件服务器,其地址是smtp.126.com。收件地址为QQ邮箱。

[ 代码如下:]emailUtil.py

#coding:utf-8
‘‘‘
email模块负责构造邮件内容
smtplib模块负责发送邮件
‘‘‘
from email.mime.text import  MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib
from email.header import Header

class sendEmail():
    #定义全局变量邮件服务器地址,登录用户,授权码
    global MAILHOST,MAILUSER,MAILPWD
    MAILHOST = "smtp.126.com"
    MAILUSER = "××××@126.com"
    MAILPWD = "×××"

    def __init__(self,subject,content,reveiver,attachPath=""):
        self.subject = subject
        self.content = content
        self.receiver = reveiver
        self.attachPath = attachPath
    #写邮件,返回msg.as_string()
    def writeEmail(self):
        msg = MIMEMultipart()
        #邮件正文
        msg.attach(MIMEText(self.content, ‘plain‘, ‘utf8‘))
        receiverName = ",".join(self.receiver)
        msg[‘from‘] = Header(MAILUSER,‘utf-8‘)
        #msg[‘to‘] =  Header(",".join(self.receiver)).encode()
        msg[‘to‘] = Header(receiverName).encode()
        #邮件主题
        msg[‘Subject‘] = Header(self.subject,‘utf-8‘).encode()
        #print("msg is:",msg)
        #attachPath不为空则添加附件到邮件中
        if self.attachPath != "":
            with open(self.attachPath, ‘rb‘) as f:
                attach1  = MIMEText(f.read(), ‘base64‘, ‘utf-8‘)
                attach1["Content-Type"] = ‘application/octet-stream‘
                #filename可以随便写
                attach1["Content-Disposition"] = ‘attachment; filename="Result.html"‘
                msg.attach(attach1)

        return msg.as_string()

    #发送邮件
    def sendEmail(self):
        receiver = ";".join(self.receiver)
        try:
            #连接邮件服务器
            server = smtplib.SMTP()
            server.connect(MAILHOST,25)
            #打开debug模式可以看到握手过程
            #server.set_debuglevel(1)
            #登录,MAILPWD为网易邮件的授权码
            server.login(MAILUSER,MAILPWD)
            #发送邮件
            server.sendmail(MAILUSER,receiver,self.writeEmail())
            server.quit()
            print("Email send sucess.")
        except Exception as  e:
            print("Email send fail.")
            print(e)

在编写邮件工具的时候,碰到了一个错误:smtplib.SMTPDataError: (554, b‘DT:SPM。原因可能是:邮件被网易邮件服务器当成了垃圾邮件。解决办法:邮件主题不能包含test,另外msg[from"],msg[‘to‘]要和server.sendmail(MAILUSER,receiver,self.writeEmail())中的MAILUSER和receiver保持一致。

8、发送邮件

在发送邮件之前,先获取本次执行用例总数,失败用例数,成功用例数,跳过的用例数。并计算出用例通过率。

  1. suite().countTestCases():获取用例总数。
  2. runner.run(suite()).success_count:运行通过的用例数。
  3. runner.run(suite()).failure_count:失败的用例数。
  4. runner.run(suite()).skipped:返回的是跳过的用例list。

接下来来修改run.py ,需要先从utils模块导入sendEmail类,构造主题,邮件正文,指定收件人列表,指定测试报告的路径,之后调用sendEmail方法发送邮件。修改后的run.py代码如下:

#coding:utf-8
import  unittest
#导入HTMLTestRunner
from HTMLTestRunner import  HTMLTestRunner
#从testCase包里面导入测试类
from testCases.userLoginTest import loginTest
from testCases.userRegTest import regTest

from utils.emailUtil import sendEmail
#构造测试套
def suite():
    suite = unittest.TestSuite()
    suite.addTest(loginTest("test_loginsucess_L0"))
    suite.addTest(loginTest("test_pwdwrong_L0"))
    suite.addTest(loginTest("test_statuserr_L1"))
    suite.addTest(regTest("test_pwdlenerr_L1"))
    suite.addTest(regTest("test_regsucess_L0"))
    suite.addTest(regTest("test_regagain_L1"))
    return suite

#运行测试用例
if __name__ == ‘__main__‘:
    # runner = unittest.TextTestRunner()
    # #调用test runner的run方法执行用例
    # runner.run(suite())
    #以二进制格式打开TestReport.html用于写入数据
    with open("./TestReport.html","wb") as f:
        runner = HTMLTestRunner(stream=f,title="Reg And Login Test Report")
        result = runner.run(suite())
        totalNums = suite().countTestCases()
        passedNums = result.success_count
        failedNums = result.failure_count
        skippedNums = len(result.skipped)
        #通过率,保留两位小数
        passRate = round(passedNums * 100/  totalNums)
        emailBody = "Hi,all:\n \t本次构建一共运行:{totalNums}个用例,通过{passedNums}个,失败{failedNums}个,跳过{skippedNums}个。通过率:{passRate}%.\n \t详细信息请查看附件。"
        content = emailBody.format(totalNums=totalNums,passedNums=passedNums,failedNums=failedNums,skippedNums=skippedNums,passRate=passRate)
        #收件人列表
        receiver = [‘××××@qq.com‘,"×××××@126.com"]
        #测试报告的路径
        path1 = "/home/stephen/PycharmProjects/unitTestDemo/TestReport.html"
        subject = "登录注册功能每日构建"
        e = sendEmail(subject,content,receiver,attachPath=path1)
        #发送邮件
        e.sendEmail()

运行run.py。登录邮箱查看已经发送成功的邮件。

点击这里返回本篇目录

原文地址:https://www.cnblogs.com/webDepOfQWS/p/10725194.html

时间: 2024-10-08 06:48:14

Python3+unitest自动化测试初探(中篇)的相关文章

Appium IOS 自动化测试初探

手机平台的自动化测试工具很多,之前研究过了安卓和苹果的原生自动化测试框架,经一些同事介绍,貌似Appium是个不错的工具. 想记录一下研究的结果,也算是篇干货的文章 在网上也看了一些视频,个人认为这个自动化测试的特点就是 1. 多编程语言支持 相对于传统的IOS UIautomation只能支持js语言,Appium起到了一个翻译的作用,它其实是一个CS架构,服务器和IOS模拟器或真机直接通讯,客户端和服务器之间用HTTP协议进行交互,所以客户端用什么语言其实不重要.下面会有一个python编程

第9期《python3接口自动化测试》课程,6月29号开学!

2019年 第13期<python3接口自动化测试>课程,6月29号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学 本期上课时间:6月29号-7月28号,每周六.周日晚上20:30-22:30 报名费:报名费1000一人(周期1个月) 联系QQ:283340479 个人成就: 1.个人博客,百度直接搜索:上海-悠悠博客 2.个人原创微信公众号:yoyoketang 3.已经在百度阅读上线的python四大名著,百度搜索:百度阅读,再搜索书名: <selenium webdri

Python3+Selenium3自动化测试学习之路

1.Python3+Selenium3自动化测试环境搭建 2.Python简单学习 3.元素定位 4.常用浏览器操作 5.断言与验证信息 6.表单.窗口切换 7.上传.下载文件 8.单元测试框架 9.HTML测试报告 10.PO设计模式(Page Object) 未完待续... 原文地址:https://www.cnblogs.com/yichenxinliang/p/12273276.html

Python3+Selenium3自动化测试-(二)

python3 元素定位和操作方法总结 # coding=utf-8 ''' #8种元素定位方法 find_element_by_id() find_element_by_name() find_element_by_class_name() find_element_by_link_text() find_element_by_partial_text() find_element_by_tag_name() find_element_by_xpath() find_element_by_cs

Android自动化测试初探(五): 再述模拟键盘鼠标事件(adb shell 实现) .

http://blog.csdn.net/roger_ge/article/details/5552740 转自csdn,实现模拟鼠标键盘系列 上一篇博文中讲述了通过Socket编程从外部向Emulator发送键盘鼠标模拟事件,貌似实现细节有点复杂.其实Android还有一种更简单的模拟键盘鼠标事件的方法,那就是通过使用adb shell 命令. 1.     发送键盘事件: 命令格式1:adb shell input keyevent "value" 其中value以及对应的key

Python3+Selenium3自动化测试-(一)

完成环境的安装并测试之后,我们对Selenium有了一定的了解了,接下来我们继续驱动浏览器做一些基本操作: 窗口尺寸设置.网页截图.刷新.前进和后退 窗口尺寸设置 在测试过程中,我们可能会要求打开浏览器的窗口处于最大化或者设置为某一特定尺寸的大小,所以我们使用selenium驱动浏览器时设定窗口大小 # coding=utf-8 import time from selenium import webdriver driver = webdriver.Chrome() # 启动chrome de

Python3+Selenium3自动化测试-(四)

selenium鼠标事件 # coding=utf-8 import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChains driver = webdriver.Chrome() driver.get("https://www.baidu.com") t

Python3+Selenium3自动化测试-(三)

selenium键盘事件 #coding=utf-8 from selenium import webdriver import time from selenium.webdriver.common.keys import Keys #打开狐火浏览器 driver = webdriver.Firefox() #访问目标网址 driver.get("http://127.0.0.1:80/iwebshop") driver.maximize_window() #打印当前页面title

关于Selenium3+python3.6自动化测试中iframe切换

本篇内容主要表述以下几个问题: 1.iframe 这个是什么? 2.定位iframe 标签时遇到的几个报错总结. 3.显示等待与隐示等待的原理与优缺点. 4.无name,ID可变情况下的处理方式 5.frame标签中嵌套iframe标签时的处理思路 最开始根本没想到这个事情,就按照正常的方式操作,结果,,,这都是什么鬼.怎么都定位不到这个元素,不能进行下一步. 后来了解了一下,原来是iframe这个鬼东西在捣乱. 一.先说一下这个是什么东西 . firame: Iframe标记又叫浮动帧标记,可