pytest接口自动化(一)

  这里说下pytest接口自动化的工程项目的基本结构(个人的工程结构),项目工程主要使用pytest、pymysql、requests、pyyaml、allure-pytest、pytest-rerunfailures、pytest-xdist、filelock等插件。

  首先工程结构

  • api_test [工程名称]
    • api  存放接口的封装方法,方法中一般存着接口的传参、接口地址及请求方式信息     如下:

      class API(HttpClinet):

        ...

        def selectUser(self, userid, **kwargs):

          url = '/select/{}'.format(userid)

          return self.post(url, **kwargs)

        ...

    • base [基本信息]  一般存放封装的接口请求方式、headers最基础的信息、request方法、基本模块等信息。  如下:

      class HttpClient:

        headers ={

          "content-type": "application/json; charset=UTF-8",

          "source": 501

        }

        ...

        def get(self, path, **kwargs):

          return self.request(path, 'GET', **kwargs)

        def request(self, path, method, data=None, json=None,**kwargs):

          ...

          if method == "GET":

            rsp = self.session.get(url, **kwargs)

          ...

          return rsp

    • common [基础的公共方法]  发送邮件、数据库操作、读取数据、加载文件、json解析等方法
    • config [配置文件]  数据库、项目地址、日志设置等配置文件。如下:

      mysql:

        host: 127.0.0.1

        port: 3306

        username: xxxxxx

        password: xxxxxx

        db: database

    • data [测试数据]  username、password、errorCode等
    • operations [接口拼接]  存放拼接好的接口,在实际用例脚本中直接传对应参数值调用即可。如下

      class O_Oprations:

        ...

        def login(self, username, password):

          payload = {

            "username" : username,

            "password" : password,

            ...

          }

          res = core_ip.login(json = playload)

          return = res

    • conftest [封装的测试用例的通用方法]  目的是为了简化测试用例脚本,便于统一维护,提高可读性   如下:

        @pytest.fixture(scope = 'session')

      def login_fixture():

        username = basedata["user"]["username"]

        password = basedata["user"]["password"]

        result = O_Oprations(token=None).login(username, password)

        baseToken = json.loads(result.content)["userInfo"]["token"]

        yield result.content

      这里,我们为了测试用例脚本的执行,资源的节省,会用到pytest里面的fixture的概念。


 

      fixture 的作用范围

      fixture里面的scope参数可以控制fixture的作用范围:session > module > class > function

      - function 每一个函数或方法都会调用

      - class 每一个类调用一次,一个类可以有多个方法

      - module 每一个.py文件调用一次,文件内又有多个function 和 class

      - session 多个文件调用一次,可以跨.py文件调用,每个.py文件就是module


 

      接下来,我会在 pytest接口自动化(二)中,和大家一起学习 用例脚本 单场景单接口,单场景多接口等

        

      

  

  

posted @   Alpha_To_Beta  阅读(359)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示