最近在做接口自动化测试,采用的是Robot Framework的框架,个人觉得这个框架很鸡肋,还不如直接使用Python来的巧,不过它也有好的地方,就是支持中文关键字,也就是说只要有人封装好了方法,不懂代码的人员也可做自动化测试哈。
其实接口的自动化测试并不复杂,我在这里不赘述底层的实现原理,直接上一个例子给大家看看,接口自动化测试说到底就是让你的程序自动发出请求,先看看的请求体,请求方式是post,
[
{
"levelType": 1,
"cnName": "tag_auto",
"enName": "yuany",
"tagUsage": "yuany",
"description": "yuany",
"compliance": 1,
"categoryId": "354720323118071809",
"dataType": null,
"validValues": null,
"updatePeriod": null,
"standardValues": null,
"calcType": 1,
"computeLogic": null,
"filterRule": null,
"defineMethod": 1,
"sql": null,
"factTagRelations": [
{
"relationCnName": "商品总表",
"relationEnName": "sum_goods",
"relationType": "dim",
"sourceTableName": "edw_dim_sum_goods",
"sourceTableId": "347432694500589568",
"sourceFieldName": "goodno",
"sourceFieldType": "string"
}
],
"businessObjectId": "354720317573201920"
}
]
这个接口是创建一个标签,业务层面是可以批量创建标签的,所以最外层是数组[],如果数组中又多个字典元素,就可以批量创建标签了。
再来谈谈怎么样修改这个请求体的内容呢,那我们为什么要修改呢?如果不修改,意味着你每次发的请求都是一样的,创建的标签也就是一样的了,业务层面可能会校验标签的名称不能重复等等,于是你就会失败,改变其实就是要解决依赖,让你的自动化程序独立,尽量不依赖其它的接口和数据,在这个接口里面我们需要解决的依赖主要有:
第一类: cnName, enName,tagUsage,description,这一类是需要你每次都填写的,直接用python自动生成随机字符串即可,
第二类:categoryId,businessObjectId,第一个是标签层级,第二个是实体ID,业务需求是,标签需要建在某一个实体的某一级标签层级下,就是说你先要确定标签要创建的路径,思路是这样的,先确定实体,比如就创建在最近更新的实体下,这里就可以用sql查出这个实体ID,在根据实体ID查出该实体有哪些标签层级,再确定一个层级,比如说最近创建的层级,于是乎想要的两个数据都通过sql找到了,
第三类:
"factTagRelations": [
{
"relationCnName": "商品总表",
"relationEnName": "sum_goods",
"relationType": "dim",
"sourceTableName": "edw_dim_sum_goods",
"sourceTableId": "347432694500589568",
"sourceFieldName": "goodno",
"sourceFieldType": "string"
}
],
relation开头的三个通过接口获得的,source开头的四个是通过另一个接口获得的,这两组数据都只能通过接口获得,用sql查询是不方便的,涉及微服务之间的跨库查询且逻辑复杂,所以我们调用接口,然后解析接口返回的数据,再取出我们想要的数据就好了,其它的字段可不填,或者默认值就好了。
重中之重就是修改请求体,可以这样做,把需要修改的字段放在一个列表中,如KK=["categoryId","businessObjectId","relationCnName","relationEnName","relationType","sourceTableName", "sourceTableId","sourceFieldName", "sourceFieldType"],把对应的值放在另外一个列表中,顺序要对准,VV=["1","2","3","4","5","6","7","8","9"],然后用python定义一个函数去循环修改这个字典至所有字段修改完成,这样每次发出去的请求都是不一样的,最后来看一下该请求对应的python字典,
"新建标签":[{
"levelType": 1,
"cnName": "tag_auto"+strTime,
"enName": "yuany"+strTime,
"tagUsage": "yuany"+strTime,
"description": "yuany"+strTime,
"compliance": 1,
"categoryId": "354720323118071809",
"dataType": None,
"validValues": None,
"updatePeriod": None,
"standardValues": None,
"calcType": 1,
"computeLogic": None,
"filterRule": None,
"defineMethod": 1,
"sql": None,
"factTagRelations": [{
"relationCnName": "商品总表",
"relationEnName": "sum_goods",
"relationType": "dim",
"sourceTableName": "edw_dim_sum_goods",
"sourceTableId": "347432694500589568",
"sourceFieldName": "goodno",
"sourceFieldType": "string"
}],
"businessObjectId": "354720317573201920"
}]
第一次写,整理一下思路,①创建请求json字符串对应的python字典,注意,json中的null对应到Python字典中是None
②确定需要修改的字段以及如何读取(python生成,sql查询,接口返回解析)字段的值,
③自定义函数修改python字典,
④把python字典dumps成json,
⑤把请求发出去,