Appium自动化框架从0到1之 执行测试用例& 生成测试报告&发送邮件

简介: Appium自动化框架从0到1之 执行测试用例& 生成测试报告&发送邮件

1.运行测试用例&生成测试报告


直接上代码:


TestRunnerToReport.py


# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-7-10
"""
import unittest
import HTMLTestRunner
import  time
import logging
import sys
'''
这个文件,只执行以下两个步骤:
1.执行用例
2.保存报告
'''
#测试用例文件路径
test_dir = '../test_case'
#测试报告文件路径
report_dir = '../report/'
#获取当前时间
now = time.strftime('%Y-%m-%d %H_%M_%S',time.localtime(time.time()))
#生成测试报告文件格式
report_name = report_dir + now +'test_report.html'
#加载测试用例
# discover = unittest.defaultTestLoader.discover(test_dir,pattern='test_login.py')
discover = unittest.defaultTestLoader.discover(test_dir,pattern='test*.py')
#生成并运行测试用例
with open(report_name,'wb') as f:
    runner = HTMLTestRunner.HTMLTestRunner(stream=f, title=" xxx项目移动APP Test Report", description=" Andriod app Test Report")
    logging.info('start run testcase')
    runner.run(discover)

2.运行测试用例&生成报告&邮件发送


2.1邮箱信息配置


2.1.1在yaml文件中配置邮箱信息


email.yaml
smtp_server: smtp.qq.com
port: 465
#sender: carl_dj@xx.com
#psw: carl_dj
sender: carl_dj@xx.com
psw: carl_dj
subject: xxx项目APP自动化测试报告
receiver: xiaoyu1@xx.com,xiaoyu2@xx.com


2.2.2配置全局变量

把所有的地址信息都写在一个python文件中,用到的时候,直接读取


golbalparm.py


# -*- coding:utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-7-10
"""
import os
#获取项目根目录地址
 cur_path = os.path.dirname(os.path.abspath('.'))
# print(cur_path)
#测试用例地址
test_case_path = os.path.join(cur_path,'test_case')
# print(test_case_path)
#线上数据文件地址
formal_data_path = os.path.join(cur_path,'data\\formal_data\\')
# print(formal_data_path)
#测试数据文件地址
test_data_path = os.path.join(cur_path,'data\\test_data\\')
# print(test_data_path)
#截图地址
# test_screenshot_path = os.path.join(cur_path,'report\\img\\')
# print(test_screenshot_path)
#测试报告地址
test_report_path = os.path.join(cur_path,'report\\testreport')
# print(test_report_path)
#日志地址
test_log_path = os.path.join(cur_path,'report\\logs')
# print(test_log_path)
#保存截图地址
test_img_path = os.path.join(cur_path,'report\\img')
print(test_img_path)
#浏览器驱动地址
dirver_path = os.path.join(cur_path,'driver')
# print(dirver_path)
#config文件地址
config_path = os.path.join(cur_path,'config')
# print(config_path)

如果有os模块不太明白的,可以直接百度。


2.2通过邮件发送测试报告


这个.py文件包含4个步骤:

>>第一步:加载用例

>>第二步:执行用例

>>第三步:获取最新的测试报告

>>第四步:发送邮件


接下来,我们就直接看代码:


TestRunnerToEmail.py


