python 接口测试初试(实现接口自动化)

 
最近两周都在做接口测试,刚开始是使用 Postman进行接口测试,发现多个接口串联且之间有参数传递的时候用postman进行测试就比较麻烦,所以在网上搜索了一下,发现可以用python进行接口测试。
python接口测试

1.安装python环境

 

2.下载python IDE(pyCharm)

下载:http://www.jetbrains.com/pycharm/,选择Download,进入下载页面。
 

3.下载 安装 requests第三方模块

注:
requests是python的HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢?官方文档中是这样说的:
python的标准库urllib2提供了大部分需要的HTTP功能,但API太逆天了,一个简单的功能需要一大堆代码。而requests比较简洁,能用更少的代码实现。

 

下面就进行接口测试
要使用 requests 首先需要在文件中引用 
import requests
import json
# url:接口地址
# data: 接口需要的数据
# headers:接口需要的传递的headers数据
# files:若是接口中需要上传文件则需要用到该参数
r = requests.post(url, data=data, headers=headers)
r = requests.post(url, data=data, headers=headers, files=files)
# 获取 接口返回的数据信息并解析(如果返回的是json格式的话)
json_data = json.loads(r.text)

4.搭建接口测试框架

 

在百度搜索 接口自动化测试框架 发现 https://blog.csdn.net/qq_41782425/article/details/91841130 的文章写得非常详细,便根据文章思路及代码进行了实现,以下记录此次学习所得

思路:把接口基础信息录入excel文件中,接口请求数据录入json文件中,通过读取excel中的数据进行接口测试

 

该项目使用的是 python2.7

使用第三库:PyYAML、colorlog、configparser、requests、xlrd、xlwt

 

 

项目构成部分

 

caseData

caseData:存放接口基础数据(分别为excel、json、yaml(项目中未用到))

 

excelData中存放的是接口基础数据,存在多个excel文件时需要在config.ini中进行配置;excel中每一行一个接口数据,url栏的数据为对应json文件名称,请求数据栏中的数据为对应json文件中的key(为all时读取全部数据)

jsonData中存放的是接口的请求数据,在代码中是通过接口名称读取json文件中的数据 故 json文件名称必须与接口名称一致(如:接口:192.168.1.77:8080/test/qrygoodslist,那么对应的接口的数据接送文件为qrygoodslist.json)

 

 

manage.xls

addOrModGoodsType.json

common

common:存放公共方法,操作数据库、读取配置文件、写token、发送邮件等

askway.py

接口请求方法封装

# !/usr/bin/env python
# -*- coding: utf-8 -*-
import requests


# 封装请求
class AskWay:

    def __init__(self, url, data=None, headers=None):
        self.url = url
        self.data = data
        self.headers = headers

    # 查
    def m_get(self, pt):
        if self.data != '' or self.data is not None:
            if pt == 1:
                result = requests.get(url=self.url, params=self.data, headers=self.headers).json()
            else:
                d_url = self.url + "/"
                for i in self.data.values():
                    d_url = d_url + i + "/"
                result = requests.get(url=d_url[:-1], headers=self.headers).json()
        else:
            result = requests.get(url=self.url, headers=self.headers).json()

        return result

    # 新增/修改
    def m_post(self, pt):
        if pt == 1:
            result = requests.post(url=self.url, data=self.data, headers=self.headers).json()
        else:
            result = requests.post(url=self.url, json=self.data, headers=self.headers).json()

        return result

    # 新增/修改
    def m_put(self, pt):
        if pt == 1:
            result = requests.put(url=self.url, data=self.data, headers=self.headers).json()
        else:
            result = requests.put(url=self.url, json=self.data, headers=self.headers).json()

        return result

    # 更新局部资源
    def m_patch(self, pt):
        if pt == 1:
            result = requests.patch(url=self.url, data=self.data, headers=self.headers).json()
        else:
            result = requests.patch(url=self.url, json=self.data, headers=self.headers).json()

        return result

    # 删
    def m_delete(self, pt):
        if self.data != '' or self.data is not None:
            if pt == 1:
                result = requests.delete(url=self.url, params=self.data, headers=self.headers).json()
            else:
                d_url = self.url+"/"
                for i in self.data.values():
                    d_url = d_url + i+"/"
                result = requests.delete(url=d_url[:-1], headers=self.headers).json()
        else:
            result = requests.delete(url=self.url, headers=self.headers).json()

        return result

    def run_main(self, method, pt=1):
        if method.lower() == 'get':
            res = self.m_get(pt)
        elif method.lower() == 'post':
            res = self.m_post(pt)
        elif method.lower() == 'put':
            res = self.m_put(pt)
        elif method.lower() == 'patch':
            res = self.m_patch(pt)
        elif method.lower() == 'delete':
            res = self.m_delete(pt)
        else:
            return "what ?????"
        return res







logg.py

日志方法封装

# !/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
import colorlog
import os
import time

log_colors_config = {
    'DEBUG': 'lightgrey',  # cyan white
    'INFO': 'white',
    'WARNING': 'yellow',
    'ERROR': 'red',
    'CRITICAL': 'bold_red',
}

o_path = os.getcwd().encode('utf-8')
# o_path = os.path.dirname(os.p
  • 8
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值