Software Automation Testing - API自动化测试框架介绍与对比

柔光的暖阳◎ 2022-11-21 15:13 250阅读 0赞

网上看到这篇文章,虽然目前没有深入接触自动化测试,但是觉得对比很详细,在这里转载记录一下。

一、API自动化框架有哪些,他们之间有何区别

format_png

另外,现阶段流行推荐使用:Python+unittest+requests+HTMLTestRunner框架

二、Java Rest-assured框架

Java Rest-assured 是使用代码来实现接口的请求,封装业务流程,对于公司的业务支持比较高,灵活度很强,可以通过代码的方式打造自己公司的接口自动化框架,上手有点难度,需要有 Java 编程基础,才可以使用。

三、Python+Request框架

Python+Request 是使用代码来实现接口的请求,封装业务流程,对于公司的业务支持比较高,可以根据业务的灵活度来定制化开发接口框架,再加上 Jenkins 就可以持续化集成。上手有点难度,需要有 Python 编码的基础,才可以使用。

四、Robot Framework框架

机器人框架是一个通用的开放源码自动化框架,用于验收测试、验收测试驱动开发(ATDD)和机器人过程自动化(RPA)。它具有易于使用的表格测试数据语法,并利用关键字驱动的测试方法。它的测试功能可以通过用Python或Java实现的测试库来扩展,用户可以使用与创建测试用例相同的语法从现有的测试库中创建新的更高级别的关键字。

1、它的优点:

(1)关键字驱动,自定义用户关键字。

(2)支持测试日志和报告生成。

(3)支持系统关键字开发,可扩展性好。

(4)支持数据库操作。

2、它的缺点:

接口测试用例写起来不简洁。

需要掌握特定语法。

  1. *** Settings ***
  2. Library RequestsLibrary
  3. Library Collections
  4. *** Test Cases ***
  5. test_get_event_list # 查询发布会(GET请求)
  6. ${payload}= Create Dictionary eid=1
  7. Create Session event http://127.0.0.1:8000/api
  8. ${r}= Get Request event /get_event_list/ params=${payload}
  9. Should Be Equal As Strings ${r.status_code} 200
  10. log ${r.json()}
  11. ${dict} Set variable ${r.json()}
  12. #断言结果
  13. ${msg} Get From Dictionary ${dict} message
  14. Should Be Equal ${msg} success
  15. ${sta} Get From Dictionary ${dict} status
  16. ${status} Evaluate int(200)
  17. Should Be Equal ${sta} ${status}

总结:不考虑,没人愿意这么写接口用例。

五、HttpRunner框架

HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求,网址:https://cn.httprunner.org/。

1、它的优点:

基于 YAML/JSON 格式,专注于接口本身的编写。

接口编写简单

生成测试报告

接口录制功能

2、它的缺点:

没有编辑器插件对语法校验,容易出错。

官方文档没有详细的说明。

扩展不方便。

  1. [
  2. {
  3. "config": {
  4. "name": "testcase description",
  5. "variables": [ ],
  6. "request": {
  7. "base_url": "http://127.0.0.1:5000",
  8. "headers": {
  9. "User-Agent": "python-requests/2.18.4"
  10. }
  11. }
  12. }
  13. },
  14. {
  15. "test": {
  16. "name": "test case name",
  17. "request": {
  18. "url": "/api/get-token",
  19. "headers": {
  20. "device_sn": "FwgRiO7CNA50DSU",
  21. "user_agent": "iOS/10.3",
  22. "os_platform": "ios",
  23. "app_version": "2.8.6",
  24. "Content-Type": "application/json"
  25. },
  26. "method": "POST",
  27. "date": {
  28. "sign": "958a05393efef0ac7c0fb80a7eac45e24fd40c27"
  29. }
  30. },
  31. "validate": [
  32. {
  33. "eq": [
  34. "status_code",
  35. 200
  36. ]
  37. },
  38. {
  39. "eq": [
  40. "headers.Content-Type",
  41. "application/json"
  42. ]
  43. },
  44. {
  45. "eq": [
  46. "content.success",
  47. true
  48. ]
  49. },
  50. {
  51. "eq": [
  52. "content.token",
  53. "baNLX1zhFYP11Seb"
  54. ]
  55. }
  56. ]
  57. }
  58. }
  59. ]

总结:可以考虑,至于接口数据的初始化可能需要单独处理。

六、Postman+Newman框架

postman + Newman + Jenkins 实现接口自动化框架,postman 方便日常的调试,非常的方便,测试的断言,设置前置条件,环境变量,response 参数提取非常方便,在日常工作中经常使用 postman 进行接口的调试。postman高级的功能可以付费进行定制化,官网文档地址:https://learning.getpostman.com/docs/。

七、Jmeter+Ant框架

Jmeter可以做为接口自动化工具,也可以用于性能测试,在性能测试方面很强大。

1、它的优点:

支持参数化

不需要写代码

2、它的缺点:

创建接口用例效率不高。

不能生成查看每一个接口执行情况的测试报告。

总结:不考虑,接口编写不方便,最主要是不能生成测试报告,如果做接口性能测试的话可以考虑。

八、Vue+Flask&Django框架

Vue+Flask 搭建自己公司的接口测试平台,可以自由定制化自己公司的业务,实现公司特殊需求的接口测试平台。对于测试的开发能力有要求,前端 Vue ,后端 Flask & Django 框架,代码能力要求高,前后端的技术都需要懂。

九、Python+unittest+requests+HTMLTestRunner框架(推荐使用)

利用现有的框架和库自己定制:Unittest+Request+HTMLRunner

1、它的优点:

足够灵活强大:分层测试、数据驱动、测试报告,集成CI…

2、它的缺点:

有一定的学习成本

数据文件:

  1. {
  2. "test_case1": {
  3. "key": "value1",
  4. "status_code": 200
  5. },
  6. "test_case2": {
  7. "key": "value2",
  8. "status_code": 200
  9. },
  10. "test_case3": {
  11. "key": "value3",
  12. "status_code": 200
  13. },
  14. "test_case4": {
  15. "key": "value4",
  16. "status_code": 200
  17. }
  18. }

测试用例:

  1. import requests
  2. import unittest
  3. from ddt import ddt, file_data
  4. @ddtclass InterfaceTest(unittest.TestCase):
  5. def setUp(self):
  6. self.url = "http://httpbin.org/post"
  7. def tearDown(self):
  8. print(self.result)
  9. @file_data("./data/test_data_dict.json")
  10. def test_post_request(self, key, status_code):
  11. r = requests.post(self.url, data={"key": key})
  12. self.result = r.json()
  13. self.assertEqual(r.status_code, status_code)

总结:推荐使用,代码相对简单,功能足够灵活。

十、总结

1、对于单接口,变化不多的可以使用 Postman、Jmeter、HttpRunner框架就可以满足了,需要多个接口组合满足于一些场景的,需要自己编写代码来实现了。

2、对于一些业务场景涉及多个接口的,需要使用代码的方式来查询接口需要的前置信息,如 token、商品ID、订单ID、订单状态,以实现业务场景的接口功能测试。

转自:

https://freeman.blog.csdn.net/article/details/108185036

发表评论

表情:
评论列表 (有 0 条评论,250人围观)

还没有评论,来说两句吧...

相关阅读