发布新日志

  • json schema 测试

    2017-10-24 08:09:53

        最近在开发接口自动化测试工具时,发现restFull接口测试工具中提供了json schema的测试,特意去了解json schema。

        Json schema 于json 类似于xml schema 于 xml,用于定义如何基于 JSON 格式描述 JSON 数据结构的规范,从而可利用此 数据校验、文档生成和接口数据交互控制等。如果接口返回的数据格式是json,那么我们就可以创建json schema来校验接口返回的数据是否满足要求,可校验必需字段是否返回,字段类型是否正确,值是否满足要求如大小、范围或要求包含某些值等。如此,我们便可实现大部分接口测试用例。

        json schema定义的主要关键字如下( draft 4版本):
    关键字描述
    $schemaThe $schema 关键字状态,这种模式被写入草案V4规范。
    title将使用此架构提供一个标题
    description架构的一点描述
    type我们 JSON 数据类型关键字定义的第一个约束条件:它必须是一个JSON对象
    properties定义各个键和它们的值类型,最小和最大值中要使用JSON文件
    required这样可以使所需的属性的列表
    minimum这是约束的值,并代表可接受的最小值
    exclusiveMinimum如果“exclusiveMinimum”的存在,并且具有布尔值true的实例是有效的,如果它是严格的最低限度的值
    maximum这是约束的值被提上表示可接受的最大值
    exclusiveMaximum如果“exclusiveMaximum”的存在,并且具有布尔值true的实例是有效的,如果它是严格的值小于“最大”。
    multipleOf数值实例有效反对“multipleOf”分工的实例此关键字的值,如果结果是一个整数。
    maxLength字符串实例的长度被定义为字符的最大数目
    minLength字符串实例的长度被定义为字符的最小数目
    patternString实例被认为是有效的,如果正则表达式匹配成功实例

        json schema的经典样例如下:
    {
        "$schema": "http://json-schema.org/draft-04/schema#",

        "title": "Product",

        "description": "A product from Acme's catalog",

        "type": "object",

        "properties": {

            "id": {

                "description": "The unique identifier for a product",

                "type": "integer"

            },

            "name": {

                "description": "Name of the product",

                "type": "string"

            },

            "price": {

                "type": "number",

                "minimum": 0,

                "exclusiveMinimum": true

            }

        },
        "required": ["id", "name", "price"]}

        json schema 校验json字符串是否满足要求,则是通过校验关键字去校验,如required,是否必需,maxItems用于校验数组的大小等,详细请见https://datatracker.ietf.org。所以我们要创建好json schema才能根据要求去校验数据,https://jsonschema.net/#/editor可用于生成json schema不过因google被墙可能无法正常使用,亦可搜索其它生成工具。
  • 接口自动化测试工具研发

    2017-10-13 08:07:58

       此前做接口自动化测试用了不少工具,如selenium、robotframwrok+httplib、soapUI、jmeter等,总是在脚本与数据分离、脚本维护、前置数据及结果校验等问题上不能如意。为此,决定自己研发一个接口自动化测试工具以更好地解决以上问题,并实现测试配置的方法实现可以不同环境运行。

       工具主要分前端界面与执行引擎。前端界面采用BS架构,在浏览器上创建项目、接口定义、测试数据、测试配置以及执行计划等,后端主要是执行引擎,可基于HttpClient、okHttp、rest-assured等封装好的http请求组件(不用自己造轮子,而且在多线程处理及性能上往往不如封装好的组件)。执行时,执行引擎读取测试接口及数据构造http请求,然后再根据测试数据中配置的检查点进行检查,从而完成整个测试过程。

       此时,工具的基本框架已完成,解决脚本与数据分离、脚本维护(只需维护接口定义)问题。前置数据即是用例执行前的初始化动作,目前设计是通过三种方式实现。一、通用数据如账号密码那些则通过自定义的配置项传入,并缓存起来供测试过程中调用(如脚本中通过?{#client_id}方式调用),从而实现在不同环境中运行;二、自定义函数,此主要是与业务相关的,如接口测试在审批某个流程,此前的流程在初始化方法中调用自定义函数完成初始化操作或返回数据给测试用例。函数可实现某个业务操作或直接操作数据库(非测试环境可能不允许),但函数都需要在工具中定义(也曾考虑在前端编写函数存入数据库,执行时再调用,但考虑到函数需要调试,直接在工具中编写调试更方便,由此则出现工具与业务混杂的问题。当然也可将业务相关的迁移到另外一个工具中由测试工具调用,没有将工具产品化的计划就不折腾了)。三、执行其它测试用例作为初始化动作或获取相关数据。 目前三种方式基本可解决前置数据或初始化操作的问题,但测试数据中可能会较多的函数调用或参数调用,没那么直观,而且自定义函数需要一定的编码功能才能完成。

       结果校验也有两种方式实现。一、基本校验:如校验http返回状态码,校验返回数据是否存在(如果返回的是json字符串,建议基于rest-assured 实现执行引擎,此组件已封装有不少校验);二、自定义函数:可通过自定义函数进行业务检查或直接查询数据库方式进行验证,如果返回的是json字符串,可实现校验json schema,这个非常方便校验返回的字段及类型。

       此外,再加上查看测试报告、定时执行以及发送测试结果等辅助功能,工具基本成型。目前工具在试用完善中,待实践验证后或可开源出来供大家参考。
Open Toolbar