1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Python接口自动化测试框架搭建

Python接口自动化测试框架搭建

时间:2019-07-30 18:03:53

相关推荐

Python接口自动化测试框架搭建

此框架是基于python的unittest单元测试框架写的。写的有点简单,有些地方可能不是很完整,后期在逐步完善。

先来看下框架的目录布局:

common :公共的方法目录

conf: 配置文件存放目录

data :测试数据目录

library :存放一些下载第三方的模块

logs:日志文件存放的目录

reports :测试报告存放目录

testcases:测试用例类模块目录

run_test.py:主程序,项目的启动文件

前面Python专栏里分开写过每个模块的使用

这里只需要把它们组合起来,然后通过各模块之间的调用,运行主程序来完成:读取excel用例数据、读取配置文件数据、ddt数据驱动自动获取用例、执行测试用例、生成日志文件,测试报告。

整个项目结构如下:

先看下common目录的构成:都是一些封装好的方法

all_paths.py

这里把所有文件的目录路径都写在这里用变量接收,获取的时候直接调用变量就行。import osdir_name1=os.path.dirname(os.path.abspath(__file__))dir_name=os.path.dirname(dir_name1)log_path=os.path.join(os.path.join(dir_name,'logs'),'log.log')#log文件路径casexlsx_path=os.path.join(os.path.join(dir_name,'data'),'case.xlsx')#测试用例excel文件路径report_path=os.path.join(os.path.join(dir_name,'reports'),'report.html')#测试报告文件路径config_path=os.path.join(os.path.join(dir_name,'conf'),'conf.yaml')#配置文件路径case_path=os.path.join(dir_name,'testcases')#测试用例代码路径

excel_handler.py 操作excel的方法,主要用于读取测试用例。

import openpyxlclass ExcelMothed:def __init__(self,filepath,sheet):self.filepath=filepathself.sheet=sheetdef open_excel(self):'''打开excel'''workbook=openpyxl.load_workbook(self.filepath)return workbookdef get_sheet(self):'''获取Sheet表单'''workbook=self.open_excel()sheet=workbook[self.sheet]return sheetdef get_case(self):'''获取所有用例'''cell=self.get_sheet()rows=list(cell.rows)case=[]title=[]for row in rows[0]:title.append(row.value)for values in rows[1:]:dic={}for indx,value in enumerate(values):dic[title[indx]]=value.valuecase.append(dic)return casedef excel_write(self,row,column,data):'''excel根据单元格位置写入内容'''sheet=self.get_sheet()sheet.cell(row,column).value=dataself.excel_save()self.excel_close()def excel_save(self):'''保存excel'''self.open_excel().save(self.filepath)def excel_close(self):'''关闭excel'''self.open_excel().close()

read_yaml.py 读取yaml文件方法

import yamldef read_yaml(file):with open(file,encoding='utf-8') as f:config_info=yaml.load(f,Loader=yaml.SafeLoader)return config_info

logger_handler.py 日志方法

#get_logger()的参数我放到了yaml文件里,所以需要从common里import read_yaml方法、配置文件的路径import loggingfrom mon.read_yaml import read_yamlfrom mon.all_paths import config_pathlog_info=read_yaml(config_path)['log']def get_logger(filepath=None,fmtt=log_info['fmt'],logger_level=log_info['logger_level'],stream_level=log_info['stream_level'],handler_level=log_info['file_level']):logger = logging.getLogger() # 初始化收集器# logger.handlers.clear()#清空收集器列表if not logger.handlers:logger.setLevel(logger_level)#设置日志等级stream_handler=logging.StreamHandler()#初始化处理器stream_handler.setLevel(stream_level)#设置处理器日志等级logger.addHandler(stream_handler) # 处理器添加到收集器fmt = logging.Formatter(fmtt) # 设置日志输出格式stream_handler.setFormatter(fmt)# 添加到处理器if filepath:file_handler=logging.FileHandler(filepath,'a',encoding='utf-8')#初始化文件输出处理器file_handler.setLevel(handler_level)#设置处理器日志等级file_handler.setFormatter(fmt)logger.addHandler(file_handler) # 处理器添加到收集器return logger

配置文件内容如下:这里只是配置的日志方法里面用到的参数。

log:fmt: '%(name)s--%(asctime)s--%(filename)s--%(lineno)d--%(levelname)s:%(message)s'logger_level: 'DEBUG'stream_level: 'DEBUG'file_level: 'INFO'

data目录下的excel文件,存放的测试用例

library,生成测试报告的第三方模块, HTMLTestRunnerNew.py

提取码:v88e

logs、reports目录

testcases,测试用例代码

这里还以之前简单的login登录功能为例去写的测试用例

#登录功能def login(username,password):if username!=None and password!=None:if username=='admin' and password=='123456':#账号密码正确登录成功return {'msg':'登录成功'}else:#账号密码错误return {'msg':'账号或密码不正确'}return {'msg':'账号或密码为空'}#账号或密码为空

测试用例代码如下:

from Testdemo.login import login#导入login函数from mon.excel_handler import ExcelMothed#导入excel方法from mon.all_paths import casexlsx_path,log_path#导入excel路径,日志路径from mon.logger_handler import get_logger#导入日志方法import unittestimport ddt#导入ddt,数据驱动模式data=ExcelMothed(casexlsx_path,'Sheet1')#初始化case=data.get_case()#获取用例data.excel_close()#关闭excel@ddt.ddtclass TestLogin(unittest.TestCase):#定义测试类继承unittest.TestCase类@ddt.data(*case)def test_login_success(self,cases):info=eval(cases['data'])username=info['username']password=info['password']expected_result=eval(cases['expected'])#预期结果actual_result=login(username,password)#调用被测函数try:self.assertTrue(expected_result == actual_result) # 判断预期结果与实际结果是否一致except Exception as e:get_logger(log_path).info('用例未通过:{}'.format(e))#日志记录raise e#手动抛出异常else:get_logger(log_path).debug('用例通过')#日志记录

run_test.py运行主程序代码如下:

import unittestfrom api_test_v1.library.HTMLTestRunnerNew import HTMLTestRunner#导入第三方模块from mon.all_paths import report_path,case_path#导入报告路径,测试用例的路径loader=unittest.TestLoader()#初始化用例的加载器test_suite=loader.discover(case_path)#自动加载测试用例with open(report_path,'wb') as f:runner=HTMLTestRunner(f,title='自动化测试报告',description='登录与注册模块',tester='tester')runner.run(test_suite)#运行

最后运行主程序来看下日志及测试报告:

login---06-03 14:10:00,138--test_login.py--23--INFO:用例未通过:False is not truelogin---06-03 14:10:00,139--test_login.py--26--INFO:用例通过login---06-03 14:10:00,140--test_login.py--26--INFO:用例通过

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。