首页 > 其他分享 >接口自动化框架关于接口关联的封装

接口自动化框架关于接口关联的封装

时间:2023-05-13 19:33:54浏览次数:29  
标签:封装 url py 接口 token user 自动化 test requests

一、类之间继承问题:

由于在test_api.py定义了全局变量,而test.user.py想使用这些全局变量就得导入test_api.py模块

但是因为test_user.py导入了test_api.py的模块并使用,到时候执行test_user.py的时候会把test.api.py中的方法(用例)也执行一遍

#演示:

目录结构:

test_api.py

import requests

class TestRequest():

    #全局变量,类变量,通过类名调用
    access_token=""
    sess=requests.session()  #定义全局变量sess=requests.session(),将所有的requests都替换为requests.session()就相当于都在一个会话中了

    # 获取接口统一鉴权码token
    def test_token(self):
        url = "http://47.108.153.47:8089/qzcsbj/user/login"
        shuju={
            "username": "ddance",
            "password": "000000"
        }
        res=TestRequest.sess.request(method="post",url=url,json=shuju)  #将所有的requests都替换为requests.session()就相当于都在一个会话中了
        print(res.json())
        TestRequest.access_token=res.json()["data"]["token"]  #将token的值赋给全局变量access_token

    #修改一个商品
    def test_edit_product(self):
        url = "http://47.108.153.47:8089/qzcsbj/product/update"
        shuju = {
            "product": {
                "id": 381,
                "price": 20,  #将价格改为20元
                "productName": "狗粮"
            },
            "token": TestRequest.access_token
        }
        res=TestRequest.sess.request(method="post",url=url,json=shuju)  #将所有的requests都替换为requests.session()就相当于都在一个会话中了
        print(res.json())

    #文件上传
    def test_file_upload(self):
        shuju = {
            "name": "01"
        }
        shuju1={
            "uploadfile":open(r"C:\01.jpg","rb"),  #r:转义 rb:转化为只读的二进制流
        }
        url = "http://47.108.153.47:8089/qzcsbj/file/upload?name=" + shuju["name"]  #接口文档中规定要将name的值跟在url之后,因此这里使用字典key提取name的值01拼接到url之后
        res=TestRequest.sess.request(method="post",url=url,json=shuju,files=shuju1)  #上传文件的时候使用files而不是data或者json  #将所有的requests都替换为requests.session()就相当于都在一个会话中了
        print(res.json())

test_user.py

import requests
from testcases.test_api import TestRequest  #导入testcases包下的test_api模块下的TestRequest类

class TestUser():
    
    #修改用户信息
    def test_edit_user(self):
        shuju={
            "token": TestRequest.access_token,  #使用TestRequest类的全局变量access_token
            "user": {
                "id": 1305,
                "username": "ddance",
                "password": "000000",
                "realName": "string",
                "sex": "0",
                "birthday": "2001-01-01",
                "phone": "13542588888",  #修改电话号码为13542588888
                "utype": "0",
                "addtime": "2023-05-12 22:21:56.0",
                "adduser": "ddance"
                }
        }
        url = "http://47.108.153.47:8089/qzcsbj/user/update"
        res=requests.request(method="post",url=url,json=shuju)
        print(res.json())

all.py

import pytest

if __name__ == '__main__':
    pytest.main()

执行结果:

D:\JetBrains\PycharmProjects\API接口测试\venv\Scripts\python.exe D:\JetBrains\PycharmProjects\API接口测试\all.py 
============================= test session starts =============================

testcases\test_api.py ...                                                [ 42%]  #这里3个“.”表示执行了3个用例
testcases\test_user.py ....                                              [100%]  #这里4个“.”表示执行了4个用例

============================== 7 passed in 0.93s ==============================

Process finished with exit code 0

为什么test_user.py中明明一个用例却执行了4个用例呢?这是因为test_user.py调用test_api.py下的类的时候把test_api.py类下的用例也执行了一遍

如何避免这种错误呢,可以去掉全局变量,用YAML文件代替保存解决:

#演示:

目录结构:

 

标签:封装,url,py,接口,token,user,自动化,test,requests
From: https://www.cnblogs.com/vorn/p/17398003.html

