【自动化测试】接口自动化01

news2024/11/20 3:35:11

文章目录

  • 一、熟悉若requests库以及底层方法的调用逻辑
  • 二、接口自动化以及正则和Jsonpath提取器的应用
    • 6. 高频面试题:
    • 9. 示例:接口关联
    • 13. 文件上传示例
    • 14. cookie关联的接口


努力经营当下 直至未来明朗

一、熟悉若requests库以及底层方法的调用逻辑

  1. 接口自动化主要包括:基于工具的接口自动化以及基于代码的接口自动化。

  2. 在pycharm上安装requests库:在控制台中输入pip install requests
    在这里插入图片描述

  3. pycharm常用的requests库相关函数,按住ctrl+点击可以进入函数进行详细查看

requests.get(url, params=None, **kwargs)    # 发送get请求,**kwargs是可变长度的字典
requests.post(url, data=None, json=None, **kwargs)   # 发送post请求
# post中data和json的区别:取决于需要传递的参数的类型
# files:文件上传

requests.put(url, data=None, **kwargs)    # 发送put请求
requests.delete(url, **kwargs)    # 发送delete请求

requests.request(method, url, **kwargs)   
 # request可以替换以上四种,以上四种函数的底层调用的都是request方法
 # **kwargs参数其实就是以上四种函数中的如params、data、json等参数
 # request方法其实调用的是下面的方法:   
 # session.request(method=method, url=url, **kwargs)
 # 区别在于:session的方法能够自动的关联有cookie关联的接口
 
 # method=method  这是请求方式
 # url=url  请求路径
 
 # **kwargs 其实就可以是以下内容:
 # params=None,  get请求传参
 # data=None,  post或put请求传参
 # headers=None,  请求头
 # cookies=None,  cookie
 # files=None,  文件上传
 -------
 # auth=None,  鉴权
 # timeout=None,  超时处理
 # allow_redirects=True,  是否允许重定向
 # proxies=None,    设置代理
 # hooks=None,  钩子
 # stream=None,  文件下载
 # verify=None,  证书验证
 # cert=None,  CA证书
 # json=None,  post请求传参
 
requests.session()    # 生成session对象,可以自动关联带有cookie的接口
  1. 接口自动化测试框架的封装是面试必问的!!
  2. 发送请求就会有响应,接收请求是由response对象来进行接收的,也是在requests库中。
  3. response对象经常使用的属性方法:
res = requests.get(url, params=None, **kwargs)

print(res.text)  # 返回的文本信息
print(res.json())  # 返回的json格式
print(res.content)  # 返回的字节内容
print(res.status_code)  # 返回的状态码
print(res.reason)  # 返回的状态信息
print(res.cookies)  # 返回的cookie
print(res.encoding)  # 返回的编码格式
print(res.headers)  # 返回的响应头
print(res.request.请求数据)  # 返回的请求数据(请求数据可以根据提示来进行选择)

二、接口自动化以及正则和Jsonpath提取器的应用

  1. 查看接口文档,需要了解以下内容
    ① 请求:请求方式、请求路径、请求参数、请求头
    ② 响应:响应码、响应信息、响应内容、响应头

  2. 在查看接口文档时,如果有接口约定的要先查看接口约定,有说明的先看说明。

  3. 说明是JSON:由 {键值对} 和 [数组] 组成的一组数据。

  4. 示例:

import requests
class TestApi:

    # 1. 测试csdn用户主页获取
    def test_get_token(self):
        url = "https://blog.csdn.net/weixin_54150521"   # 只是传递网址,问号之后的内容不同传递
        data = {
            "spm": "'Dream是普通小孩耶"
            # 如果多个参数,使用,进行分隔;一定要给key和value都加上"",中间用:
            # 注意和参数值的一个对应
        }
        res = requests.get(url, params=data)  # 没有使用**kwargs则直接删除就行
        print(res.text)  # 返回的文本信息
        # print(res.json())  # 返回的json格式,请求返回的数据不是完整的json数据格式
        print(res.content)  # 返回的字节内容
        print(res.reason)  # 返回的状态信息


