前言html
有不少小伙伴吵着要完整的项目源码,完整的项目属于公司内部的代码,这个是无法分享的,违反职业道德了,就算别人分享了,也只适用于本公司内部的业务。python
因此用例的代码仍是得本身去一个个写,我只能分享项目框架,只能帮大家到这了。mysql
1、项目结构sql
1.新建一个工程(必定要建立工程),工程名称本身定义,如:yoyo_jiekouoracle
2.在工程的跟目录新建一个脚本:run_main.py,用来执行所有用例框架
3.在工程下建立如下几个pakage包:函数
--case:这个包放test开头的测试用例,也能够放一些封装接口的方法,如:loginblog(若是封装的接口比较多,也能够单独放一个包)测试
--common:这个包放一些公共的方法,如:读取excel文件方法,读取mysql、oracle,logger.py这个是封装日志的输入加密
--config:cfg.ini这里是配置文件,如邮箱的一些参数:收件人,发件人,密码等,readConfig.py用于读取配置文件spa
--logs:这里存放日志信息
--report:这里存放测试报告
2、run_main
第一步:用discover方法加载全部的测试用例
1.cur_path这个参数是读取当前这个脚本的真实路径,也就是run_main.py的真实路径
2.caseName="case"这个case是存放测试用例的文件夹,若是没有的话,自动建立。若是想运行其它文件夹的用例,就改下caseName这个参数值
3.rule="test*.py"这个是匹配用例脚本名称的规则,默认匹配test开头的全部用例
第二步:生成HTML报告
1.把上一步加载到用例的参数传入这个函数,测试报告的文件名称默认report文件夹:reportName="report
2.若是没有这个report文件夹也不要紧,能够自动建立的
第三步:获取最新的测试报告
1.若是第二步生成的测试报告加了时间戳,想找到最新的文件就用第三步
2.若是第二步不加时间戳,只是生成result.html,那这一步其实没卵用,能够忽略
(我的以为报告用一个名称result.html就行,新的自动覆盖旧的)
第四步:发送测试报告到邮箱
1.像QQ邮箱这种ssl加密的就走SMTP_SSL,用受权码登陆
2.其它邮箱就正常帐号密码登陆,走SMTP
最后执行代码
1.这里邮箱的内容读的配置文件
3、config配置
1.cfg.ini打开,这里写配置文件内容
2.用readConfig.py读取配置文件
3.读取的内容就是传入第二步操做里面须要调用邮箱的配置信息
3、logger
1.logger.py这个文件放到common目录下,封装日志文件的读取
2.日志保存到logs文件夹
3.封装代码
# coding:utf-8
import logging, time
import os
# log_path是存放日志的路径
cur_path = os.path.dirname(os.path.realpath(__file__))
log_path = os.path.join(os.path.dirname(cur_path), 'logs')
# 若是不存在这个logs文件夹,就自动建立一个
if not os.path.exists(log_path):os.mkdir(log_path)
class Log():
def __init__(self):
# 文件的命名
self.logname = os.path.join(log_path, '%s.log'%time.strftime('%Y_%m_%d'))
self.logger = logging.getLogger()
self.logger.setLevel(logging.DEBUG)
# 日志输出格式
self.formatter = logging.Formatter('[%(asctime)s] - %(filename)s] - %(levelname)s: %(message)s')
def __console(self, level, message):
# 建立一个FileHandler,用于写到本地
fh = logging.FileHandler(self.logname, 'a') # 追加模式 这个是python2的
# fh = logging.FileHandler(self.logname, 'a', encoding='utf-8') # 这个是python3的
fh.setLevel(logging.DEBUG)
fh.setFormatter(self.formatter)
self.logger.addHandler(fh)
# 建立一个StreamHandler,用于输出到控制台
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(self.formatter)
self.logger.addHandler(ch)
if level == 'info':
self.logger.info(message)
elif level == 'debug':
self.logger.debug(message)
elif level == 'warning':
self.logger.warning(message)
elif level == 'error':
self.logger.error(message)
# 这两行代码是为了不日志输出重复问题
self.logger.removeHandler(ch)
self.logger.removeHandler(fh)
# 关闭打开的文件
fh.close()
def debug(self, message):
self.__console('debug', message)
def info(self, message):
self.__console('info', message)
def warning(self, message):
self.__console('warning', message)
def error(self, message):
self.__console('error', message)
if __name__ == "__main__":
log = Log()
log.info("---测试开始----")
log.info("操做步骤1,2,3")
log.warning("----测试结束----")
4、case放用例
1.经常使用的接口,须要检查被调用的单独封装处理,如登陆等
2.test开头的用例
5、logs日志查看
1.运行完后日志都会收集到logs文件夹以日期命名
6、生成测试报告
1.这里调用的是HTMLTestRunner生成html的测试报告
7、发送报告到邮箱
1.运行run_main.py就会自动生成报告,而后发送到邮箱了
(这里QQ邮箱的展现是有问题的,通常用企业邮箱的话,是能够正常展现的)
(源代码能够经过如下连接购买,7.2章节能够获取下载地址)
---------------------------------python接口自动化完整版-------------------------
全书购买地址 https://yuedu.baidu.com/ebook/585ab168302b3169a45177232f60ddccda38e695
做者:上海-悠悠 QQ交流群:588402570
也能够关注下个人我的公众号: