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

参考博客: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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值