如何让Groovy的httpRequest接受404状态码以避免Hudson构建失败?
解决Groovy/Hudson中HTTP请求404导致构建失败的问题
我之前在Jenkins里用HTTP Request插件写集成测试时也碰到过一模一样的问题——默认情况下插件只会把100-399之间的状态码当成“成功”,所以404会直接触发构建失败。其实解决起来很简单,只需要显式指定允许的响应状态码就行,给你两种实用方案:
方案1:直接指定接受404状态码
在httpRequest调用里添加validResponseCodes参数,把404加入允许的范围。如果你想保留正常的成功响应码(100-399)同时接受404,可以这么写:
def testID = "fakeID" def response = httpRequest( acceptType: "APPLICATION_JSON", contentType: "APPLICATION_JSON", customHeaders: [[name: 'Authorization', value: token]], url: server + port + "/exams" + testID, validResponseCodes: '100-399,404' // 保留正常成功码,同时接受404 )
如果你的测试只需要验证404这一种场景,也可以直接写validResponseCodes: '404',这样只有返回404时才会被判定为成功。
方案2:手动验证状态码(灵活度更高)
如果需要在拿到响应后做更多逻辑判断,比如根据状态码分支处理,可以先允许所有状态码避免构建直接失败,再手动校验返回值:
def testID = "fakeID" def response = httpRequest( acceptType: "APPLICATION_JSON", contentType: "APPLICATION_JSON", customHeaders: [[name: 'Authorization', value: token]], url: server + port + "/exams" + testID, validResponseCodes: '100-599' // 允许所有HTTP状态码,防止构建直接失败 ) // 手动断言状态码是否符合预期 assert response.status == 404 : "测试失败:预期返回404,实际返回${response.status}"
这个方案适合同时测试多种状态码场景的集成用例,比如既测有效ID返回200,又测无效ID返回404的情况。
核心逻辑就是:httpRequest的validResponseCodes参数默认值是100-399,只要修改这个参数,把你需要的状态码(或范围)加进去,插件就不会再因为404标记构建失败了。
内容的提问来源于stack exchange,提问作者Nebulosar
相关产品推荐
相关产品推荐

