python 接口自动化 面向对象思想对 Restful 类型的请求进行二次封装 写用例

项目目录结构:

├─api
├─core
└─testcase

  • api : 封装 python 接口
  • core:封装 Restful 类型的请求
  • testcase : 编写用例

根据 Requests 的源码进行二次封装

core/rest_client.py

import requests


class RestClient(object):

    def __init__(self, KeepLogin, api_root_url):
        self.KeepLogin = KeepLogin
        self.api_root_url = api_root_url

    def get(self, url, **kwargs):
        return self.request(url, "GET", **kwargs)

    def post(self, url, data = None, json = None, **kwargs):
        return self.request(url, "POST", data, json, **kwargs)

    def request(self, url, method, data = None, json = None, **kwargs):
        url = self.api_root_url + url
        if method == "GET":
            return self.KeepLogin.get(url, **kwargs)
        if method == "POST":
            return self.KeepLogin.post(url, data, json, **kwargs)




封装 python 接口

/api/schoolManageApi.py

from core.rest_client import RestClient


class SchoolManage(RestClient):
    def __init__(self, KeepLogin, api_root_url):
        super(SchoolManage, self).__init__(KeepLogin, api_root_url)

    def school_login(self, **kwargs):
        return self.get("/login/in", **kwargs)

    def school_add(self, **kwargs):
        return self.post("/school/manage/addSchoolInfo", **kwargs)




写测试用例

/testcase/testSmsCase.py

import random
import unittest
import requests
from api.schoolManageApi import SchoolManage

Userdict = {
    "account": "admin",
    "pwd": "660B8D2D5359FF6F94F8D3345698F88C"
}
Userdict_error = {
    "account": "admin",
    "pwd": "1660B8D2D5359FF6F94F8D3345698F88C"
}


class SMSLoginAndSchoolAdd(unittest.TestCase):
    @classmethod
    def setUpClass(self):
        self.s = requests.session()
        self.url = "http://192.168.139.128:8080/recruit.students"
        self.KeepLogin = SchoolManage(self.s, self.url)
        self.KeepLogin.school_login(params=Userdict)

    @classmethod
    def tearDownClass(self):
        self.s.close()

    def test_01(self):
        print("测试用例01:正确用户名与密码,登陆成功")
        a = self.KeepLogin.school_login(params=Userdict)
        self.assertIn("退出", a.text)
        print("测试用例01通过")

    # def test_02(self):
    #     print("测试用例02:正确用户名与错误密码,登陆失败")
    #     a = self.KeepLogin.get("/login/in", Userdict_error)
    #     self.assertNotIn("退出", a.text)
    #     print("测试用例02通过")

    def test_03(self):
        print("测试用例03:在登陆状态下成功添加任意学校")
        # 一个随机学校名和一个随机备注
        SchoolNameRandom = random.randint(1, 1000000000)
        RemarkRandom = random.randint(1, 100000)

        # 新建学校post请求的body参数
        SchoolAddBody = {
            "schoolName": SchoolNameRandom,
            "listSchoolType[0].id": 2,
            "canRecruit": 1,
            "remark": RemarkRandom
        }
        a = self.KeepLogin.school_add(data=SchoolAddBody)
        print(a.text)
        # a.post("/school/manage/addSchoolInfo", data=SchoolAddBody)


if __name__ == "__main__":
    unittest.main()



后续还可以进行关键字的封装

现在在写用例的时候,还存在重复调用的地方

原文地址:https://www.cnblogs.com/wwho/p/15724792.html