接口测试框架(二)-项目概述
2018-03-08 16:39
405 查看
参考博客:http://blog.csdn.net/huilan_same/article/details/76572428
这个博主的系列博客写的非常不错,像我这样的小白一看就会写了,简单易懂。可惜的是已经断更半年了....
#coding=utf-8
import yaml
import os
from xlrd import open_workbook
from xlutils.copy import copy
from xlwt import Style
class FileNotFoundError(StandardError):
pass
class YamlReader(object):
def __init__(self, yaml_file):
# 判断路径中是否存在文件
if os.path.exists(yaml_file):
self.yaml_file = yaml_file
else:
raise FileNotFoundError('File not found!%s')
self._data = None
@property
def data(self):
# 读取yaml配置文件属性,并存入到data变量中
if not self._data:
with open(self.yaml_file, 'rb') as f:
self._data = list(yaml.safe_load_all(f))
return self._data
@data.setter
def data(self, value):
# 写入配置文件
with open(self.yaml_file, 'r+') as f:
f.write(value)
import os,time
from utils.config import Config,LOG_PATH
class Logger(object):
def __init__(self):
c = Config().get('log')
logger_name = c.insert_password('logger_name') if c and c.insert_password('logger_name') else 'test'
self.logger = logging.getLogger(logger_name)
# 设置默认等级,文件名
logging.root.setLevel(logging.NOTSET)
self.file_name = c.insert_password('file_name') if c and c.insert_password('file_name') else 'test_case.log'
self.current_time = time.strftime('%Y%m%d_',time.localtime())
# 设置控制台,文件日志等级
self.console_output_level = c.insert_password('console_level') if c and c.insert_password('console_level') else logging.INFO
self.file_output_level = c.insert_password('file_level') if c and c.insert_password('file_level') else logging.DEBUG
# 设置日志格式
self.pattern = c.insert_password('pattern') if c and c.insert_password('pattern') else '%(name)s:%(levelname)8s%(asctime)s:%(message)s'
self.fmt = logging.Formatter(self.pattern)
def get_logger(self):
# 防止反复添加handler
if not self.logger.handlers:
# 添加控制台handler,设置默认输出日志等级,日志格式
console_handler = logging.StreamHandler()
console_handler.setLevel(self.console_output_level)
console_handler.setFormatter(self.fmt)
self.logger.addHandler(console_handler)
# 添加文件handler,设置默认输出日志等级,日志格式
file_handler = logging.FileHandler(filename=(os.path.join(LOG_PATH,self.current_time+self.file_name)),
encoding='utf-8')
file_handler.setLevel(self.file_output_level)
file_handler.setFormatter(self.fmt)
self.logger.addHandler(file_handler)
return self.logger
logger = Logger().get_logger()
class HTTPsClient(object):
def __init__(self, url):
self.url = url
self.session = requests.session()
def send(self, data=None, **kwargs):
response = self.session.request(method='POST', url=self.url, data=data, **kwargs)
return json.loads(response.text)
#coding=utf-8
import unittest
import json
class Test0001(unittest.TestCase):
# unittest模块简单功测试
@classmethod
def setUpClass(self):
# 类运行前仅执行一次
print 'cmd -> setUpClass!'
@classmethod
def tearDownClass(self):
# 类运行后仅执行一次
print 'cmd -> tearDownClass!'
def setUp(self):
# 每个test方法运行前执行一次
print 'cmd -> setUp!'
def tearDown(self):
# 每个test方法运行后执行一次
print 'cmd -> tearDown!'
def test_001(self):
# 所有test打头的方法都会被当做是测试用例运行
print 'test_case -> 001'
def test_002(self):
# 所有test打头的方法都会被当做是测试用例运行
print 'test_case -> 002'
def test_003(self):
# 所有test打头的方法都会被当做是测试用例运行
print 'test_case -> 003'
def test_004(self):
# 所有test打头的方法都会被当做是测试用例运行
print 'test_case -> 004'
if __name__ == '__main__':
unittest.main()
这个博主的系列博客写的非常不错,像我这样的小白一看就会写了,简单易懂。可惜的是已经断更半年了....
pyyaml模块简单使用
# 读取yaml文件 read_yaml = yaml.load(file('config.yaml','r')) data = {'name': 'lily', 'sex': 'girl', 'age': '6'} # 写入yaml文件 write_yaml = yaml.dump(data, default_flow_style=False) with open('config.yaml', 'w') as f: f.write(write_yaml)
一、读取,写入配置文件
第一步是把测试用例中所需要用到的参数抽离出来,存放在配置文件中。读取与写入配置文件的模块,这里选择的是灰蓝博客使用的pyyaml,可用于读取写入yaml格式的文件。这里还推荐python内置的configparser模块,也比较简单。创建yaml文件读取写入类
感觉这样写好像照抄别人的博客呀,写完这个接下来的类我就一笔带过了。#!/usr/bin/env python#coding=utf-8
import yaml
import os
from xlrd import open_workbook
from xlutils.copy import copy
from xlwt import Style
class FileNotFoundError(StandardError):
pass
class YamlReader(object):
def __init__(self, yaml_file):
# 判断路径中是否存在文件
if os.path.exists(yaml_file):
self.yaml_file = yaml_file
else:
raise FileNotFoundError('File not found!%s')
self._data = None
@property
def data(self):
# 读取yaml配置文件属性,并存入到data变量中
if not self._data:
with open(self.yaml_file, 'rb') as f:
self._data = list(yaml.safe_load_all(f))
return self._data
@data.setter
def data(self, value):
# 写入配置文件
with open(self.yaml_file, 'r+') as f:
f.write(value)
创建配置文件读取类
#!/usr/bin/env python #coding=utf-8 import os from utils.file_reader import YamlReader # 配置项目文件路径,增加可移植性 BASE_PATH = os.path.split(os.path.dirname(os.path.abspath(__file__)))[0] CONFIG_FILE = os.path.join(BASE_PATH,'config','config.yaml') LOG_PATH = os.path.join(BASE_PATH,'log') DATA_PATH = os.path.join(BASE_PATH,'data') class Config: # 读取yaml配置文件 def __init__(self, config=CONFIG_FILE): self.config = YamlReader(config).data # 根据传入的element,返回值 # 例如:get('mobile') return:'13777778889' def get(self, element, index=0): return self.config[index].get(element) if __name__ == '__main__': print Config().get('app_config')['platformVersion'] print Config(config=os.path.join(BASE_PATH, 'config', 'test.yaml'))
二、打印、存储日志
第二步是输出控制台日志,以及将日志以txt、log等文件的形式存储在固定的文件夹。加了两个句柄,一个是控制台句柄,另一个是文件句柄,分别给他们设置日志等级与日志格式。import loggingimport os,time
from utils.config import Config,LOG_PATH
class Logger(object):
def __init__(self):
c = Config().get('log')
logger_name = c.insert_password('logger_name') if c and c.insert_password('logger_name') else 'test'
self.logger = logging.getLogger(logger_name)
# 设置默认等级,文件名
logging.root.setLevel(logging.NOTSET)
self.file_name = c.insert_password('file_name') if c and c.insert_password('file_name') else 'test_case.log'
self.current_time = time.strftime('%Y%m%d_',time.localtime())
# 设置控制台,文件日志等级
self.console_output_level = c.insert_password('console_level') if c and c.insert_password('console_level') else logging.INFO
self.file_output_level = c.insert_password('file_level') if c and c.insert_password('file_level') else logging.DEBUG
# 设置日志格式
self.pattern = c.insert_password('pattern') if c and c.insert_password('pattern') else '%(name)s:%(levelname)8s%(asctime)s:%(message)s'
self.fmt = logging.Formatter(self.pattern)
def get_logger(self):
# 防止反复添加handler
if not self.logger.handlers:
# 添加控制台handler,设置默认输出日志等级,日志格式
console_handler = logging.StreamHandler()
console_handler.setLevel(self.console_output_level)
console_handler.setFormatter(self.fmt)
self.logger.addHandler(console_handler)
# 添加文件handler,设置默认输出日志等级,日志格式
file_handler = logging.FileHandler(filename=(os.path.join(LOG_PATH,self.current_time+self.file_name)),
encoding='utf-8')
file_handler.setLevel(self.file_output_level)
file_handler.setFormatter(self.fmt)
self.logger.addHandler(file_handler)
return self.logger
logger = Logger().get_logger()
三、发送HTTP请求
第三步就是自己封装一个可以发送HTTP请求,并返回所需要格式的client类。我稍加修改了一下,更便于我现在测试的项目。import requestsclass HTTPsClient(object):
def __init__(self, url):
self.url = url
self.session = requests.session()
def send(self, data=None, **kwargs):
response = self.session.request(method='POST', url=self.url, data=data, **kwargs)
return json.loads(response.text)
四、编写测试用例
基本测试框架已经搭建好了,接下来就是编写测试用例了。编写测试用例时需要用到,unittest模块。我简单介绍一下这个模块,就不写测试用例了。#!/usr/bin/env python#coding=utf-8
import unittest
import json
class Test0001(unittest.TestCase):
# unittest模块简单功测试
@classmethod
def setUpClass(self):
# 类运行前仅执行一次
print 'cmd -> setUpClass!'
@classmethod
def tearDownClass(self):
# 类运行后仅执行一次
print 'cmd -> tearDownClass!'
def setUp(self):
# 每个test方法运行前执行一次
print 'cmd -> setUp!'
def tearDown(self):
# 每个test方法运行后执行一次
print 'cmd -> tearDown!'
def test_001(self):
# 所有test打头的方法都会被当做是测试用例运行
print 'test_case -> 001'
def test_002(self):
# 所有test打头的方法都会被当做是测试用例运行
print 'test_case -> 002'
def test_003(self):
# 所有test打头的方法都会被当做是测试用例运行
print 'test_case -> 003'
def test_004(self):
# 所有test打头的方法都会被当做是测试用例运行
print 'test_case -> 004'
if __name__ == '__main__':
unittest.main()
相关文章推荐
- 接口测试框架(一)-项目总览
- Android平台下驱动的开发及测试框架概述(四)
- Android平台下驱动的开发及测试框架概述(五)
- 项目管理大法归档 - 思维导图、原型工具、接口测试、设计模式、版本管理、单元测试、持续集成、代码审查、Bug 跟踪
- testng+maven+java+idea 接口测试入门一:项目创建
- 基于python的接口测试框架设计(二)配置一些参数及文件
- 基于Python的接口测试框架实例
- 初探接口测试框架--python系列2
- ThinkPhp3.2.3 多项目 后台 APP接口设计 框架设计
- Java基础知识强化之集合框架笔记16:List集合的特有功能概述和测试
- [工具]小测试和学习项目清单化框架
- Jmeter接口测试项目实战
- 接口测试自动化生成框架
- Android平台下驱动的开发及测试框架概述(一)
- wqrf 接口测试框架
- Android平台下驱动的开发及测试框架概述(二)
- 【WEB API项目实战干货系列】- 接口文档与在线测试(二)
- python实现http接口测试框架
- Android平台下驱动的开发及测试框架概述(四)