接口自动化参数化传参,用例怎么设计(断言怎么设计)

场景:有一个新增/编辑数据的接口,有50个参数,假设针对每个参数设计五个测试用(实际情况中不止),在不考虑参数之间的依赖关系的情况下,至少就有250条用例,这种情况下,肯定是需要使用参数化来编写自动化用例,在这种情况下怎么设计用例的断言呢?
疑问:
1、断言的颗粒度(很多小公司就只有那么一两个人在搞自动化,没有标准,也没有参考的东西,什么东西都是自己定)
2、这种情况下用例怎么设计,是写一个测试用例,还是说根据某种条件分为多个测试用例
3、yaml、json、excel、csv,这几种方式那种更优,或者说他们分别适合什么样的场景,例如,上面这个场景适合使用什么?我个人目前算是用的json。如上述场景下,我是将请求体放到一个json文件作为源数据,然后使用python去读取json文件,用字典的方式去修改想要测试的字段,一个接口的数据文件还是有上百行代码。如果参数少的接口,直接用python定义一个字典,然后去修改字典。把修改过的字典转成json格式存到列表,代码如下
import json

test_data = {‘id’: None, ‘name’: ‘test’, ‘age’: 18}

def body():
list_data = []
test_data[‘name’] = ‘’
list_data.append(json.dumps(test_data).encode(encoding=‘utf-8’))
test_data[‘name’] = ‘123455’
list_data.append(json.dumps(test_data).encode(encoding=‘utf-8’))
test_data[‘name’] = ‘@!#!$%#^&’
list_data.append(json.dumps(test_data).encode(encoding=‘utf-8’))
test_data[‘name’] = ‘测试’
list_data.append(json.dumps(test_data).encode(encoding=‘utf-8’))
return list_data
不知道这种方法是否可取

1 个赞

来自小白的个人想法

  • 首先我理解的自动化的意义,并不是说所有的用例必须要遍历通过,完全替代手工测试,而是在正式测试之前,最大化的减少不必要的阻塞性等严重问题,那么用例的设计就只需要覆盖预测试或一级用例,一些非阻塞性的和异常测试用手工来就可以了;
  • 其次,50个参数的接口比较特殊了。首先这些字段里面应该存在必填和非必填,那么闲剔除非必填项,一般不填直接使用默认参数,再根据项目提取一些可能引起阻塞或是严重缺陷的重要字段,进行针对性测试;
  • 针对断言颗粒度的话,那么要参考接口请求的返回值了。比如我们公司接口返回格式基本是固定的,status_code,msg,data。我这里做的是三步断言,status_code第一层,msg第二层,data中的total元素第三层,因为我们公司返回的数据量较大,所以并没有做内容的详细断言,仅供参考;
  • 那么最后,个人建议将用例拆开,把需要测试的重点字段每个字段当做一条用例,进行参数化。这步可以写个公共方法或类,每条用例复用。如果放在一条用例里面,不仅代码繁杂,逻辑难理,还不方便维护,而且用例的配置也会写的很复杂。

@seveniruby
思寒老师可以解答下吗

首先说下这个情况发生的背景,多数都是一些国企部门当年搞服务的时候留下的技术债。一直没拆分重构导致形成了也给庞大的接口服务。他本质是很多功能的大杂烩。也不排除有一些接口的确是参数多。他这个接口接口后面有非常重的逻辑,做的好点的可能会路由到了其他的服务模块拿回结果做聚合

断言通常分2种情况

  • 根据业务编写断言。这个的确是需要的。但是不要在一个脚本里去断言所有的。而是根据功能、分开用例,每个用例只断言自己关注的数据即可。
  • 断言使用算法来做,比如新老版本之间进行diff,跨环境之间进行diff
  • 拆分用例是需要的。有必要的话,测试数据也尽量拆分。不要互相干扰。
  • 根据业务功能拆分用例即可

如果你用例清晰了,那么用什么格式都是可以的。 所有格式之都有自己的特点。整体推荐使用yaml。你用json也是可以的。不是最佳的,也影响不大。

这个方式也不够好,你需要做一个自己的造数的工具。原始数据类似这样

- template: {‘id’: None, ‘name’: ‘test’, ‘age’: 18}
- name: [a, b, c]
- age: [16, 18, 20, 55]

根据这份源数据,你用笛卡尔积或者正交法,去生成你想要的各种排列组合。然后使用参数化用例去生成所需要的各种测试用例

2 个赞