# -*- coding:utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-7-10
"""
import os
import unittest
import time
import HTMLTestRunner
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib
from config import globalparam
from public.common.log import Logger
from public.common.get_email_parameter import GetEmailParameter
"""
执行用例并发送报告,分四个步骤:
第一步:加载用例
第二步:执行用例
第三步:获取最新的测试报告
第四步:发送邮件
"""
# 获取当前脚本的真实路径
# cur_path =os.path.dirname(os.path.abspath('.'))
log = Logger(logger='run').getlog()
def add_case( rule='test*.py'):
    '''
    作用:加载所有测试用例
    :param caseName:
    :param rule:
    :return:
    '''
    test_suite = globalparam.test_case_path
    discov = unittest.defaultTestLoader.discover(test_suite,pattern=rule)
    return discov
    # case_path = os.path.join(globalparam.test_case_path,caseName)
    # if not os.path.exists(case_path):os.mkdir(case_path)
    # 定义discover方法的参数(执行全部用例)
    # discover = unittest.defaultTestLoader.discover(case_path, pattern=rule, top_level_dir=None)
    # return discover
def run_case(all_case, reportName=''):
    '''
    作用:执行所有的用例,并把执行结果写入HTML测试报告中
    :param all_case:
    :param reportName:
    :return:
    '''
    now = time.strftime('%Y-%m-%d_%H_%M_%S', time.localtime(time.time()))
    report_path = os.path.join(globalparam.test_report_path,reportName)
    if not os.path.exists(report_path):os.mkdir(report_path)
    report_abspath = os.path.join(report_path, now + 'xx项目web自动化测试报告.html')
    with open(report_abspath, 'wb') as fp:
        runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title='xx项目web自动化测试报告', description='用例执行情况')
        runner.run(all_case)
def get_report_file(report_path):
    '''
    作用: 获取最新的测试报告
    :param report_path:
    :return:
    '''
    lists = os.listdir(report_path)
    lists.sort(key=lambda fn:os.path.getmtime(os.path.join(report_path, fn)))
    print('最新测试报告:' + lists[-1])
    # 找到最新的测试报告文件
    report_file = os.path.join(report_path, lists[-1])
    return report_file
def send_mail(subject, sender, psw, receiver, smtpserver, report_file, port):
    """
    作用:将最新的测试报告通过邮件进行发送
    :param sender:发件人
    :param psw:QQ邮箱授权码
    :param receiver:收件人
    :param smtpserver:QQ邮箱服务
    :param report_file:
    :param port:端口
    :return:
    """
    with open(report_file, 'rb') as f:
        mail_body = f.read()
    # 定义邮件内容
    msg = MIMEMultipart()
    body = MIMEText(mail_body, _subtype='html', _charset='utf-8')
    msg['Subject'] = subject
    msg['from'] = sender
    msg['to'] = ','.join(receiver)
    msg.attach(body)
    # 添加附件
    att = MIMEText(open(report_file, 'rb').read(), 'base64', 'utf-8')
    att["Content-Type"] = "application/octet-stream"
    att["Content-Disposition"] = 'attachment; filename= "WebUIAutoFramework_report.html"'
    msg.attach(att)
    try:
        smtp = smtplib.SMTP_SSL(smtpserver, port)
    except:
        smtp = smtplib.SMTP()
        smtp.connect(smtpserver, port)
    # 用户名和密码
    smtp.login(sender, psw)
    smtp.sendmail(sender, receiver, msg.as_string())
    smtp.quit()
    log.info('测试报告邮件发送成功')
if __name__ == '__main__':
    # 加载用例
    all_case = add_case()
    # 执行用例
    run_case(all_case)
    # 获取最新的测试报告
    report_path =globalparam.test_report_path
    # report_path = os.path.join(config.cur_path,'report\\testreport')
    report_file = get_report_file(report_path)
    # 邮箱配置
    subject = GetEmailParameter().email_parameter()['subject']
    sender = GetEmailParameter().email_parameter()['sender']
    psw = GetEmailParameter().email_parameter()['psw']
    smtp_server = GetEmailParameter().email_parameter()['smtp_server']
    port = GetEmailParameter().email_parameter()['port']
    receiver = GetEmailParameter().email_parameter()['receiver'].split(',')

嗯,本来,邮件发送的这个代码不想在这里展示,因为selenium框架从0到1 的教程中已经写了,


奈何小鱼又考虑到为各位大佬节省时间和精力,同时也能做出对比,就在写一次!


哦对了,接下来,我就把github上的源码地址,share出来:github传送门


接下来,就要多多练习哦,争取早日成为大神!!


目录
相关文章
|
3天前
|
设计模式 前端开发 JavaScript
自动化测试框架设计原则与最佳实践####
本文深入探讨了构建高效、可维护的自动化测试框架的核心原则与策略,旨在为软件测试工程师提供一套系统性的方法指南。通过分析常见误区,结合行业案例,阐述了如何根据项目特性定制自动化策略,优化测试流程,提升测试覆盖率与执行效率。 ####
20 6
|
3天前
|
人工智能 前端开发 测试技术
探索软件测试中的自动化框架选择与优化策略####
本文深入剖析了当前主流的自动化测试框架,通过对比分析各自的优势、局限性及适用场景,为读者提供了一套系统性的选择与优化指南。文章首先概述了自动化测试的重要性及其在软件开发生命周期中的位置,接着逐一探讨了Selenium、Appium、Cypress等热门框架的特点,并通过实际案例展示了如何根据项目需求灵活选用与配置框架,以提升测试效率和质量。最后,文章还分享了若干最佳实践和未来趋势预测,旨在帮助测试工程师更好地应对复杂多变的测试环境。 ####
17 4
|
9天前
|
机器学习/深度学习 前端开发 测试技术
探索软件测试中的自动化测试框架选择与优化策略####
本文深入探讨了在当前软件开发生命周期中,自动化测试框架的选择对于提升测试效率、保障产品质量的重要性。通过分析市场上主流的自动化测试工具,如Selenium、Appium、Jest等,结合具体项目需求,提出了一套系统化的选型与优化策略。文章首先概述了自动化测试的基本原理及其在现代软件开发中的角色变迁,随后详细对比了各主流框架的功能特点、适用场景及优缺点,最后基于实际案例,阐述了如何根据项目特性量身定制自动化测试解决方案,并给出了持续集成/持续部署(CI/CD)环境下的最佳实践建议。 --- ####
|
10天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
44 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
9天前
|
测试技术 API Android开发
探索软件测试中的自动化框架选择与实践####
本文深入探讨了软件测试领域内,面对众多自动化测试框架时,如何依据项目特性和团队需求做出明智选择,并分享了实践中的有效策略与技巧。不同于传统摘要的概述方式,本文将直接以一段实践指南的形式,简述在选择自动化测试框架时应考虑的核心要素及推荐路径,旨在为读者提供即时可用的参考。 ####
|
13天前
|
测试技术 Android开发 UED
探索软件测试中的自动化框架选择
【10月更文挑战第29天】 在软件开发的复杂过程中,测试环节扮演着至关重要的角色。本文将深入探讨自动化测试框架的选择,分析不同框架的特点和适用场景,旨在为软件开发团队提供决策支持。通过对比主流自动化测试工具的优势与局限,我们将揭示如何根据项目需求和团队技能来选择最合适的自动化测试解决方案。此外,文章还将讨论自动化测试实施过程中的关键考虑因素,包括成本效益分析、维护难度和扩展性等,确保读者能够全面理解自动化测试框架选择的重要性。
31 1
|
19天前
|
监控 安全 jenkins
探索软件测试的奥秘:自动化测试框架的搭建与实践
【10月更文挑战第24天】在软件开发的海洋里,测试是确保航行安全的灯塔。本文将带领读者揭开软件测试的神秘面纱,深入探讨如何从零开始搭建一个自动化测试框架,并配以代码示例。我们将一起航行在自动化测试的浪潮之上,体验从理论到实践的转变,最终达到提高测试效率和质量的彼岸。
|
11天前
|
机器学习/深度学习 自然语言处理 物联网
探索自动化测试框架的演变与未来趋势
随着软件开发行业的蓬勃发展,软件测试作为保障软件质量的重要环节,其方法和工具也在不断进化。本文将深入探讨自动化测试框架从诞生至今的发展历程,分析当前主流框架的特点和应用场景,并预测未来的发展趋势,为软件开发团队选择合适的自动化测试解决方案提供参考。
|
14天前
|
测试技术 持续交付
探索软件测试中的自动化框架:优势与挑战
【10月更文挑战第28天】 随着软件开发的快速进步,自动化测试已成为确保软件质量的关键步骤。本文将探讨自动化测试框架的优势和面临的挑战,以及如何有效地克服这些挑战。
29 0
|
1月前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
64 4

热门文章

最新文章