接口自动化测试——必须掌握二

这篇具有很好参考价值的文章主要介绍了接口自动化测试——必须掌握二。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

接口自动化测试——必须掌握二


一、接口请求体-文件

files:参数用来解决文件上传接口
key:需要替换为文件名
value:对应的二进制流

1、第一种方法

import requests

r1=requests.post("https://www.baidu.com/post",
                files={"hogwarts_file":open("1.text",'rb')},
                 )

2、第二种方法

files:参数用来解决文件上传接口
通过value元组传递,实现指定filename的需求

r2=requests.post("https://www.baidu.com/post",
               
                files={"file":('kobe.txt',open("1.text",'rb'))},
                 )

二、接口请求体-form表单

1、什么是 form 请求

数据量不大
数据层级不深的情况
通常以键值对传递

form格式传参,用data接收请求参数

import requests
class TestReq:

    def test_data(self):
        data={"kobe":"py1"}
        #通过data参数传入请求体信息
        r=requests.post("https://www.baidu.com/post",data=data)
        print(r.json())
        #区别
        #print(r.text)

json格式传参,用json接收请求参数

import requests
class TestReq:

    def test_json(self):
        data = {"kobe": "py1"}
        # 通过json参数传入请求体信息
        r = requests.post("https://www.baidu.com/post", json=data)
        print(r.json())
        #print(r.text)

三、接口请求体 - XML

用data来接收xml格式的传参

import requests

xml= """<?xml version='1.0'encoding='utf-8'?>
<a>6</a>"""

headers = {'Content-Type': 'application/xml'}
r = requests.post('https://www.baidu.com/post', data=xml, headers=headers).text

print(r)

四、xml 响应断言

可扩展标记语言(Extensible Markup Language)的缩写
也是一种结构化的数据

1、方法一:XMLSession

r.text:以xml格式形式,获取响应信息
r.xml.links:获取响应中所有的链接,以列表形式展示
r.xml.raw_xml:以字节格式返回响应内容
r.xml.text:返回各个标签下面的内容

