简单接口自动化框架实现(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()
相关推荐
见合八方12 分钟前
【滤波器】用于红外微型光谱仪的可调谐MEMS-FP滤光片-综述
自动化·soa·光通信·激光雷达·半导体光放大器
回忆2012初秋29 分钟前
【Nginx】原理、配置与运维实战(2)
运维·nginx·策略模式
Urbano1 小时前
工装外套全制作流程、工序痛点及自动化设备升级方案
运维·自动化
映翰通朱工2 小时前
工业4G网关无公网IP远程运维实战(内网终端异地访问方案)
运维·服务器·网络·安全·智能路由器
洪晓露2 小时前
将 rke2 集群证书延长至 10 年
运维·服务器·数据库
淡漠的蓝精灵2 小时前
pytest-xdist:把 pytest 测试分发到多核 CPU 执行
其他·pytest
谢平康2 小时前
解决用 rm 报bash: /usr/bin/rm: Argument list too long错
linux·运维·运维开发
IP老炮不瞎唠2 小时前
Python 价格监控如何实现?思路与实用方法分享
运维·服务器·网络
GIS数据转换器2 小时前
城市排水生命线安全运行监测平台深度解析
java·运维·人工智能·python·安全·数据挖掘·无人机
Tokai_Teio_13 小时前
第四届黄河流域 misc
运维·服务器