API接口自动化测试

本节介绍,使用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'])
学习安排上

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。【保证100%免费】

视频文档获取方式:

这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方进群即可自行领取。

相关推荐
溪午闻璐2 分钟前
C++ 文件操作
开发语言·c++
环能jvav大师12 分钟前
基于R语言的统计分析基础:使用SQL语句操作数据集
开发语言·数据库·sql·数据分析·r语言·sqlite
吱吱鼠叔15 分钟前
MATLAB方程求解:1.线性方程组
开发语言·matlab·php
今天也要加油丫17 分钟前
`re.compile(r“(<.*?>)“)` 如何有效地从给定字符串中提取出所有符合 `<...>` 格式的引用
python
Antonio91520 分钟前
【CMake】使用CMake在Visual Studio内构建多文件夹工程
开发语言·c++·visual studio
LyaJpunov33 分钟前
C++中move和forword的区别
开发语言·c++
程序猿练习生38 分钟前
C++速通LeetCode中等第9题-合并区间
开发语言·c++·leetcode
一名路过的小码农1 小时前
C/C++动态库函数导出 windows
c语言·开发语言·c++
m0_631270401 小时前
标准c语言(一)
c语言·开发语言·算法
万河归海4281 小时前
C语言——二分法搜索数组中特定元素并返回下标
c语言·开发语言·数据结构·经验分享·笔记·算法·visualstudio