相关文章

  • 获取拼多多商品详情api、接口获取宝贝详情、产品详细属性Java示例说明
    ​ ​编辑拼多多是一家创新型的社交电商平台,成立于2015年,总部位于上海。它突破了传统电商的商业模式,通过社交传播与砍价团购的方式,为用户提供更便宜、更优质的商品。截至2021年第一季度,拼多多用户数量已经超过8亿,是中国最受欢迎的电商平台之一。pinduoduo.item_get根据ID取商......
  • 判断某个类是否实现了某个接口
    通过TObject.GetInterface可以获得对象的实例实现某个接口,前提条件是必须实例化对象后才能运行GetInterface下面的方法可获取类是否实现了某个接口,并返回接口的偏移:function FindInterface(AClass:TClass;GUID:TGUID; var Offset:NativeInt):Boolean;var  i: integer......
  • 如何在业务代码中使用 ThinkPHP5.1 封装的容器内反射方法
    invokeClass用法:可以不传命名空间实例化(通过反射实例化)$obj=Container::getInstance()->invokeClass(InvokerTest::class);var_dump($obj->invokerNews());die;-----------------------------------------------------------------------invokeMethod用法:传入带命名空间的类和......
  • 接口的细节和多态
    1. 接口部分接上2. 接口细节01  4051)接口不能被实例化2)接口中所有的方法是public方法,接口中抽象方法,可以不用abstract 修饰图示:3) 一个普通类实现接口,就必须将该接口的所有方法都实现。4)抽象类实现接口,可以不用实现接口的方法。代码在com.stulzl.interface_detalil.包中......
  • 爆肝一周,我开源了chat gpt 接口,官方1:1镜像支持全部 官方接口
    这里实现我之前文章承诺承接上文人人实现ChatGPT自由,手把手教你零撸部署自己聊天私服现在ChatGPT提供了api接口可以让我自己对接去实现我们自己想要gpt应用,但是由于一些原因,国内也不开放接口,所以我就1:1自己对接了官方所有接口。大家可以通过我的接口轻松实现一个自己定制化......
  • 西门子S7-1500暖通空调冷水机组PLC程序案例, 硬件采用西门子1500CPU+ET200SP接口IO模块
    西门子S7-1500暖通空调冷水机组PLC程序案例,硬件采用西门子1500CPU+ET200SP接口IO模块,HMI采用西门子触摸屏。程序采用SCL控制程序编程,系统水泵采用一用一备,通过程序实现了加减机控制,根据压差控制开启的水泵台数以及频率;还有焓值计算FB块,输入干球温度,干球湿度可自动计算湿球温度,......
  • 文件相关信息、文件索引信息、链接信息、系统时间、机器克隆、定时任务、paramiko模块
    目录今日内容概要今日内容详细文件相关信息文件索引信息链接信息系统时间机器克隆定时任务paramiko模块公钥私钥paramiko其他操作代码封装面试题回忆etc目录配置相关/etc/profile 环境变量文件/etc/motd 开机欢迎界面usr目录程序相关四种安装软件的方式 1.yum安装 ......
  • APP自动化--封包
    常用的导包数据,可以直接封装起来,以便后期使用,可以在project添加名为Package的python软件包,如常用下面的包和APP自动远程的链接信息,可以进行封装fromappium.webdriverimportRemote#导入远程包fromappium.webdriver.common.appiumbyimportAppiumByasBy#引用app......
  • 小白的一次Form组件封装分享
    Form组件介绍form表单常用在回显表单信息+验证表单+提交表单信息。通常包含输入框,选择框,日期选择框,文本框等可输入的组件。封装思路通过配置文件生成一个基本的表单,然后配合数据的双向绑定得到我们提交的数据,同时尽量保留第三方UI库组件提供的属性(Attributes)、插槽(Slots)和......
  • 记录--9个封装Vue组件的小技巧
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助组件是前端框架的基本构建块。把它们设计得更好会使我们的应用程序更容易改变和理解。在这节课中,分享一下在过去几年中工作中学到的9个技巧。1.你可能不需要创建一个组件在创建一个组件之前,看看它是为了可重用......