热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

接口自动化测试框架搭建(10、运行特定测试case,生成报告发送邮件)python+HTMLTestRunnerCN+request+unittest+mock+db

目录一、创建txt文件二、创建runAll.py文件基于之前文章:1、环境的搭建:https:blog.csdn.netMojitoicearti

目录

一、创建txt文件

二、创建runAll.py文件



基于之前文章:

1、环境的搭建:https://blog.csdn.net/Mojitoice/article/details/108992622?spm=1001.2014.3001.5501

2、配置文件的创建,封装配置文件的读取方法:https://blog.csdn.net/Mojitoice/article/details/109031074

3、excel读取方法的封装:https://blog.csdn.net/Mojitoice/article/details/109203605?spm=1001.2014.3001.5501

4、url拼接方法的封装:https://blog.csdn.net/Mojitoice/article/details/114400695

5、封装get,post请求方法:https://blog.csdn.net/Mojitoice/article/details/114402767

6、进行mock的方法封装:https://blog.csdn.net/Mojitoice/article/details/114403473

7、操作数据库和日志方法封装:https://blog.csdn.net/Mojitoice/article/details/114404093

8、发送邮件方法的封装+HTMLTestRunnerCN:https://blog.csdn.net/Mojitoice/article/details/114533283

9、自动化测试case的编写:https://blog.csdn.net/Mojitoice/article/details/114535006

 

背景:

将上节中的编写的测试case,进行执行,生成测试报告并发送邮件。当自动化测试case过多的时候,有些case不用本次执行,对于这种情况应该咋搞呢?

所以需要创建一个文件,用来控制哪些case需要执行,哪些case不需要执行。

 

now,献上代码:


一、创建txt文件

/Users/dongyue/Documents/framework/testFile/caselist.txt

#case/testToken
#case/test_pic_goods
#case/testpicGoods
#case/testGetItemByProductId
case/testCategoriesList

根据每个的开头是否存在“#”进行判断,如果存在#的话,就不执行该case,如果不存在,则执行,此时就需要一个判断是否执行,并执行所有自动化case的文件

 


二、创建runAll.py文件

/Users/dongyue/Documents/framework/runAll.py

from getPath import GetPath
import os
from common.log import logger
import unittest
from common import HTMLTestRunnerCN
from testFile.readConfig import ReadConfig
from common.configEmail import SendEmailpath = GetPath().getPath() #/Users/dongyue/Documents/framework
#定义报告文件夹路径
report_path = os.path.join(path,"result/report")
readconfig = ReadConfig()class AllTest():def __init__(self): #定义初始化数据global result_path#定义文件路径,以及文件名result_path = os.path.join(report_path,"report.html") #/Users/dongyue/Documents/framework/result/report/report.htmllogger.info("result_path:%s"%result_path)#定义要执行的case文件的路径self.case_list_path = os.path.join(path,"testFile/caselist.txt") #/Users/dongyue/Documents/framework/testFile/caselist.txtlogger.info("case_list_path:%s"%self.case_list_path)#定义需要测试case的py文件路径self.case_file = os.path.join(path,"case") #/Users/dongyue/Documents/framework/caselogger.info("case_file:%s"%self.case_file)#定义要执行的case的py文件集合self.caselist = []def set_caselist(self):#读取caselist.txt文件,写入caselist列表file = open(self.case_list_path)str = file.readlines()for i in str:if i != "" and not i.startswith("#"):self.caselist.append(i.split('/')[1].replace("\n","")+".py") #按照/进行切割字符串取后面带py文件的,然后将\n替换为空,最后添加到caselist中logger.info("newcaselist:%s"%self.caselist)return self.caselistfile.close()def set_case_suit(self):# self.set_caselist() #获取上述caselist列表test_suite = unittest.TestSuite()suite_module = []for case in self.set_caselist():discover = unittest.defaultTestLoader.discover( self.case_file, pattern=case, top_level_dir=None) ##批量加载用例suite_module.append(discover)if len(suite_module)>0:for suite in suite_module:for test_name in suite:test_suite.addTest(test_name)else:logger.debug("测试套件集合为空")return Nonereturn test_suitedef send_email(self):subject = readconfig.get_email("subject")mail_host = readconfig.get_email("mail_host")mail_user = readconfig.get_email("mail_user")mail_pass = readconfig.get_email("mail_pass")sender = readconfig.get_email("sender")receivers_str = readconfig.get_email("receivers")for i in range(len(eval(receivers_str))):# print(eval(receivers_str)[i])data = open('/Users/dongyue/Documents/framework/result/report/report.html', 'rb').read()c = SendEmail(subject,mail_host,mail_user,mail_pass,sender,eval(receivers_str)[i],data)c.sendemail()def run(self):#执行测试集,并且生成报告try:suite = self.set_case_suit()if suite:fp = open(result_path, 'wb')runner = HTMLTestRunnerCN.HTMLTestRunner(stream=fp, title='自动化测试报告', description='接口自动化测试python + unittest')runner.run(suite)if readconfig.get_email("on_off") == "on":self.send_email()else:logger.debug("邮件开关没有打开")else:logger.debug("测试套件集合为空")except Exception as ex:logger.debug(ex)finally:logger.info("*********TEST END*********")fp.close()if __name__ == '__main__':AllTest().run()

执行该文件。结果如下

报告如下:

邮件如下:

log文件显示:

至此。。。终。。。后续如果需要优化,我就再更新

 


推荐阅读
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • JavaWeb中读取文件资源的路径问题及解决方法
    在JavaWeb开发中,读取文件资源的路径是一个常见的问题。本文介绍了使用绝对路径和相对路径两种方法来解决这个问题,并给出了相应的代码示例。同时,还讨论了使用绝对路径的优缺点,以及如何正确使用相对路径来读取文件。通过本文的学习,读者可以掌握在JavaWeb中正确找到和读取文件资源的方法。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • python限制递归次数(python最大公约数递归)
    本文目录一览:1、python为什么要进行递归限制 ... [详细]
  • 解决php错误信息不显示在浏览器上的方法
    本文介绍了解决php错误信息不显示在浏览器上的方法。作者发现php中的各种错误信息并不显示在浏览器上,而是需要在日志文件中查看。为了解决这个问题,作者提供了一种解决方式:通过修改php.ini文件中的display_errors参数为On,并重启服务。这样就可以在浏览器上直接显示php错误信息了。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有