2021-06-15 23:00 
虫师 
阅读(2
评论(0
编辑 
收藏 
举报

seldom 2.0 让接口自动化测试更简单

HTTP接口测试很简单,不管工具、框架、还是平台,只要很的好的几个点就是好工具。

  1. 测试数据问题:比如删除接口,重复执行还能保持结果一致,必定要做数据初始化。
  2. 接口依赖问题:B接口依赖A的返回值,C接口依赖B接口的返回值。
  3. 加密问题:不同的接口加密规则不一样。有些用到时间戳、md5、base64、AES,如何提供种能力。
  4. 断言问题:有些接口返回的结构体很复杂,如何灵活的做到断言。

对于以上问题,工具和平台要么不支持,要么很麻烦,然而框架是最灵活的。

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()

先来看看unittest + requests是如何来做接口自动化的:

  1. import unittest
  2. import requests
  3. class TestAPI(unittest.TestCase):
  4. def test_get_method(self):
  5. payload = {'key1': 'value1', 'key2': 'value2'}
  6. r = requests.get("http://httpbin.org/get", params=payload)
  7. self.assertEqual(r.status_code, 200)
  8. if __name__ == '__main__':
  9. unittest.main()

这其实已经非常简洁了。同样的用例,用seldom实现。

  1. # test_req.py
  2. import seldom
  3. class TestAPI(seldom.TestCase):
  4. def test_get_method(self):
  5. payload = {'key1': 'value1', 'key2': 'value2'}
  6. self.get("http://httpbin.org/get", params=payload)
  7. self.assertStatusCode(200)
  8. if __name__ == '__main__':
  9. seldom.main()

主要简化点在,接口的返回数据的处理。当然,seldom真正的优势在断言、日志和报告。

对于不熟悉 Requests 库的人来说,通过Seldom来写接口测试用例还是会有一点难度。于是,seldom提供了har 文件转 case 的命令。

首先,打开fiddler 工具进行抓包,选中某一个请求。

然后,选择菜单栏:file -> Export Sessions -> Selected Sessions...

选择导出的文件格式。

点击next 保存为demo.har 文件。

最后,通过seldom -h2c 转为demo.py 脚本文件。

  1. > seldom -h2c .\demo.har
  2. .\demo.py
  3. 2021-06-14 18:05:50 [INFO] Start to generate testcase.
  4. 2021-06-14 18:05:50 [INFO] created file: D:\.\demo.py

demo.py 文件。

  1. import seldom
  2. class TestRequest(seldom.TestCase):
  3. def start(self):
  4. self.url = "http://httpbin.org/post"
  5. def test_case(self):
  6. headers = {"User-Agent": "python-requests/2.25.0", "Accept-Encoding": "gzip, deflate", "Accept": "application/json", "Connection": "keep-alive", "Host": "httpbin.org", "Content-Length": "36", "Origin": "http://httpbin.org", "Content-Type": "application/json", "Cookie": "lang=zh"}
  7. cookies = {"lang": "zh"}
  8. self.post(self.url, json={"key1": "value1", "key2": "value2"}, headers=headers, cookies=cookies)
  9. self.assertStatusCode(200)
  10. if __name__ == '__main__':
  11. seldom.main()

打开debug模式seldom.run(debug=True) 运行上面的用例。

  1. > python .\test_req.py
  2. 2021-04-29 18:19:39 [INFO] A run the test in debug mode without generating HTML report!
  3. 2021-04-29 18:19:39 [INFO]
  4. __ __
  5. ________ / /___/ /___ ____ ____
  6. / ___/ _ \/ / __ / __ \/ __ ` ___/
  7. (__ ) __/ / /_/ / /_/ / / / / / /
  8. /____/\___/_/\__,_/\____/_/ /_/ /_/
  9. -----------------------------------------
  10. @itest.info
  11. test_get_method (test_req.TestAPI) ...
  12. ----------- Request
版权声明:本文为fnng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/fnng/p/14887574.html