一、项目结构

1.新建一个工程(一定要创建工程),工程名称自己定义,如:yoyo_jiekou

2.在工程的跟目录新建一个脚本:run_main.py,用来执行全部用例

3.在工程下创建以下几个pakage包:

--case:这个包放test开头的测试用例,也可以放一些封装接口的方法,如:loginblog(如果封装的接口比较多,也可以单独放一个包)

--common:这个包放一些公共的方法,如:读取excel文件方法,读取mysql、oracle,logger.py这个是封装日志的输入

--config:cfg.ini这里是配置文件,如邮箱的一些参数:收件人,发件人,密码等,readConfig.py用于读取配置文件

--logs:这里存放日志信息

--report:这里存放测试报告

二、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.这里邮箱的内容读的配置文件

三、config配置

1.cfg.ini打开,这里写配置文件内容

2.用readConfig.py读取配置文件

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("----测试结束----")

四、case放用例

1.常用的接口,需要检查被调用的单独封装处理,如登录等

2.test开头的用例

五、logs日志查看

1.运行完后日志都会收集到logs文件夹以日期命名

六、生成测试报告

1.这里调用的是HTMLTestRunner生成html的测试报告

七、发送报告到邮箱

1.运行run_main.py就会自动生成报告,然后发送到邮箱了

(这里QQ邮箱的展示是有问题的,一般用企业邮箱的话,是可以正常展示的)

python requests自动化框架的更多相关文章

  1. python接口自动化框架

    接口测框架 安装教程 需要3.5及以上版本的python pip install -r requirements.txt 使用说明 运行manage.py创建项目 创建的项目在projects目录下 ...

  2. python接口自动化框架搭建

    一.在搭建接口自动化测试框架前,我觉得先需要想明白以下几点: ① 目前情况下,绝大部分接口协议是http,所以需要对http协议有个基本的了解,如:http协议请求.响应由哪些部分组成,常用的meth ...

  3. 【python接口自动化框架-unittest】【一】unittest单元测试框架概念

    一.unittst单元测试框架 概念参考:https://docs.python.org/2/library/unittest.html 使用方法:import unittest (引入unittes ...

  4. python+selenium自动化框架搭建

    环境及使用软件信息 python 3 selenium 3.13.0 xlrd 1.1.0 chromedriver HTMLTestRunner 说明: selenium/xlrd只需要再pytho ...

  5. python接口测试自动化框架-发送邮件,邮箱报错: 535 Error, authentication failed

    1.无意中把腾讯企业邮箱设置为安全登录,接口测试自动化发送邮件,不能被正常接收.错误信息为:535 Error, authentication failed. 原因:认证安全登录后,原来新的邮箱代码传 ...

  6. python+selenium自动化框架

    ---恢复内容开始--- 主要使用的模块: selenium/webdriver模块(须准备Chrome驱动),主要用于调用浏览器实现自动点击. unittest模块,主要用于整合测试用例. xlrd ...

  7. 【python接口自动化框架-unittest】如何传参数到下一个case

    1.前提 平时我们用unittest的时候,都知道每个test_ 都是相互独立的,但是很多现实情况是,我们下一个接口参数,可能会用到上一个接口返回的json字段,那么,我们怎么去实现呢 2.实例 1. ...

  8. 基于Python+requests搭建的自动化框架-实现流程化的接口串联

    框架产生目的:公司走的是敏捷开发模式,编写这种框架是为了能够满足当前这种发展模式,用于前后端联调之前(后端开发完接口,前端还没有将业务处理完毕的时候)以及日后回归阶段,方便为自己腾出学(mo)习(yu ...

  9. Python+Requests接口测试教程(1):Fiddler抓包工具

    本书涵盖内容:fiddler.http协议.json.requests+unittest+报告.bs4.数据相关(mysql/oracle/logging)等内容.刚买须知:本书是针对零基础入门接口测 ...

随机推荐

  1. ThreadPoolTaskExecutor介绍

    ThreadPoolTaskExecutor是一个spring的线程池技术,其实,它的实现方式完全是使用ThreadPoolExecutor进行实现.对于ThreadPoolExecutor,有一些重 ...

  2. MySql(一)_利用NHibernate和MySql交互

    1.基础配置,添加MySql和nHibernate的引用 (1)   添加引用,导入MySql.data.dll:   利用MySql提供的API操作: (2) 添加引用,导入NHibernate.d ...

  3. Unity3D_03_代码及效率优化总结

    1.在使用数组或ArrayList对象时应当注意: length = myArray.Length; ;i<length;i++) { } 避免 ;i<myArray.Length;i++ ...

  4. Android开发--Intent的使用(1)启动活动

    Android系统是目前世界上市场占有率最高的移动操作系统,近年来,Android开发也越来越炙手可热. 在Android开发中,我们使用Intent进行活动Activity之间穿梭. 当我们点击启动 ...

  5. Spring Boot核心(基本配置)

    上一篇Spring Boot我们简单讲了如何快速创建一个SpringBoot项目. 大家都知道SpringBoot非常强大,可以轻松与各种工具集成,但是我们知其然,也必须知其所以然. 今天开始就和大家 ...

  6. LCX使用心得

    最近在搞内网渗透,碰到 端口转发&边界处理 的时候,我们就可以借助一些小工具了,这类工具有很多,这里主要说明lcx的用法. lcx是个很老的端口转发工具,而它的使用也很简单.不过想要把lcx玩 ...

  7. 将maven项目到入到idea中

    一,前言 在文章将maven项目导入到eclipse中中我将新建的项目到入到了eclipse中了,因为最近也在尝试idea,那么就顺便也到入idea中. maven项目的话,我就使用在文章使用命令行创 ...

  8. 在vue项目中使用less

    1.安装 less 和 less-loader. 命令:         npm install less less-loader --save-dev   2.打开 build/webpack.ba ...

  9. Django序列化&django REST framework

    第一章.Django序列化操作 1.django的view实现商品列表页(基于View类) # 通过json来序列化,但手写字典key代码量较大,容易出错:还有遇到时间,图片序列化会报错 from g ...

  10. php常用函数(第一版)

    1.array_slice 作用:数组分页函数 案例:$output  =  array_slice ( $input , - 2 ,  1 ); 2.array_column 作用:数组根据值取出一 ...