xpath方法
1、获取language标签下的内容
first=True:只返回一条数据
r.xml.xpath(“//language”,first=True)

2、获取link标签下所有的的内容

items = r.xml.xpath('//link')
    res=[]
    for item in items:
        res.append(item.text)
    print(res)
from requests_xml import XMLSession

def test_xml():
    #设置session
    session=XMLSession()
    r=session.get("https://www.nasa.gov/rss/dyn/lg_image_of_the_day.rss")
    #print(r.text)
    #print(r.xml.links)         #links 可以拿到响应中所有的链接,列表
    #print(r.xml.raw_xml)       #raw_xml 以字节格式返回响应内容
    #print(r.xml.text)           #text  返回各个标签下面的内容

    #通过xpath
    # 获取language标签下的内容
    item=r.xml.xpath('//language',first=True)   #first=True:只返回一条数据
    print(item.text)

    #因为返回的是对象,所以需要调用text属性获取具体的值
    item1=r.xml.xpath('//link',first=True)
    print(item1.text)

    items = r.xml.xpath('//link')
    res=[]
    for item in items:
        res.append(item.text)
    print(res)

    assert "http://www.nasa.gov/" in res

2、方法二:xml.etree.ElementTree

import xml.etree.ElementTree as ET

def test_etree():
    #设置session
    session=XMLSession()
    r=session.get("https://www.nasa.gov/rss/dyn/lg_image_of_the_day.rss")

    # 自己封装xml解析方法
    root=ET.fromstring(r.text)
    items=root.findall(".//link")
    result=[]
    for i in items:
        result.append(i.text)
        print(i.text)
    assert "http://www.nasa.gov/" in result

五、cookie 处理

1、Cookie使用场景

在接口测试过程中,很多情况下,需要发送的请求附带cookies,才会得到正常的响应的结果。所以使用python+requests进行接口自动化测试也是同理,需要在构造接口测试用例时加入cookie。

2、传递Cookie的两种方式

通过请求头信息传递

import requests
def test_demo():
    url = 'https://www.baidu.com/cookies'
    header={"Cookie":"werwr=yu",
            'User-Agent': 'python'}
    r=requests.get(url=url,headers=header)
    print(r.request.headers)        #获取请求体信息

通过请求的关键字参数cookies传递

def test_demo1():
    url = 'https://www.baidu.com/cookies'
    header={'User-Agent': 'python'}
    cookie_data={"kobe":"kobe",
                 "kobe1": "kobe1",
                 }
    r=requests.get(url=url,headers=header,cookies=cookie_data)
    print(r.request.headers)        #获取请求体信息

六、超时处理

接口自动化测试——必须掌握二

timeout参数设置超时时间,timeout对应的值通常是一个数字类型;提高容错性、健康性

import requests

class TestReq:
    def test_timeout(self):
        #todo timeout参数设置超时时间,timeout对应的值通常是一个数字类型;提高容错性、健康性
        r=requests.get('https://www.baidu.com/cookies',timeout=3)
        print(r)

七、代理配置

1、使用代理之前和使用代理之后对比

接口自动化测试——必须掌握二
接口自动化测试——必须掌握二

2、代理在接口自动化的使用场景

测试脚本,更直观的排查请求错误,相当于编写代码时的debug
获取没有错误的,真实的接口请求响应信息
通过代理获取自动化测试的请求响应
对比两次请求响应的区别

3、如何使用

a、设定代理格式
b、通过proxies 参数传递代理设置
c、开启代理工具监听请求

verify=False:不会认证https

import requests

#定义一个代理的配置信息,key值为协议,value为工具的配置
proxy={
    "http":"http://127.0.0.1:8080",
    "https":"http://127.0.0.1:8080"
}

#通过proxies传递代理配置
#verify=False:不会认证https
data={"a":1}
requests.post(url = 'https://www.baidu.com/post',
              json=data,
              proxies=proxy,
              verify=False)

八、多层嵌套响应断言

1、什么是多层嵌套结构

层级多。
嵌套关系复杂。

{
  "errcode": 0,
  "errmsg": "ok",
  "userid": "zhangsan",
  "name": "张三",
  "department": [1, 2],
  "order": [1, 2],
  "position": "后台工程师",
  "mobile": "13800000000",
  "gender": "1",
  "email": "zhangsan@gzdev.com",
  "biz_mail": "zhangsan@qyycs2.wecom.work",
  "is_leader_in_dept": [1, 0],
  "direct_leader": ["lisi", "wangwu"],
  "avatar": "http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/0",
  "thumb_avatar": "http://wx.qlogo.cn/mmopen/ajNVdqHZLLA3WJ6DSZUfiakYe37PKnQhBIeOQBO4czqrnZDS79FH5Wm5m4X69TBicnHFlhiafvDwklOpZeXYQQ2icg/100",
  "telephone": "020-123456",
  "alias": "jackzhang",
  "address": "广州市海珠区新港中路",
  "open_userid": "xxxxxx",
  "main_department": 1,
  "extattr": {
    "attrs": [
      {
        "type": 0,
        "name": "文本名称",
        "text": {
          "value": "文本"
        }
      },
      {
        "type": 1,
        "name": "网页名称",
        "web": {
          "url": "http://www.test.com",
          "title": "标题"
        }
      }
    ]
  },
  "status": 1,
  "qr_code": "https://open.work.weixin.qq.com/wwopen/userQRCode?vcode=xxx",
  "external_position": "产品经理",
  "external_profile": {
    "external_corp_name": "企业简称",
    "wechat_channels": {
      "nickname": "视频号名称",
      "status": 1
    },
    "external_attr": [
      {
        "type": 0,
        "name": "文本名称",
        "text": {
          "value": "文本"
        }
      },
      {
        "type": 1,
        "name": "网页名称",
        "web": {
          "url": "http://www.test.com",
          "title": "标题"
        }
      },
      {
        "type": 2,
        "name": "测试app",
        "miniprogram": {
          "appid": "wx8bd80126147dFAKE",
          "pagepath": "/index",
          "title": "my miniprogram"
        }
      }
    ]
  }
}

2、复杂场景响应提取

提取errcode 对应的值:res[“errcode”]
提取 title 对应的值:res[“extattr”][“external_profile”][“external_attr”][1][“web”][“title”]

3、JSONPath 简介

在 JSON 数据中定位和提取特定信息的查询语言。
JSONPath 使用类似于 XPath 的语法,使用路径表达式从 JSON 数据中选择和提取数据。
相比于传统的提取方式,更加灵活,并且支持定制化。
提取errcode 对应的值:$.errcode
提取 title 对应的值:$..title

4、JSONPath 语法

符号 描述
$ 查看的根节点对象,用于表示一个json数据,可以是数组或者对象
@ 过滤器,处理的当前节点对象
* 通配符
. 获取子节点
.. 递归搜索,筛选所有符合条件的节点
?() 过滤器表达式,筛选操作
[start:end] 数组片段,区间[start:end],不包含end
[A]或[A,B] 迭代对象下标,表示一个或者多个数组下标
{
  "store": {
    "book": [
      {
        "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      {
        "category": "fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "price": 12.99
      },
      {
        "category": "fiction",
        "author": "Herman Melville",
        "title": "Moby Dick",
        "isbn": "0-553-21311-3",
        "price": 8.99
      },
      {
        "category": "fiction",
        "author": "J. R. R. Tolkien",
        "title": "The Lord of the Rings",
        "isbn": "0-395-19395-8",
        "price": 22.99
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  },
  "expensive": 10
}

获取所有书籍的作者:$.book.author
获取所有作者:$..author
获取 store 下面的所有内容: $.store
获取所有的价格: $..price
获取第三本书: $..book[2]
获取所有包含 isbn 的书籍: $..book[?(@.isbn)]
获取所有价格小于 10 的书:$..price[?(@.price<10)]
获取所有书籍的数量:$..book.length

5、JSONPath 与代码结合

环境安装:pip install jsonpath文章来源地址https://www.toymoban.com/news/detail-401078.html

import jsonpath
import requests

def test_jsonpath():
    data = {"kobe": "py1"}
    r = requests.post("https://www.baidu.com/post", json=data)
    print(r.json())
    #todo jsonpath的返回值,如果找到的话,不管找到多少个结果,返回的结果都是列表;如果没有找到返回False
    print(jsonpath.jsonpath(r.json(),'$..json'))    #列表格式

到了这里,关于接口自动化测试——必须掌握二的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 接口自动化测试Mock Get和Post请求

    Mock可以模拟一个http接口的后台响应,可以模拟request,response  下载 moco-runner-0.11.0-standalone.jar 下载链接: https://pan.baidu.com/s/1bmFzvJPRnDlQ-cmuJ_3iRg 提取码: kpjv 确保安装了jdk,cmd下可以运行java -version 一、模拟不带参的get请求 #代码中的description行可以不写;一般结构为description,requ

    2024年02月13日
    浏览(55)
  • 使用Python接口自动化测试post请求和get请求,获取请求返回值

    目录 引言 请求接口为Post时,传参方法  获取接口请求响应数据 我们在做python接口自动化测试时,接口的请求方法有get,post等;get和post请求传参,和获取接口响应数据的方法; 我们在使用python中requests库做接口测试时,在做post接口测试传参的时候,需要传入请求体,我们把

    2024年02月02日
    浏览(70)
  • 软件测试高频面试题(2023全新版)你必须掌握的面试技巧,包含HR面试、基础面试、JMeter面试、Postman面试、Python面试、自动化化面试、安全性能面试题

    1.1 面试技巧 💡 告诫给位小伙伴,技巧不是投机取巧,起到辅助作用,技术面主要看实力,这里是基于实力之上的技巧 1.2 面试形式 😄 面试形式分为技术面和 HR 面,技术面就是考察你的专业技术水平的,HR 面主要看你这个人的综合素质以及家庭情况符不符合公司要求(一般

    2024年02月11日
    浏览(48)
  • 接口自动化测试——文件上传/下载

    我们在做接口自动化测试的时候,经常会碰到 文件上传接口 和 文件下载接口 。 那么,文件接口跟普通接口有什么区别呢?又该如何实现呢? 〇、前言 文件上传/下载接口 与 普通接口 类似,但是有细微的区别。 如果需要发送文件到服务器,例如:上传文档、图片、视频等

    2024年02月09日
    浏览(44)
  • 接口自动化测试:文件上传/下载(最详细)

    我们在做接口自动化测试的时候,经常会碰到文件上传接口和文件下载接口。那么,文件接口跟普通接口有什么区别呢?又该如何实现呢? 文件上传/下载接口与普通接口类似,但是有细微的区别。 如果需要发送文件到服务器,例如:上传文档、图片、视频等,就需要发送二

    2024年02月07日
    浏览(44)
  • 软件测试Pytest实现接口自动化应该如何在用例执行后打印日志到日志目录生成日志文件?

    Pytest可以使用内置的logging模块来实现接口自动化测试用例执行后打印日志到日志目录以生成日志文件。以下是实现步骤: 1、在pytest配置文件(conftest.py)中,定义一个日志输出路径,并设置logging模块。 2、在测试用例中调用logging模块,输入需要生成的日志信息。 3、运行p

    2024年02月10日
    浏览(58)
  • 接口自动化测试实践指导(下):接口自动化测试断言设置思路

    作者 : 石臻臻 , CSDN博客之星Top5 、 Kafka Contributor 、 nacos Contributor 、 华为云 MVP , 腾讯云TVP , 滴滴Kafka技术专家 、 KnowStreaming 。 KnowStreaming 是滴滴开源的Kafka运维管控平台, 有兴趣一起参与参与开发的同学,但是怕自己能力不够的同学,可以联系我,当你导师带你参与开源! 。 在

    2024年01月18日
    浏览(71)
  • 【接口自动化测试入门】从0到1落地接口自动化测试

    前段时间写了一系列自动化测试相关的文章,当然更多的是方法和解决问题的思路角度去阐述我的一些观点。这篇文章来聊聊新手如何从零到一落地实践接口自动化测试。 早些时候,软件研发交付流程大多遵循V型或W型的瀑布模式,这种模式下只有开发编码完成才会提测进入

    2024年02月04日
    浏览(48)
  • 掌握 Postman Newman:快速启动 API 测试自动化

    Newman 是一个 CLI(命令行界面)工具,用于运行 Postman 中的集合(Collection)和环境(Environment)来进行自动化测试。它允许直接从命令行运行 Postman 集合。根据 Postman 的官方网站,他们将 Newman 描述为 Postman 的命令行 Collection Runner。 通过 Postman Newman ,开发人员可以在代码更改

    2024年02月02日
    浏览(52)
  • Python接口自动化之request请求封装

    我们在做自动化测试的时候,大家都是希望自己写的代码越简洁越好,代码重复量越少越好。那么,我们可以考虑将request的请求类型(如:Get、Post、Delect请求)都封装起来。这样,我们在编写用例的时候就可以直接进行请求了。 我们先来看一下Get、Post、Delect等请求的源码,

    2024年02月13日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包