接口测试三剑客 - RTF

707 阅读2分钟

前言

经过了前面多篇文章(参数组合测试利器 - allpairspy & 颜值爆表的 UI 测试报告 - ptest & 全自动黑科技 - testcase-automaker)的铺垫后,我们现在可以隆重介绍 泰斯特独创并经过实践 的接口测试体系三剑客。

  • Requests
    ( 默认读者熟悉此库,若不了解可联系本人再出一篇教学文章 )

  • Testcase-automaker

  • Ptest

本篇文章将会教会读者如何使用上述工具集 RTP 构造完整的接口测试体系。

正文

封装 Requests

首先,我们需要封装一下 Requests 以供集成 ptest

示例代码 (testcase-automaker 中已集成)如下:

from ptest.assertion import assert_equals, failfrom ptest.plogger import preporterimport jsondef request(url, method, json_data=None, session=None, headers=None, assertion=None):    data = ''    status_code = ''    req_json = ''    try:        text = session.request(url=url, method=method, json=json_data, headers=headers).text        if len(text) <= 1000:            preporter.info(text)        req_json = json.loads(text)        status_code = req_json["status"]        data = req_json["data"]        preporter.info('接口返回status为:' + str(status_code))        if len(str(data)) >= 3000:            preporter.info('接口返回data为(限制长度为3000):' + str(data)[0:3000])        else:            preporter.info('接口返回data为:' + str(data))    except BaseException:        if not assertion:            fail('无法获取status或data!')    finally:        if not assertion:            if not status_code == 'ok':                preporter.error('接口响应:' + str(req_json))            else:                assert_equals(status_code, 'ok')            assert_equals(status_code, 'ok')        else:            key = assertion.keys()            assert_equals(assertion[key], req_json[key])        if data is not None:            return data

因所有被测接口规定都是 {'status': 'ok', 'data': ?} 的结构,故封装中写死了部分判断,读者可根据自身业务进行修改

编写 ptest 测试用例

示例代码:

@Test(tags=["regression", "smoke"], timeout=100, description="验证POST/filesUpload接口返回status是否为ok")def files_management_001(self):    tester = http_tester(url=self.url + '/filesUpload', method='POST',                         parameters_structure={'prefix': {'type': 'string', 'range': [self.first_profile_id]},                                               'fileName': {'type': 'string', 'range':                                                            [self.file_name_1, self.file_name_2]},                                               'file': {'type': 'string',  'range': ['test1', 'test2']}},                         session=self.session, headers=self.headers)    tester.exec_test()

代码讲解

其中 http_tester 可在 testcase-automaker 库中导入 ( 建议根据自身业务重新封装 ),

  • testerhttp_tester 的对象;

  • url参数 代表请求的地址;

  • parameters_structure 代表接口的参数结构,后端会根据该结构自动生成基于 pairwise 的用例集;

  • session 代表 request.Session 实例;

  • headers 则代表请求的头部信息;

  • 最后调用 tester.exec_test() 方法则代表执行测试。

测试报告

执行上述代码后我们可以获得如下测试报告:

可以很清晰的看到各个用例的请求参数基于 pairwise 完美生成、并进行了自动化测试。

总结

希望本系列文章能帮助读者深入了解接口测试以及各种高级玩法,期待读者对测试框架的进一步完善与改进。


最后给大家推荐一下我的公众号 「智能测试开发」,欢迎大家扫描下方海报二维码关注公众号,交流~