if __name__ == '__main__':     # 使用main来运行,但是注意一定是顶格的!! 空俩行
    TestApi().test_get_token()    # 初始化对象并调用其方法
  1. 下一个接口的参数需要使用上一个接口的返回值,这就是接口关联

6. 高频面试题:

接口自动化实现接口关联的三种方式以及提取变量的两种方式:

1)实现接口关联的三种方式:

① 通过类变量(全局变量)保存中间变量实现接口关联
② 通过
单独的文件
保存中间变量实现接口关联
极限封装成和工具一样只需要通过表达式就可以实现接口关联

2)提取变量的两种方式:

① 正则表达式提取:适用于提取文本结果
② JsonPath提取:适用于提取Json结果,返回的是列表[ ]
jsonpath.jsonpath(obj,expr) # obj提取的对象 expr是jsonpath的表达式

  1. 补充:python中自动导包:alt + enter
  2. jsonpath表达式的规则:
    ① $ 根结点,即{起始位置
    ② . 子结点 如: .access_token,即子结点其实就相当于其中的key
    ③ … 递归取子结点 说明可以将所有的key都获取到
    ④ [] 代表取列表中的值,下标从0开始

9. 示例:接口关联

import jsonpath
import requests

class TestApi:

    # 创建类变量,注意创建的方式,同样是需要使用""
    access_token = ""

    # 1. 获取鉴权码access token接口
    def test_get_token(self):
        url = "https://api.weixin.qq.com/cgi-bin/token"
        datas = {
            # 注意一定是{}的形式
            "grant_type": "client_credential",
            "appid": "wx74a8627810cfa308",
            "secret": "e40a02f9d79a8097df497e6aaf93ab80"
        }
        res = requests.get(url, params=datas)
        result = res.json()
        # 提取access_token
        value = jsonpath.jsonpath(result, "$.access_token")
        # 返回的是一个列表[],可以使用下标指定
        TestApi.access_token = value[0]  # 获取第一个数据并保存到全局变量中

    # 2. 获取公众号已创建的标签接口
    # 注意格式位置一定要正确,否则是不能被正确识别到的
    def test_select_flag(self):
        url = "https://api.weixin.qq.com/cgi-bin/tags/get"
        # 这里的参数其实就是之前返回的参数
        datas = {
            # 注意一定是{}的形式
            "access_token": TestApi.access_token
        }
        res = requests.get(url, params=datas)
        print(res.json())


if __name__ == '__main__':
    TestApi().test_get_token()
    TestApi().test_select_flag()
  1. requests.post(url, data=None, json=None, **kwargs) # 发送post请求
    1) post中data和json的区别:取决于需要传递的参数的类型
    2)使用postman中body的参数类型进行对标:
    11
    ① form-data:表单和文件
    ② x-www-form-urlencoded:纯表单
    ③ raw:有很多这种,最主要的是json
    ④ binary:把文件转换为二进制传输
    3)so:参数为json的使用json传参,参数为文件的使用files来传参,其他的都是用data来进行传参。

  2. post请求方式传递json参数 示例:

    # 3. 创建标签接口(post请求方式)
    def test_create_flag(self):
        url = "https://api.weixin.qq.com/cgi-bin/tags/create?access_token=" + TestApi.access_token
        datas = {
            "tag": {"name": "广东" + str(random.randint(10000, 99999))}
            # 可以进行随机数转字符串的拼接:str(random.randint(10000,99999))
        }
        res = requests.post(url, json=datas)
        print(json.loads(json.dumps(res.json()).replace("\\\\","\\")))  
        # unicode编码转为正常编码


13. 文件上传示例

1)代码示例

    # 4. 文件上传
    def test_file_upload(self):
        url = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=" + TestApi.access_token
        datas = {
            "media": open("C:/Users/lenovo/Desktop/栈帧.png", "rb")
            # 后面是文件的路径,注意接口文档的要求是文件or字节流
            # 文件模式为字节处理 rb
        }
        res = requests.post(url, files=datas)
        print(res.json())

2) 可能会报错:

UnicodeDecodeError: 'gbk' codec can't decode byte 0xf0 in position 19: illegal multibyte sequence

这是因为文件在转成字节流的时候文件模式没有按照字节流处理,此时就需要修改为open(“文件路径”,“rb”)。可以参考:python报错:文件模式处理
13

