接口测试 接口自动化测试实践

jeky2017 · 2018年11月07日 · 最后由 小猫咪能有什么坏心眼呢 回复于 2021年01月08日 · 1985 次阅读

     最近在公司做接口测试,原来都是通过 excel 表格管理接口和参数,用 postman 做接口验证,jmeter 也可以做接口测试,之前自己做过一点接口自动化,对这方面有点积累,这样做的效率太低了,自己就想办法去采用工具去解决。
     在这里看了 flystar 的一篇文章,很有收获,自己也想倒腾下,大致的思路是采用数据驱动去做接口测试,数据根据方法名去注入,公司的接口都是采用 http 协议,没有加密和解密,业务接口之前的关联性也比较小,独立接口测试,大部分处理逻辑都是相似的。数据采用 yml 格式,测试框架采用 python 自带的 unittest 框架,测试方法定义模板,依据测试数据自动生成用例,核心代码:

def get_params(func):

    @wraps(func)

    def func_with_params(self, *args, **kwargs):


        class_name = self.__class__.__name__

        method_name = func.__name__

        print('class_name', class_name)

        print('method_name', method_name)

        params = data[class_name][method_name]['params']

        #add module share data process

        class_data_name = 'base_%s_data' % class_name.lower()

        if class_data_name in data[class_name]:

            params['post_data'] = dict(data[class_name][class_data_name]['params']['post_data'], **params['post_data'])


        res = data[class_name][method_name]['return']

        path = data[class_name][method_name]['path']

        self.res = res

        self.path = path

        func(self, *args, **kwargs)

    return func_with_params 

yml 数据格式:

Interface_Test:
    test_file:
        path: '/api/path'
        params:
            {'method': 'POST', 'post_data': {'name':'jeky'},
            }
        return:
            {'code': 'SUCCESS'}
    test_normal:
        path: '/api/login'
        params:
            {'method': 'PUT', 'post_data': {'password':'123'}}
        return:
            {'code': 'SUCCESS'} 

     入口程序根据 yml 文件去遍历测试数据,一级为文件,二级为接口方法,下面是路径,参数和返回值的验证。只需要维护 yml 格式文件就可以根据相应的请求类型 post/put/get 去生成对应模板的测试用例文件,由于检查点的多样性和业务差异,自动生成的脚本文件可以进行根据需要添加新的检查点,比如查询数据库字段进行验证。
     为了达到用例脚本复用的目的,将同类数据文件放在同一个方法下面,post_data 参数可以是一个列表,比如异常密码有很多种情况,写成列表的形式,程序会自动识别 post_data 的类型,如果有多个参数就运行多次用例方法。这里使用的 unittest 的框架,框架会自动识别.py 文件中 test 开头的方法并进行运行.

     下一步是测试数据管理,建立接口测试数据集,初始数据通过接口生成或从数据库构造, 通过这些初始公共数据去渲染测试数据文件,测试数据文件可以按照规则自动化生成,这样测试数据和接口测试方法都可以自动化生成,便于维护和减少编写成本,降低使用门槛。

共收到 3 条回复 时间 点赞

你们的测试数据不需要依赖数据库的吗?
如果数据库数据发生改变了,你这个测试用例应该会得到错误的结果吧

“依据测试数据自动生成用例”,这个让人难以理解。一般都是依据测试用例构造生成测试数据。
最后一段话更难以理解。什么叫初始数据?什么叫初始公共数据?二者什么关系?渲染测试数据文件是什么样的操作过程?

func 方法做了什么什么事情呢

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册