【03】霍格沃兹测试开发学社技术学习笔记之服务端接口测试

# 服务端接口测试

接口测试场景

场景

测试工具

测试类型工具价值
接口抓包Charles,Fiddler,TCPdump,mitmproxy抓包工具可以获取app的数据包
接口测试postman接口调试工具,学习成本低,直接安装即可使用
接口自动化测试requests、restAssured用于接口自动化测试的Java、python第三方库,需要与对应编程语言结合使用
性能测试Jmeter性能测试工具

示例

环境:python 3.10,pycharm工具,Request 框架

单接口请求
import requests
# 第一种方式
requests.get(url)
# 第二种方式
requests.request("get", url)
请求加参数
import requests
header = {"User-Agent": "hogwarts"}
url = "https://httpbin.ceshiren.com/get"
# 定制请求头信息
r = requests.get(url, headers = header)
print(r.json())

请求参数化

import requests
param = {"name": "ad", "class": "hogwarts"}
url = "https://httpbin.ceshiren.com/get"
r = requests.get(url, params = param)
print(r.json())

请求发送raw

payload = {'some': 'data'}
r = requests.post(url, data=json.dumps(payload))

发送json

payload = {'some': 'data'}
r = requests.post(url, json=payload)

发送xml

payload = "<xml><a>1</a></xml>"
headers = {'Content-Type': 'application/xml'}
r = requests.post(url, data=payload, headers=headers)

xml的构造

from xml.etree import ElementTree as ET

def test_xml():
    a = ET.Element("a")
    b = ET.SubElement(a, "b")
    c = ET.SubElement(b, "c")
    c.text = "c text"
    c.set("c1", "1")
    old = ET.tostring(a)

    c2 = a.find('b/c')
    c2.set('c1', "3")
请求头含义
属性含义
Content-Type内容类型
host发出请求的页面所在的域
User-Agent浏览器的用户代理
响应结果类型
属性含义
r.status_code响应码
r.url编码之后的请求的 URL
r.content字节流形式的响应
r.raw原始响应内容
r.json()JSON 解码后的响应内容
断言
  1. assert
  2. 复杂断言
    1. JSONPath:解析 JSON 数据的表达语言,与 XPath 表达式语言类似。
    2. JSONSchema
    3. 自行编写解析算法
XPathJSONPath描述
/$根节点
.@现行节点
/. or []取子节点
//不管位置,选择所有符合条件的条件
**匹配所有元素节点
[][]迭代器标示(可以在里面做简单的迭代操作,如数组下标,根据内容选值等)
[,]
[]?()支持过滤操作
n/a()支持表达式计算
()n/a分组,JsonPath 不支持

示例

1. 从根节点开始的任意层级寻找 posts
"$..posts"
$ 根节点
… 任意层级
posts posts 节点

2. 从根节点的孩子节点寻找 tags
"$.tags"
3. [?(@.username == ‘xxx’] 寻找 username 为 xxx 的数据
$..posts[?(@.username == 'xxx']
4. and 表示并且
$..posts[?(@.username == 'xxx' and @.created_at == '2020-09-27')]

import requests
from jsonpath import jsonpath


def test_json_path():
    r = requests.get("https://ceshiren.com/categories.json")
    name_list = jsonpath(r.json(), '$.category_list.categories[0].name')
    assert name_list[0] == '提问区'
    name_list = jsonpath(r.json(), "$..name")
    assert '提问区' in name_list

XML 断言

from requests_xml import XMLSession

session = XMLSession()

r = session.get('https://www.nasa.gov/rss/dyn/lg_image_of_the_day.rss')

r.xml.links

XPath 断言

from requests_xml import XMLSession

session = XMLSession()

r = session.get('https://www.nasa.gov/rss/dyn/lg_image_of_the_day.rss')

r.xml.links

item = r.xml.xpath('//item', first=True)

print(item.text)

xml解析

import xml.etree.ElementTree as ET

root = ET.fromstring(countrydata)

root.findall(".")

root.findall("./country/neighbor")

root.findall(".//year/..[@name='Singapore']")

root.findall(".//*[@name='Singapore']/year")

代理配置

import requests

proxies = {
  'http': 'http://10.10.1.10:3128',
  'https': 'http://10.10.1.10:1080',
}

requests.get('http://example.org', proxies=proxies)

cookie处理

s = requests.Session()

r = s.get('https://httpbin.org/cookies', cookies={'from-my': 'browser'})
print(r.text)
# '{"cookies": {"from-my": "browser"}}'

r = s.get('https://httpbin.org/cookies')
print(r.text)
# '{"cookies": {}}'

form请求

import requests
def test_form():
    payload = {'key1': 'value1', 'key2': 'value2'}
    r = requests.post("http://127.0.0.1:7777/post", data=payload)

超时处理

requests.get('https://github.com/', timeout=0.001)

文件上传测试

url = 'https://httpbin.org/post'
files = {'file': open('report.xls', 'rb')}

r = requests.post(url, files=files)

面试 | 今日头条测试开发岗位面试题目回顾_霍格沃兹测试开发学社的博客-CSDN博客 9

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值