HTTP 接口测试很简单,不管工具、框架、还是平台,只要很的好的几个点就是好工具。
- 测试数据问题:比如删除接口,重复执行还能保持结果一致,必定要做数据初始化。
- 接口依赖问题:B 接口依赖 A 的返回值,C 接口依赖 B 接口的返回值。
- 加密问题:不同的接口加密规则不一样。有些用到时间戳、md5、base64、AES,如何提供种能力。
- 断言问题:有些接口返回的结构体很复杂,如何灵活的做到断言。
对于以上问题,工具和平台要么不支持,要么很麻烦,然而框架是最灵活的。
unittest/pytest + requests/https 直接上手写代码就好了,既简单又灵活。
那么同样是写代码,A 框架需要 10 行,B 框架只需要 5 行,然而又不失灵活性,那我当然是选择更少的了,毕竟,人生苦短嘛。
seldom 适合个人接口自动化项目,它有以下优势。
- 可以写更少的代码
- 自动生成 HTML/XML 测试报告
- 支持参数化,减少重复的代码
- 支持生成随机数据
- 支持 har 文件转 case
- 支持数据库操作
这些是 seldom 支持的功能,我们只需要集成 HTTP 接口库,并提供强大的断言即可。seldom 2.0
加入了 HTTP 接口自动化测试支持。
Seldom 兼容 Requests API 如下:
seldom | requests |
---|---|
self.get() | requests.get() |
self.post() | requests.post() |
self.put() | requests.put() |
self.delete() | requests.delete() |
Seldom VS Request+unittest
先来看看 unittest + requests 是如何来做接口自动化的:
import unittest
import requests
class TestAPI(unittest.TestCase):
def test_get_method(self):
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=payload)
self.assertEqual(r.status_code, 200)
if __name__ == '__main__':
unittest.main()
这其实已经非常简洁了。同样的用例,用 seldom 实现。
# test_req.py
import seldom
class TestAPI(seldom.TestCase):
def test_get_method(self):
payload = {'key1': 'value1', 'key2': 'value2'}
self.get("http://httpbin.org/get", params=payload)
self.assertStatusCode(200)
if __name__ == '__main__':
seldom.main()
主要简化点在,接口的返回数据的处理。当然,seldom 真正的优势在断言、日志和报告。
har to case
对于不熟悉 Requests 库的人来说,通过 Seldom 来写接口测试用例还是会有一点难度。于是,seldom 提供了har
文件转 case
的命令。
首先,打开 fiddler 工具进行抓包,选中某一个请求。
然后,选择菜单栏:file
-> Export Sessions
-> Selected Sessions...
选择导出的文件格式。
点击next
保存为demo.har
文件。
最后,通过seldom -h2c
转为demo.py
脚