• 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()
    
    


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

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

  • 相关阅读:
    008 Python、Anaconda、pip、Pycharm、Jupyter 的下载
    010 Python 重中之重的变量
    19 Transformer 解码器的两个为什么(为什么做掩码、为什么用编码器解码器注意力)
    15 Transformer 框架概述
    009 Pycharm的使用(各种骚操作和快捷键)
    17 Transformer 的解码器(Decoders)——我要生成一个又一个单词
    011 Python 的打印(花式变色打印)和注释(为什么加个#号就能注释)
    012 Python约定俗称的常量
    IfcPointOrVertexPoint
    java时间戳转为日期
  • 原文地址:https://www.cnblogs.com/wwho/p/15724792.html
Copyright © 2020-2023  润新知