zoukankan      html  css  js  c++  java
  • python 生成测试报告并发送邮件

    前言:

      使用unittest编写自动化测试脚本,执行脚本后可以很方便看到测试用例的执行情况。

    但如果想向领导汇报工作,就需要提供更直观的测试报告。

    思路:

      使用unittest编写测试用例,HTMLTestRunner生成测试报告,yagmail发送测试报告

    代码:

    测试用例:

    from selenium import webdriver
    import unittest,time,os
    from HTMLTestRunner import HTMLTestRunner

    #配置信息
    desired_caps = {}
    desired_caps["platformName"] = "Android"
    desired_caps["platformVersion"] = "7.0"
    desired_caps["deviceName"] = "HuaWeiP9"
    desired_caps["appPackage"] = "com.android.calculator2"
    desired_caps["appActivity"] = "com.android.calculator2.Calculator"
    # 支持输入中文
    desired_caps["unicodeKeyboard"] = "True"
    desired_caps["resetKeyboard"] = "True"

    class TestCalc(unittest.TestCase):

    @classmethod
    def setUpClass(cls):

    # 启动appium服务
    cls.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)

    @classmethod
    def tearDownClass(cls):

    cls.driver.quit()

    def test_add(self):
    '''加法计算'''

    driver = self.driver
    driver.find_element_by_id("com.android.calculator2:id/digit_7").click()
    driver.find_element_by_id("com.android.calculator2:id/op_add").click()
    driver.find_element_by_id("com.android.calculator2:id/digit_3").click()
    driver.find_element_by_id("com.android.calculator2:id/eq").click()
    res = driver.find_element_by_id("com.android.calculator2:id/formula").text

    # 添加断言
    self.assertEqual(res,"10","结果错误")

    def test_sub(self):
    '''减法计算'''

    driver = self.driver
    driver.find_element_by_id("com.android.calculator2:id/digit_7").click()
    driver.find_element_by_id("com.android.calculator2:id/op_sub").click()
    driver.find_element_by_id("com.android.calculator2:id/digit_3").click()
    driver.find_element_by_id("com.android.calculator2:id/eq").click()
    res = driver.find_element_by_id("com.android.calculator2:id/formula").text

    # 添加断言
    self.assertEqual(res,"4","结果错误")

    if __name__ == "__main__":
    unittest.main()

    生成测试报告:
    将if __name__ == "__main__": 后的语句做如下修改:
    if __name__ == "__main__":

    #创建测试套
    suite = unittest.TestSuite()
    #向测试套添加测试用例
    suite.addTest(TestCalc("test_add"))
    suite.addTest(TestCalc("test_sub"))

    #指定测试报告存储路径 及 文件名
    now = time.strftime("%Y-%m-%d %H_%M_%S")
    filename= "../report/"+now+" result.html"

    #使用HTMLTestRunner生成HTML测试报告
    with open(filename,"wb") as f:

    runner = HTMLTestRunner(
    stream=f,
    title="测试报告",
    description = "用例执行情况"
    )
    runner.run(suite)

    测试报告格式如图:
    用例通过:

     用例失败:

     发送邮件 

    #测试报告存储路径
    report_dir = "../report/"
    #将测试报告文件夹下的所有文件名作为一个列表返回
    lists = os.listdir(report_dir)
    #对所有测试报告按照生成时间进行排序
    lists.sort(key = lambda filename : os.path.getmtime(report_dir+filename))
    #获取最新的测试报告
    recent=lists[-1]

    #指定最新的测试报告路径
    file=os.path.join(report_dir,recent)

    #填写登录信息
    yag = yagmail.SMTP("username@126.com","password","smtp.126.com")

    #邮件正文
    content="计算器测试报告"

    #将测试报告作为附件发送
    yag.send("username@hmkx.cn","测试报告",content,file)
    
    
    
    

     

     补充说明:

    1.填写的邮箱登录密码为:126邮箱授权码,不是自己126账号的登录密码

    2.不理解sort方法请查阅:http://www.cnblogs.com/kaerxifa/p/8543491.html

    3.不理解os.path.join()请查阅:http://www.cnblogs.com/kaerxifa/p/8543505.html

    4.lists.sort(key = lambda filename : os.path.getmtime(report_dir+filename))

    sort 方法改变原数组内部的排列顺序,key参数表示一个函数,依次将数组内的每一个元素作用在该函数

    关于匿名函数:lambda,举个小例子:

    函数定义:

    func=lambda x: x+1

    调用方法:

    func(4)  返回值 5

    就这样,一个还冒着热乎气儿的测试报告就诞生了,第一次通过代码方式将用例报告以邮件形式发送,是不是还挺有成就感的呢~

  • 相关阅读:
    Python 3 Mysql 增删改查
    Python3 MySQL 数据库连接 -PyMySQL
    java 获取cookie
    Python 通过配置文件 读取参数,执行测试用例,生成测试报告并发送邮件
    Python 操作 Excel 、txt等文件
    SonarQube代码质量管理平台安装与使用
    Python + HTMLTestRunner + smtplib 完成测试报告生成及发送测试报告邮件
    Python 解析Xml文件
    GO语言基础
    FileBeat
  • 原文地址:https://www.cnblogs.com/kaerxifa/p/8543354.html
Copyright © 2011-2022 走看看