本文主要是介绍【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 ETdef 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 解码后的响应内容 |
断言
- assert
- 复杂断言
- JSONPath:解析 JSON 数据的表达语言,与 XPath 表达式语言类似。
- JSONSchema
- 自行编写解析算法
XPath | JSONPath | 描述 |
---|---|---|
/ | $ | 根节点 |
. | @ | 现行节点 |
/ | . 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 jsonpathdef 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 XMLSessionsession = XMLSession()r = session.get('https://www.nasa.gov/rss/dyn/lg_image_of_the_day.rss')r.xml.links
XPath 断言
from requests_xml import XMLSessionsession = XMLSession()r = session.get('https://www.nasa.gov/rss/dyn/lg_image_of_the_day.rss')r.xml.linksitem = r.xml.xpath('//item', first=True)print(item.text)
xml解析
import xml.etree.ElementTree as ETroot = ET.fromstring(countrydata)root.findall(".")root.findall("./country/neighbor")root.findall(".//year/..[@name='Singapore']")root.findall(".//*[@name='Singapore']/year")
代理配置
import requestsproxies = {'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
这篇关于【03】霍格沃兹测试开发学社技术学习笔记之服务端接口测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!