zoukankan      html  css  js  c++  java
  • 三、主流接口测试框架对比

    一.接口自动化框架需求

    1、接口编写方便。
    2、方便调试接口。
    3、支持数据初始化。
    4、生成测试报告。
    5、支持参数化。

    ###  jemeter

    # 优点

    •   支持参数化
    •   不需要写代码

    # 缺点

    •  创建接口用例效率不高。
    •  不能生成查看每一个接口执行情况的测试报告。

    # 结论

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

    ###HttpRunner

    优点:

    • 基于YAML/JSON格式,专注于接口本身的编写。
    • 接口编写简单
    • 生成测试报告
    • 接口录制功能。

    缺点:

    • 没有编辑器插件对语法校验,容易出错。
    • 官方文档没有详细的说明。
    • 扩展不方便。

     #  总结

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

      doc: https://cn.httprunner.org/quickstart/

    ####gauge

    BDD行为驱动测试框架。

    优点:

    • 行为文件与脚本文件分离,本质上实现了数据驱动。

    • 功能强大灵活,本质上还用Python写接口用例。

    • 自动生成测试报告。

    • VS Code有支持插件

    缺点:

    • 门槛略高,需要了解BDD的用法。

    • 需要会markdworn语法

    行为描述文件:

    ## test post request
    
    * post "http://httpbin.org/post" interface     
         |key  | status_code|     
         |------|-----------|     
         |value1|200        |     
         |value2|200        |     
         |value3|200        |

    测试脚本:

    ……
    
    @step("post <url> interface <table>")
    def test_get_request(url, table):
        values = []
        status_codes = []
        for word in table.get_column_values_with_name("key"):
            values.append(word)
        for word in table.get_column_values_with_name("status_code"):
            status_codes.append(word)
        for i in range(len(values)):
            r = requests.post(url, data={"key": values[i]})
            result = r.json()
            assert r.status_code == int(status_codes[i])

    总结:推荐使用,BDD有一定门槛,看测试人员的学些能力和接受速度。

    doc: https://docs.gauge.org/latest/writing-specifications.html#special-parameter-csv

    #### Unittest+Request+HTMLRunner

    利用现有的框架和库自己定制。

    优点:

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

    缺点:

    • 有一定的学习成本

    数据文件:

    {
        "test_case1": {
            "key": "value1",
            "status_code": 200
        },
        "test_case2": {
            "key": "value2",
            "status_code": 200
        },
        "test_case3": {
            "key": "value3",
            "status_code": 200
        },
        "test_case4": {
            "key": "value4",
            "status_code": 200
        }}
     

    测试用例:

    import requests
    import unittest
    from ddt import ddt, file_data
    
    
    @ddtclass InterfaceTest(unittest.TestCase):
    
        def setUp(self):
            self.url = "http://httpbin.org/post"
    
        def tearDown(self):
            print(self.result)
    
        @file_data("./data/test_data_dict.json")
        def test_post_request(self, key, status_code):
            r = requests.post(self.url, data={"key": key})
            self.result = r.json()
            self.assertEqual(r.status_code, status_code)
     

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

    ~~~~~~

    虫师:

    我花了两天时间整理这些框架,其实重点就是了解HttpRunner 和 gauge 。

    yg

    HttpRunner 没有编辑器插件,本身就是一个YAML/JSON配置文件,所以配置写错了,但只要是合法的YAML/JSON格式,也看不出来,只有运行的过后才知道。就像你用记事本写代码一样,只有运行了才知道代码有没有写错。

    另外,扩展起来也不是特别方便,单独用python实现一些函数:在json文件中

    {"device_sn": "${gen_random_string(15)}"}

    以这样的方式引用gen_random_string() 函数。

    gauge我已经分享过两篇基础文章了,虽然用BDD拿来做接口理念不搭,但并不是不可以,唯一的缺点是用BDD来描述接口行为不合适,其他的都没毛病,可以参数化,断言写起来也简单,测试报告也漂亮,本质上还是用Python实现一些功能,所以非常灵活。

    unittest + requests + HTMLTestRunner是我最熟悉的方案,几乎没什么短板。以前通过这种方案写过很多测试用例,这次把ddt加上似乎更完美了。

     重要:以上内容均来自网络,仅做自己学习使用。

    原地址:https://www.cnblogs.com/fnng/p/9919803.html

  • 相关阅读:
    sqlhelper使用指南
    大三学长带我学习JAVA。作业1. 第1讲.Java.SE入门、JDK的下载与安装、第一个Java程序、Java程序的编译与执行 大三学长带我学习JAVA。作业1.
    pku1201 Intervals
    hdu 1364 king
    pku 3268 Silver Cow Party
    pku 3169 Layout
    hdu 2680 Choose the best route
    hdu 2983
    pku 1716 Integer Intervals
    pku 2387 Til the Cows Come Home
  • 原文地址:https://www.cnblogs.com/youzaijiang/p/10601977.html
Copyright © 2011-2022 走看看