API接口测试--python实现接口自动化

  本节介绍,使用python实现接口自动化实现。

  思路:讲接口数据存放在excel文档中,读取excel数据,将每一行数据存放在一个个列表当中。然后获取URL,header,请求体等数据,进行请求发送。

  结构如下

  

 

 

  excel文档内容如下:

  

 

   一、Common与Config包

  Config里面的config.ini主要存放的默认的路径内容等,如excel文件的地址,工作簿名称

  

 

   Common里面主要是一些通用的方法,目前只需要读取config里面的数据

import configparser
import os.path


#读取config里面的数据
class ReadConfig:

    def __init__(self):
        self.filePath = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))+"\\config\\config.ini"
        print(self.filePath)
        self.config = configparser.ConfigParser()
        self.config.read(self.filePath,encoding='utf-8')

    def get_data(self,section,key):
        return self.config.get(section,key)

    def get_list(self,section):
        return self.config.items(section)



if __name__ == '__main__':
    conf = ReadConfig()
    print(conf.get_data("excel", "file_path"))

  二、excel包

  主要是实现读取excel表格数据,此处用的是openpyxl进行实现

import openpyxl

class ReadExcel:

    def __init__(self,excel_path,sheet_name):
        self.excel_path = excel_path
        self.sheet_name = sheet_name

    def get_data(self,row):
        workbook = openpyxl.load_workbook(self.excel_path)
        sh = workbook[self.sheet_name]
        data = []
        for c in list(sh.rows)[row]:
            data.append(c.value)
        return data


if __name__ == '__main__':
    ex = ReadExcel('request.xlsx','Sheet1')
    print(ex.get_data(0))
    print(ex.get_data(1))
    print(ex.get_data(2))
    print(ex.get_data(3))
    print(ex.get_data(4))

  三、requests包

  主要用于发送请求,这里只写了常用的get post请求,需要可以加其他的。

  由于post请求体有多种,此处只区分了两种,其他的可以加上。

  

import json

import requests


class Request:


    def get_url(self,url,headers=None,paras=None):

        if url==None:
            print("URL地址为空")
        elif paras == None:
            r = requests.get(url,headers=headers,params=paras)
        else:
            r = requests.get(url, headers=headers, params=json.loads(paras))
        return r

    def post_url(self,url,content_type,headers=None,payload=None):

        if url==None:
            print("URL地址为空")
        else:
            if content_type == "application/json":
               payload_json = json.dumps(payload)
               r = requests.post(url,headers=headers,data=payload_json)

            elif content_type =="application/x-www-form-urlencoded":
                r = requests.post(url,headers=headers,data=payload)
            else:
                print("no this content-type")

            return r


    def choose_method(self,method,url,content_type,headers=None,payload=None):
        if method == "get":
            return self.get_url(url,headers,payload)
        elif method == "post":
            return self.post_url(url,content_type,headers,payload)
        else:
            print("no this method request")

  四、testcases包

  使用pytest框架进行自动化测试

  

import json

import pytest

from autoStruct.apiAuto.common.requests import Request
from autoStruct.apiAutoTesting.common.readConfig import ReadConfig
from autoStruct.apiAutoTesting.excel.readExcel import ReadExcel


class TestApi:

    def setup_class(self):
        file_path = ReadConfig().get_data('excel', 'file_path')
        sheet_name = ReadConfig().get_data('excel', 'sheet_name')
        self.ex = ReadExcel(file_path, sheet_name)

    @pytest.mark.parametrize('num',[1,2,3,4,5])
    def testcase(self,num):
            data = self.ex.get_data(num)
            print(data)
            if data[3]==None:
                r = Request().choose_method(data[1],data[0],data[4],json.loads(data[2]),data[3])
            else:
                r = Request().choose_method(data[1], data[0], data[4], json.loads(data[2]), json.loads(data[3]))
            print(r.text)


if __name__ == '__main__':
    pytest.main(['-vs','testapi.py'])

 

posted @ 2021-08-10 16:09  longlongleg  阅读(910)  评论(1编辑  收藏  举报