本文总结分享下接口测试框架开发的内容。环境:python3+unittest+ddt+requests测试框架及ddt数据驱动。
目录结构介绍如下:
- common: 公共的方法目录
- config 配置文件存放目录
- data 测试数据目录
- library 下载的第三方的模块
- testcase 测试用例类模块目录
- result
- log 日志文件存放的目录
- report 测试报告存放目录
getpath.py
获取路径
#!/usr/bin/env python
# _*_ coding: utf-8 _*_
# @Time : 2020/12/24 0024 21:38
# @Author : 夕木酱
# @File : getpath.py
import os
# 返回当前文件绝对路径-带文件名称
file_path = os.path.abspath(__file__)
# 返回目录
common_path = os.path.dirname(file_path)
project_path = os.path.dirname(common_path)
config_path = os.path.join(project_path, 'config')
data_path = os.path.join(project_path, 'data')
result_path = os.path.join(project_path, 'result')
log_path = os.path.join(result_path, 'log')
report_path = os.path.join(result_path, 'report')
print(common_path)
print(project_path)
print(config_path)
print(data_path)
print(result_path)
print(log_path)
print(report_path)
输出如下
C:\Python\python.exe G:/软件测试/接口测试/Robotest/common/getpath.py
G:\软件测试\接口测试\Robotest\common
G:\软件测试\接口测试\Robotest
G:\软件测试\接口测试\Robotest\config
G:\软件测试\接口测试\Robotest\data
G:\软件测试\接口测试\Robotest\result
G:\软件测试\接口测试\Robotest\result\log
G:\软件测试\接口测试\Robotest\result\report
Process finished with exit code 0
读取配置文件的数据
[base]
url = https://so.csdn.net
readconfig.py
# -*- coding:utf-8 -*-
import os
from configparser import ConfigParser
from common.getpath import config_path
class Config:
def __init__(self):
self.conf_path = os.path.join(config_path, 'base.ini')
self.readconfig = ConfigParser()
self.readconfig.read(self.conf_path, encoding='utf-8')
def get_option_value(self, section, option):
'''
获取配置文件中某个节点选项的值
:param section: 节点,如[base]
:param option: 选项,如url
:return: result选项的值
'''
result = self.readconfig.get(section, option)
return result
def save_value(self, section, option, value):
'''
:param section: 节点,如[base]
:param option: 选项,如url
:param value: 存入配置中的值
:return: 无
'''
self.readconfig.set(section=section, option=option, value=value)
with open(self.conf_path, "w") as f:
self.readconfig.write(f)
使用
# -*- coding:utf-8 -*-
import unittest
import requests
import os
from ddt import ddt, file_data, unpack
from common.getpath import data_path
from common.readconfig import Config
import json
post_data = os.path.join(data_path, 'post_data.yaml')
csdn_path = os.path.join(data_path, 'csdn.yaml')
@ddt
class parameter_association(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.config = Config()
cls.host = cls.config.get_option_value('base', 'host')
print(cls.host)
@file_data(csdn_path)
@unpack # 二次分解元组
def test_testcase1(self, **kwargs):
url = self.host+kwargs['path']
data = kwargs['data']
# 发送post请求
response = requests.get(url=url, params=data)
print(response.text)
if __name__ == '__main__':
unittest.main()
输出