• 接口自动化【六】——接口关联之jsonpath提取+设置全局变量+通用封装


    文章目录

    • 前言
    • 一、jsonpath提取
    • 二、jsonpath与excel当中提取表达式结合
    • 三、类的动态属性设置
    • 四、设置全局变量(这个模块就作为一个讲解)
    • 五、new_handle_global_data.py
    • 六、new_handle_extract.py
    • 七、test_new_upload_image.py 文件中上传图片的代码更改
    • 八、补充知识
      • 1、获取字典当中的值的两种写法
      • 2、函数的传参
    • 总结

    前言

    这章主要学习jsonpath的提取,动态属性的设置和提取。以及从Excel表格中拿取后在用例中进行操作。


    一、jsonpath提取

    1、学习地址和安装

    jsonpath - json对象里面,进行搜索。

    官方地址:https://goessner.net/articles/JsonPath/

    jsonpath在线练习地址:http://jsonpath.com/

    另一个地址:http://www.e123456.com/aaaphp/online/jsonpath/

    第三方库 jsonpath

    安装:pip install jsonpath

    2、用法

    导入函数:from jsonpath import jsonpath

    返回值 = jsonpath(python字典,jsonpath的表达式)

    如果没有提取到值,返回False

    如果有提取到值,返回列表。

    举例:

    二、jsonpath与excel当中提取表达式结合

    这里所谓的jsonpath与excel当中提取表达式结合,就是先把Excel中的表达式拿出来(这种拿取数据的方法可以是ddt数据驱动拿取,也可以是直接使用openpyxl中的函数去拿取),先转化为字典。再从字典中取值,拿到jsonpath的表达式。最后用jsonpath函数把所要从某个字典中具体要都字段值提取出来。

     注意:这里的new_dic这个空字典,事先也是不知道要定义,也是写着代码,写着写着就想到了,要把新的值放在一个字典里,所以在写18行代码的时候,就在外面临时想起定义了。

    当然也可以加入判断来取值:

    三、类的动态属性设置

    这个类的动态属性,目前主要就是运用在全局变量里面。

    运用的具体场景是:1、在没有执行代码之前,不确定这个类有多少个属性,也不确定什么时候有,它是不固定。

    四、设置全局变量(这个模块就作为一个讲解)

    我们知道在接口当中上一个接口的字段值,要拿给下一个接口来使用,这种叫做接口依赖。之前的做法是:使用类前置,类前置的意思就是,一旦执行这个类下面的方法,那么就先执行;类前置里面的代码。之前就是把登录的接口中token放在了类前置里面。一旦执行就里面获得token。

    那么现在,我们需要从Excel中的读取的第一条数据,就去完成这个类前置获取登录的token的操作。

    两个步骤:

    第一:在Excel中的第一条数据就是用来解决登录获取token的操作。

    第二:使用全局变量的方式去设置和获取这种动态属性。

     在目录当中建立一个helper的py文件夹,这个文件夹的作用就是用来处理全局变量的(包含:设置,引用全局变量)

    这里面的py文件的顺序是:

    glob_data.py

    add_data.py

    get_data.py

    main.py

    py文件里面的内容和作用:

    glob_data.py文件的作用是:定义全局变量的类

    这个类里面不定义任何函数,因为我只是对类的属性进行操作,不会对类的方法进行操作。

    因为设置属性是动态设置的,那么是不会展示在类里面的(在类里面的是静态属性),那么动态属性是保存在哪里呢?是在计算机内存当中开辟了一个区域用来保存。

    add_data.py的作用是:给自己定义的类设置动态属性

    get_data.py的作用是:获取之前设置的动态属性的值

    main.py的作用:用来执行add_data.py和get_data.py文件里面的函数。就是一并执行了

    五、new_handle_global_data.py

    在tools模块中放入handle_global_data.py文件

    这个文件的作用是:创建一个GlobalData类(称之为:全局变量类),这个类的作用就是用来存在动态设置的属性

    六、new_handle_extract.py

    在tools模块中放入handle_extract.py文件

    这个文件的作用就是:创建一个函数,函数的本质是用来处理从发送请求后得到的respone结果里面的token数据。 同时把token设置为全局变量。

    七、test_new_upload_image.py 文件中上传图片的代码更改

    Excel表格中放的数据(其中extract字段下面的值,是专门用来,做一个对发送请求后的返回的数据中的token值的提取,注意:这里的extract的值在表格中是字典的形式)

     new_handle_extract.py 文件中加入log后的效果:

    test_new_upload_image.py 文件中加入log的效果:

    八、补充知识:

    1、获取字典当中的值的两种写法

    2、函数的传参

    (1)位置传参

    第1 种方式是最“传统”的方式:一个函数可以定义不限个数参数,参数(形式参数)放在跟在函数名后面的小括号中,各个参数之间以逗号隔开。用这种方式定义的函数在调用的时候也必须在函数名后的小括号中提供相等个数的值(实际参数),不能多也不能少,而且顺序还必须相同。

    1. # 位置传递实例:
    2. def fun1(a,b,c):
    3. return a+b+c
    4. print(fun1(1,2,3))

    输出:6

    (2)关键字传参

    根据每个参数的名字写入函数参数,这种方式是精准传参

    1. # 关键字传递
    2. def fun2(a,b,c):
    3. return a+b+c
    4. print(fun2(a=1,c=3,b=2))

    输出:6

    注意:在使用函数的时候,最好用精准传参的方式,这种是最不容易出错的。最容易出错的是位置传参。

    参考博客主:

    python中函数参数传递的三种方式_python中函数参数传递的几种方法_weixin_39708854的博客-CSDN博客

    Python传递参数的5种方式_python 传参_前热火球员LeBron James的博客-CSDN博客


    总结

    这一章节,理解的含义很重要。核心思想就是全局类的设置和提取。

  • 相关阅读:
    Redis核心数据结构实战与高性能解析
    架构-三层架构:三层架构
    LeetCode【13】罗马数字转整数
    Flask框架——Sijax
    【CSP-J 2021】总结
    精读《素书》精彩语录及感悟篇(一)
    springAOP 通过注解实现 日志打印
    [C/C++]_[中级]_[获取月份的最后一天]
    柱形图:制作图表时,有时会遇到柱形图系列没有居中显示,例如:
    Python文章汇总
  • 原文地址:https://blog.csdn.net/weixin_45272371/article/details/130817635