在写接口自动化脚本中,常常遇到需要断言接口响应码,根据我目前经验有遇到以下三种情况,在这三种情况下采取不同的断言处理方式:
(1)接口响应码在response Header中,类似相面红色框中标注出来的Result-Code
断言处理方式:需要先使用正则表达式提取器将响应码提取出来,然后使用beanshell断言处理
注意点:第一:检查的响应字段选择信息头;第二:引用名称注意填写,方便后续的beanshell引用;第三:正则表达式,提取出响应码,.+?是指非贪婪,遇到第一个值就停止,[\s]代表的是空白字符,放在最后可以理解为截止符号
代码块如下:
String code = vars.get("code");//获取接口响应码 log.info("code值为"+code);//将code打印在控制台方便调试 if (null!=code&&code.equals("0")){ //断言为0取样器结果设置为成功 SampleResult.setSuccessful(true); }
(2)接口响应码直接是放在http code中(一般是接口返回成功200、其他业务异常码及系统异常码),也就是跟http请求状态码一样的位置,这种情况比较常见,例如下图红色框部分
处理方式:
- 若断言场景是仅允许一种响应码为真,则只需要使用接口的响应断言进行处理即可:
注意以下几点:第一:要测试的响应字段要选择Response Headers,原因是断言的响应码在这个范围中;第二:一定要勾选上Ignore Status,原因是需要忽略掉http请求返回的响应状态码;第三:匹配规则选择包括,默认是勾选上substring(与匹配类似,比较精确);
第四:需要校验的响应码字段填入要测试的模式
- 若需要处理的断言是可能存在两个及以上的响应码,则需要用到beanshell断言,断言中需要写下列代码:
String code = prev.getResponseCode();//获取接口响应码 log.info("code值为"+code);//将code打印在控制台方便调试 if (null!=code&&code.equals("24900")||code.equals("200")){ //可能存在的断言是24900和200,只要是这两种响应码,取样器最后的结果都设置为成功 SampleResult.setSuccessful(true); }
(3)还有部分接口响应码是放在响应体中,作为响应报文的字段,这种情况处理起来就非常简单了,直接使用响应断言进行处理即可
注意点:测试的响应字段范围选择响应文本,匹配规则可以选择默认的substring,但注意下填入断言的内容必须将空格都必须拼接上
PS:个人经验总结,欢迎兴趣者指正,一起交流讨论