接口测试 我想请教一个问题,做接口测试,一个接口可能传值不同返回结果不同,那如果我传多个值怎么去判断返回的多个结果是否和预期一样呢,我只会一个的用断言的方式

Dandi · 2017年07月02日 · 最后由 frog2 回复于 2017年07月06日 · 2554 次阅读

最近在学用 jmeter 做接口测试,但是现在遇到问题,测试一个接口的时候必然要测试传入不同的参数返回值不同,比如说提交信息,如果提交重复的手机号就要返回 “手机号重复”,提交正确的则提示成功,所以我先做了参数化处理,参数化之后怎么设置断言判断多个结果是否符合预期呢?

共收到 15 条回复 时间 点赞

使用 或 比较 例如 结果中 断言 包含 字段 a 或者 b

就在 jmeter 中写入 a || b

那不就没办法匹配了么,假如说我有三条数据有三个正确的预期结果,但是呢实际上接口有一种情况的返回数据是错误的,如果使用或那不就没办法判断正确了吗

Dandi 回复

我这返回的是 json 数据,我这是对比对象来比较的, 和 junit 做单元测试一样。 我这直接自己写了个接口, 获取数据的对象, 然后这比较, 因为无非就是 状态值, json 对象的比较

可能我没理解楼主的点,如果你要参数化,请求参数化了,难道断言不能参数化?不过这需要断言形式比较统一,比如说都只是响应内容包含字符串的校验;如果不是很能统一的,那么可能最好还是写 beanshell 断言了

北溟 回复

断言怎么参数化?

Dandi 回复

和请求一样的,CSV Data Set Config 元件或前置用户参数等,你的 “参数化处理” 不是这么做的吗,响应断言里的内容也可以用变量的

响应断言里可以用 ${XXX}的形式使用变量,或者直接用 beanshell 断言,想干什么都行

北溟 回复

我用 csvRead 函数把文件里面的期望结果参数化了,但是我有三行期望结果,参数化之后返回值每次都是跟第一行进行对比,如果使三个返回值分别跟三行预期结果进行对比呢

小郑 回复

beanshell 断言不是用于和数据库中的进行对比吗

Dandi 回复

不是啊,beanshell 能执行 java 代码,基本可以实现任何断言需求

参数化不要那么用,更适合在压测的时候进行参数变化。
你直接写多个 sample,每个 sample 单独断言。我推荐你用这种方法。

如果你非要使用参数化也不是不可以,但是就显得很不合适,我来告诉你有多麻烦。
1.准备一个测试数据

2.定义两个变量

3.因为预设了 4 中情况,创建一个 4 线程的线程组
4.添加一个 sample,入参中使用 ${test},断言中使用 ${assert}
5.执行这个测试。你从结果树种可以看结果。每个线程取一条测试数据作为入参和断言。

Dandi #12 · 2017年07月05日 Author
果冻 回复

那这样是不是传参也没有办法参数化了

Dandi 回复

可以使用 8 位时间戳,jmeter 自带的。
${__time(ddHHmmss, timenow)}
手机号可以写成 138${timenow}

Dandi #14 · 2017年07月05日 Author
果冻 回复

刚开始学,还不知道这个东西,我百度看看,谢谢

果冻 回复

但是用第一种的话,要建相当多的请求;第二种只需要一个请求额

Dandi 关闭了讨论 05月13日 19:05
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册