14. cookie关联的接口

  1. 正则表达式适用于提取文本结果
  1. re.search() 提取一个值,通过下标取值
    2)re.findall() 提取多个值,通过下标取值
    15
  1. 一般由cookie关联的我们不会单独去使用get、post方法发送请求;而是直接先全局初始化一个session对象,然后使用request方法发送请求。
    # cookie关联的接口
    # 1. 访问首页
    def test_start(self):
        url = "http://47.107.116.139/phpwind/"
        # 使用session对象发送请求
        res = TestApi.sess.request(method='get', url=url)

        # res = requests.get(url)
        result = res.text
        # print(res.text)  # 文本打印
        TestApi.csrf_token = re.search('name="csrf_token" value="(.*?)"', result).group(1)

    # 2. 测试登录
    def test_login(self):
        url = "http://47.107.116.139/phpwind/index.php?m=u&c=login&a=dorun"
        datas = {
            "username": "baili",
            "password": "baili123",
            "csrf_token": TestApi.csrf_token,
            "back_url": "http://47.107.116.139/phpwind/",
            "invite": ""
        }
        headers = {
            "Accept": "application/json, text/javascript, /; q=0.01",
            "x-Requested-With": "XMLHttpRequest"
        }

        # 使用session对象发送请求
        res = TestApi.sess.request(method='post', url=url, data=datas, headers=headers)
        # res = requests.post(url, data=datas, headers=headers)
        print(res.json())
  1. 在发送请求的时候,我们不知道其是不是有cookie的关联,所以最好直接使用request来发送请求。(需要先初始化全局变量session对象)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/885952.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

on-java-8 知识总结(低频部分)

Perl简介 Perl 是 Practical Extraction and Report Language 的缩写,可翻译为 “实用报表提取语言”。最开始,Perl是一门文本处理语言,不过现在已经是通用的语言了。 作者吐槽其write-only,想必是因为其灵活性,同一目标下能写出…

Android设备通过蓝牙HID技术模拟键盘实现

目录 一,背景介绍 二,技术方案 2.1 获取BluetoothHidDevice实例 2.2 注册/解除注册HID实例 2.3 Hid report description描述符生成工具 2.4 键盘映射表 2.5 通过HID发送键盘事件 三,实例 一,背景介绍 日常生活中&#xff0…

第15集丨Vue 江湖 —— 组件

目录 一、为什么需要组件1.1 传统方式编写应用1.2 使用组件方式编写应用1.3 Vue的组件管理 二、Vue中的组件1.1 基本概念1.1.1 组件分类1.1.2 Vue中使用组件的三大步骤:1.1.3 如何定义一个组件1.1.4 如何注册组件1.1.5 如何使用组件 1.2 注意点1.2.1 关于组件名1.2.2 关于组件标…

14.Linkedin在中国市场的主要竞争对手

自Linkedin敲响了中国的大门之后,在国内市场也拥有了大量的用户。经过不断地发展了改革创新,更是成为了国内影响力比较大的职业社交平台之一。为了能够在国内市场中取得成功,在进入国内之前,Linkedin就采取了全新的模式,不仅仅是销售机构,也具备了产品技术、市场、公关等完整的…

达芬奇无法播放视频,黑屏,不能预览画面

说一下其中一个原因,是因为用了像是xdisplay,super display这类软件,他们会安装一个显卡驱动而这个驱动就会导致这个问题。 方法很简单,在设备管理器里面,显示卡一览,卸载掉除了你的电脑显卡以外的虚拟显卡…

webpack 从入门到放弃!

webpack webpack于2012年3月10号诞生,作者是Tobias(德国)。参考GWT(Google Web Toolkit)的code splitting功能在webpack中进行实现。然后在2014年Instagram团队分享性能优化时,提出使用webpack的code splitting特性从而大火。 现在webpack的出现模糊了任…

计算机视觉目标检测性能指标

