先来看看unittest + requests 是如何来做接口自动化的:
导入unittest和requests包
已经非常简洁,甚至我觉得这几行代码敲下来,比postman\JMeter之类的工具更加简单,效率更高。
同样的用例,用seldom实现
个人使用过程中,觉得seldom强大在于优秀的测试数据和方便的校验。还有强大的数据驱动,文件驱动。
json文件如下:
{
"add_guest": [
["查询成功", "1","success"],
["查询成功", "0","success"]
]
}
报告生成也是他的优势之处,不需要在找额外的htmltestrunner来去生成报告。
断言接口返回的数据是我们在做接口自动化很重要的工作。
例如下面的接口:
payload = {‘name‘: ‘tom‘, ‘hobby‘: [‘basketball‘, ‘swim‘]}
r = requests.get("http://httpbin.org/get", params=payload)
print(r.json())
{
"args": {
"hobby": [
"basketball",
"swim"
],
"name": "tom"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.25.0",
"X-Amzn-Trace-Id": "Root=1-605b562f-5746980d5fa5ce5513f20310"
},
"origin": "113.87.13.41",
"url": "http://httpbin.org/get?name=tom&hobby=basketball&hobby=swim"
}
我的目标是断言name
和 hobby
部分的内容。
unittest + requests的写法。
import unittest
import requests
class TestAPI(unittest.TestCase):
def test_get_method(self):
payload = {‘name‘: ‘tom‘, ‘hobby‘: [‘basketball‘, ‘swim‘]}
r = requests.get("http://httpbin.org/get", params=payload)
ret = r.json()
self.assertEqual(ret["args"]["hobby"], [‘basketball‘, ‘swim‘])
self.assertEqual(ret["args"]["name"], ‘tom‘)
假设接口返回的 basktball
、swim
顺序反了,断言就会失败,但其实这个列表可以是无序的。
再来看看seldom中的断言。
import seldom
class TestAPI(seldom.HttpRequest):
def test_get_method(self):
payload = {‘name‘: ‘tom‘, ‘hobby‘: [‘basketball‘, ‘swim‘]}
self.get("http://httpbin.org/get", params=payload)
assert_json = {‘args‘: {‘hobby‘: [‘swim‘, ‘basketball‘], ‘name‘: ‘tom‘}}
self.assertJSON(assert_json)
将你要检查的字段写出来,层级关系是正确的即可,上面特意对调了 basktball
、swim
的位置。
原文:https://www.cnblogs.com/testling/p/15222470.html