简单接口自动化框架实现(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()
相关推荐
画中有画8 小时前
软件架构中质量属性(性能、安全、可扩展性)的权衡设计
java·运维·安全
NJCloud8 小时前
Ansible(三)——Zabbix 监控系统部署与敏感信息加密
linux·运维·chrome·信息可视化·ansible·zabbix
NJCloud9 小时前
TiDB 集群部署与 MySQL 兼容性适配实战
linux·运维·数据库·mysql·tidb
2401_868534789 小时前
UNIX常用命令英文全称与中文解释整理
linux·运维
lsh曙光12 小时前
playbook剧本(2)--Ansible变量
linux·运维·网络
ly768913 小时前
Docker 从入门到实践:镜像、容器、Dockerfile 与 Docker Compose 详解
运维·docker·容器
用户31693538118314 小时前
ry.bat和ry.sh部署
运维
mennekes14 小时前
自动化产线临时配电:明装工业插座 vs 面板式工业插座 vs 模块化插座箱取舍
运维·科技·安全·制造
tedcloud12314 小时前
book-to-skill 怎么部署?把技术书和项目文档变成 AI Agent 可复用知识
linux·运维·服务器·人工智能·开源
旗开得胜马到成功14 小时前
SK海力士SSD售后翻车:企业备份介质裸奔风险与中科热备技术选型拆解
运维·服务器·网络