简单接口自动化框架实现(Python+requests+pytest)

1、接口自动化流程

  • 1.需求分析
  • 2.挑选需要做自动化测试的功能
  • 3.设计测试用例
  • 4.搭建自动化测试环境[可选]
  • 5.设计自动化测试项目的架构[可选]
  • 6.编写代码
  • 7.执行测试用例
  • 8.生成测试报告并分析结果

2、框架结构

--api -->封装请求

--scripts -->编写测试脚本

--data -->存放测试数据

--utils -->存放工具类

--report -->测试报告生成目录

app.py -->存放常量

--pytest.ini -->pytest配置文件

测试脚本实现:

test_area.py

python 复制代码
import requests

from api.AreaAPI import AreaAPI
from api.AreaDBAPI import AreaDBAPI


class TestArea:

    def setup_method(self, method):
        self.session = requests.Session()
        self.area_api = AreaAPI(self.session)

    def teardown_method(self, method):
        self.session.close()


    # 测试查询area列表接口
    def test_list_area(self):
        response = self.area_api.list_area()
        print("状态码:",response.status_code)
        print("响应体:",response.text)

    # 测试新增area接口
    def test_add_area(self):
        data = {"areaName":"12345","priority":"54321"}
        response = self.area_api.add_area(data=data)
        print("状态码:",response.status_code)
        print("响应体:",response.text)
    # 测试修改area接口
    def test_modify_area(self):
        id = AreaDBAPI.select_id_by_name("12345")
        json = {
            "areaId":id,
            "areaName":"1234",
            "priority":"54321"

        }
        response = self.area_api.modify_area(json=json)
        print("状态码:",response.status_code)
        print("响应体:",response.text)
    # 测试删除area接口
    def test_remove_area(self):
        id = AreaDBAPI.select_id_by_name("1234")
        params = {"areaId":id}
        response = self.area_api.remove_area(params=params)
        print("状态码:",response.status_code)
        print("响应体:",response.text)

API实现:

AreaAPI.py

python 复制代码
import requests

from app import AREA_URL, BASE_URL


class AreaAPI:

    def __init__(self,session):
        self.session = session
        self.list_area_url = BASE_URL + AREA_URL + "listarea"
        self.add_area_url = BASE_URL + AREA_URL + "addarea"
        self.modify_area_url = BASE_URL + AREA_URL + "modifyarea"
        self.remove_area_url = BASE_URL + AREA_URL + "removearea"

    # 1、查询area
    def list_area(self):
        response = self.session.get(self.list_area_url)
        return response
    # 2、新增area
    def add_area(self,data):
        response = self.session.post(self.add_area_url,data=data)
        return response
    # 3、修改area
    def modify_area(self,json):
        response = self.session.put(self.modify_area_url,json=json)
        return response
    # 4、删除area
    def remove_area(self,params):
        response = self.session.delete(self.remove_area_url,params=params)
        return response

app.py

python 复制代码
BASE_URL = "http://127.0.0.1:1234/"
AREA_URL = "area/"

数据库连接工具:

python 复制代码
"""
实现封装:将pymysql的常见用法实现封装进一个专门工具类
封装的功能:1、获取连接 2、获取游标 3、释放资源
"""
import pymysql

class DBUtils:
    # 工具函数1:获取连接
    @classmethod
    def create_conn(cls):
        return pymysql.connect(host='localhost',port=3306,user='root',passwd='123456',db='api_test',charset='utf8')

    # 工具函数2:获取游标
    @classmethod
    def create_cur(cls,conn):
        return conn.cursor()

    # 工具函数3:释放资源
    @classmethod
    def close_res(cls,conn,cur):
        if cur:
            cur.close()
        if conn:
            conn.close()

    @classmethod
    def conn_commit(cls,conn):
        conn.commit()
相关推荐
降世神童21 分钟前
华为云Flexus+DeepSeek征文| 使用华为云CCE容器部署Dify-LLM高可用方案的验证与测试
运维·华为云·aigc
降世神童22 分钟前
华为云Flexus+DeepSeek征文| 基于华为云Dify-LLM高可用平台开发运维故障处理智能体
运维·华为云·aigc
好名字更能让你们记住我2 小时前
Linux多线程(十二)之【生产者消费者模型】
linux·运维·服务器·jvm·windows·centos
门思科技2 小时前
设计可靠 LoRaWAN 设备时需要考虑的关键能力
运维·服务器·网络·嵌入式硬件·物联网
学习编程的gas2 小时前
Linux开发工具——gcc/g++
linux·运维·服务器
dessler3 小时前
Kafka-消费者(Consumer)和消费者组(Consumer Group)
linux·运维·kafka
进击的程序汪3 小时前
Linux 启动过程流程图--ARM版
linux·运维·arm开发
思则变3 小时前
[Pytest][Part 3]检测python package状态
pytest
紫璨月3 小时前
nginx反向代理的bug
运维·nginx·bug
没有名字的小羊3 小时前
2.安装Docker
运维·docker·容器