您的位置:首页 > 其它

接口测试框架(二)-项目概述

2018-03-08 16:39 405 查看
参考博客:http://blog.csdn.net/huilan_same/article/details/76572428
这个博主的系列博客写的非常不错,像我这样的小白一看就会写了,简单易懂。可惜的是已经断更半年了....

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 logging
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()

三、发送HTTP请求

第三步就是自己封装一个可以发送HTTP请求,并返回所需要格式的client类。我稍加修改了一下,更便于我现在测试的项目。import requests

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)

四、编写测试用例

基本测试框架已经搭建好了,接下来就是编写测试用例了。编写测试用例时需要用到,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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: