最近在学用 jmeter 做接口测试,但是现在遇到问题,测试一个接口的时候必然要测试传入不同的参数返回值不同,比如说提交信息,如果提交重复的手机号就要返回 “手机号重复”,提交正确的则提示成功,所以我先做了参数化处理,参数化之后怎么设置断言判断多个结果是否符合预期呢?
使用 或 比较 例如 结果中 断言 包含 字段 a 或者 b
就在 jmeter 中写入 a || b
那不就没办法匹配了么,假如说我有三条数据有三个正确的预期结果,但是呢实际上接口有一种情况的返回数据是错误的,如果使用或那不就没办法判断正确了吗
我这返回的是 json 数据,我这是对比对象来比较的, 和 junit 做单元测试一样。 我这直接自己写了个接口, 获取数据的对象, 然后这比较, 因为无非就是 状态值, json 对象的比较
可能我没理解楼主的点,如果你要参数化,请求参数化了,难道断言不能参数化?不过这需要断言形式比较统一,比如说都只是响应内容包含字符串的校验;如果不是很能统一的,那么可能最好还是写 beanshell 断言了
和请求一样的,CSV Data Set Config 元件或前置用户参数等,你的 “参数化处理” 不是这么做的吗,响应断言里的内容也可以用变量的
响应断言里可以用 ${XXX}的形式使用变量,或者直接用 beanshell 断言,想干什么都行
我用 csvRead 函数把文件里面的期望结果参数化了,但是我有三行期望结果,参数化之后返回值每次都是跟第一行进行对比,如果使三个返回值分别跟三行预期结果进行对比呢
参数化不要那么用,更适合在压测的时候进行参数变化。
你直接写多个 sample,每个 sample 单独断言。我推荐你用这种方法。
如果你非要使用参数化也不是不可以,但是就显得很不合适,我来告诉你有多麻烦。
1.准备一个测试数据
2.定义两个变量
3.因为预设了 4 中情况,创建一个 4 线程的线程组
4.添加一个 sample,入参中使用 ${test},断言中使用 ${assert}
5.执行这个测试。你从结果树种可以看结果。每个线程取一条测试数据作为入参和断言。
可以使用 8 位时间戳,jmeter 自带的。
${__time(ddHHmmss, timenow)}
手机号可以写成 138${timenow}