目录 精确率(Precision)和召回率(Recall) F1分数(F1 Score) IoU(Intersection over Union) P-R曲线(Precision-Recall Curve)和 AP mAP(mean…

Redis中使用lua脚本

微信公众号访问地址:Redis中使用lua脚本 推荐文章: 1、springBoot对接kafka,批量、并发、异步获取消息,并动态、批量插入库表; 2、SpringBoot用线程池ThreadPoolTaskExecutor异步处理百万级数据; 3、为什么引入Redisson分布式锁? 4、Redisso…

60页数字政府智慧政务大数据资源平台项目可研方案PPT

导读:原文《60页数字政府智慧政务大数据资源平台项目可研方案PPT》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 项目需求分析 项目建设原则和基本策略…

C++之类之间访问函数指针(一百八十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

一、window配置微软商店中的Ubuntu,及错误解决方法

(1)首先,在微软商店中搜索“Ubuntu”,下载你喜欢的版本(此处) (2)设置适用于window的Linux子系统,跟着红色方框走 点击“确定”之后,会提示你重启电脑,按要求重启电脑即可…

无涯教程-Perl - sub函数

描述 此函数定义一个新的子例程。上面显示的参数遵循以下规则- NAME是子例程的名称。可以在有或没有原型规范的情况下预先声明命名的子例程(没有关联的代码块)。 匿名子例程必须具有定义。 PROTO定义了函数的原型,调用该函数以验证提供的参数时将使用该原型。 ATTRS为解析…

管理类联考——逻辑——真题篇——按知识分类——汇总篇——一、形式逻辑——假言—公式化转换—等价+矛盾

文章目录 第一节 假言—公式化转换—等价矛盾真题(2012—38)—假言—A→B的公式化转换—A→B的等价命题:①逆否命题:非B→非A。真题(2015—47) —假言A→B的公式化转换—A→B的等价命题:①逆否…

重新定义物化视图,你必须拥有的极速湖仓神器!

当今企业在进行数据分析时,面临着多重问题和挑战,而数据加工作为其中不可或缺的一环显得尤为重要。 首要的挑战在于数据加工的复杂性。从数据的产生到最终产生价值的整个链路仍然十分复杂,涉及多个环节和技术方案,这导致了技术复…

Java培训机构出来的好找工作吗?有的人还是没有工资!

Java培训机构出来的好找工作吗?为什么有的人找不到呢?事实上,参加Java培训机构并不是直接保证找到工作,而是提供了一定的学习和就业支持。以下是关于Java培训机构和就业的一些要点: 1.学习质量和教学内容 好的Java培训机构通常提供系统化、…

设计模式 : 单例模式笔记

文章目录 一.单例模式二.单例模式的两种实现方式饿汉模式懒汉模式 一.单例模式 一个类只能创建一个对象,这样的类的设计模式就称为单例模式,该模式保证系统中该类只能有一个实例(并且父子进程共享),一个很典型的单例类就是CSTL的内存池C单例模式的基本设计思路: 私有化构造函数…

海外应用ASO优化的小技巧2

应用程序的名称可以表达很多内容,是应用程序元数据的重要组成部分,一个强大的标题可以识别应用中的潜在消费者,使得用户看名字就可以知道这个程序是做什么的,从而有助于转化率的提高。 1、详细的标题可以更好地帮助我们的软件。 …

windows权限维持—黄金白银票据隐藏用户远控RustDeskGotoHttp

windows权限维持—黄金白银票据&隐藏用户&远控&RustDesk&GotoHttp 1. 前置1.1. 初始问题1.1.1. 解决办法 2. 隐藏用户2.1. 工具原理2.2. 案例操作2.2.1. 单机添加用户2.2.1.1. 工具添加用户2.2.1.2. 工具查看隐藏用户2.2.1.3. 本地查看隐藏用户 2.2.2. 域内添加…

机器学习丨1. 机器学习概述

Author:AXYZdong 硕士在读 工科男 有一点思考,有一点想法,有一点理性! 定个小小目标,努力成为习惯!在最美的年华遇见更好的自己! CSDNAXYZdong,CSDN首发,AXYZdong原创 唯…

IT团队如何引领企业走向创造价值的新途径?

随着疫情结束带来的经济回暖,我们无疑已做好了更充分的准备。信息技术使许多企业能够在关门歇业的情况下继续运营,以防止大规模集会并强制执行社会隔离。得益于信息技术支持团队,许多企业能够动员其员工进行远程工作,有些甚至只需…