python做接口自动化-接口自动化基本流程(python)

初学者,自学心得,亲自体验分享

第一步:框架搭建(通俗点就是建立项目目录,分别存储什么样的文件)

1.新建一个工程(就是一个总文件)自定义,如zxq_jiekou

2.在再新建工程总新建一个脚本:run_main.py执行全部用例

3.在工程下创建以下几个文件(专业点就叫pakage包):

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

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

--config:cfcfg.ini这里是配置文件

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

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

第二步:run_main.py(执行全部用例脚本)

封装执行所有用例(所有自动化应该是一样的吧,源代码非本人撰写)

1.cur_path这个参数是读取当前这个脚本的真实路径,也就是run_main.py的真实路径

2.caseName="case"这个case是存放测试用例的文件夹,如果没有的话,自动创建。如果想运行其它文件夹的用例,就改下caseName这个参数值

3.rule="test*.py"这个是匹配用例脚本名称的规则,默认匹配test开头的所有用例

run_main.py源代码如下:

import os

import io

import sys

import unittest

import time

import HTMLTestRunner

cur_path= os.path.dirname(os.path.realpath(__file__))

def add_case(caseName="case",rule="test*.py"):

case_path = os.path.join(cur_path,caseName)

if not os.path.exists(case_path):os.mkdir(case_path)

print("test case path:%s"se_path)

discover =

unittest.defaultTestLoader.discover(case_path,

pattern=rule,

top_level_dir=None)

print(discover)

return discover

def run_case(all_case,reportName="report"):

now = time.strftime("%Y_%m_%d_%H_%M_%S")

report_path = os.path.join(cur_path,reportName)

if not os.path.exists(report_path):os.mkdir(report_path)

report_abspath =

os.path.join(report_path,now+"result.html")

print("report path:%s"%report_abspath)

fp=open(report_abspath,"wb")

runner = HTMLTestRunner.HTMLTestRunner(stream=fp,

title=u'自动化测试报告,测试结果如下:',

description = u'用例执行情况:'

#调用add_case函数返回值

)

runner.run(all_case)

fp.close()

def get_report_file(report_path):

lists = os.listdir(report_path)

lists.sort(key=lambda

fn:os.path.getmtime(os.path.join(report_path,fn)))

print(u"最新测试生成的报告:" + lists[-1])

report_file=os.path.join(report_path,lists[-1])

return report_file

if __name__ == '__main__':

all_case =add_case()

run_case(all_case)

report_path=os.path.join(cur_path,"report")

report_file = get_report_file(report_path)

第三步:封装logger(新建logger.py文件放到common目录下,封装日志文件的读取)

封装日志文件读取(所有自动化应该是一样的吧,源代码非本人撰写)

logger.py源代码如下:

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

第四步:生成HTML报告

1.把上一步加载到用例的参数传入这个函数,测试报告的文件名称默认report文件夹:reportName="report

2.如果没有这个report文件夹也没关系,可以自动创建的

已经在run_main.py文件里面了,这里就不重复写了

第五步:开始写用例了~

登录封装(后面其他操作也需要用的,所以这里封装下)

testlogin.py

sg_trans.gif

test_01.py

sg_trans.gif

暂时写了2个

最后一步:执行run_main,生成测试报告

sg_trans.gif

还可以配置邮件,生成报告后自动发送到邮箱,暂时研究了这些。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值