• API接口自动化测试


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

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

      结构如下

      

      excel文档内容如下:

      

       一、Common与Config包

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

      

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

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    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进行实现

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    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 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请求体有多种,此处只区分了两种,其他的可以加上。

      

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    import json

    import requests

    class Request:

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

            if url==None:

                print("URL地址为空")

            elif paras == None:

                = requests.get(url,headers=headers,params=paras)

            else:

                = 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)

                   = requests.post(url,headers=headers,data=payload_json)

                elif content_type =="application/x-www-form-urlencoded":

                    = 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框架进行自动化测试

      

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    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:

                    = Request().choose_method(data[1],data[0],data[4],json.loads(data[2]),data[3])

                else:

                    = 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'])

    Python接口自动化测试零基础入门到精通(2023最新版)

     

  • 相关阅读:
    MySQL的基础(一)
    字符串反转(Python)
    艾美捷胆固醇肉豆蔻酸酯说明书和相关研究
    Spring异步任务async介绍与案例实战
    git 指令大全从基本开始复盘
    2023CSP-S初赛复习整理
    计算器之策略
    ASPICE标准快速掌握「3.1. 实践示例」
    Unity SteamVR 开发教程:SteamVR Input 输入系统(2.x 以上版本)
    Springboot 整合 xxljob 动态API调度任务(进阶篇)
  • 原文地址:https://blog.csdn.net/dad22211/article/details/134321082