Gatling中如何对接口返回值做URL编码后用于后续请求
在Gatling中对接口返回值进行URL编码并用于后续请求
别担心,这个问题很好解决!Gatling有现成的工具可以处理URL编码,下面是具体的实现步骤:
1. 对获取到的epj_ticket编码并存入Session
你需要修改原脚本里打印Session的exec块,在里面添加编码逻辑,把编码后的票证存入一个新的Session变量(比如encoded_epj_ticket):
.exec(http("request_epj_ticket") .post("https://api.qa1.xxx:8000/v1/yyy/") .header("Authorization", "${authorizationHeader}") .headers(headers_0) .body(ElFileBody("bodies/epj_ticket_request.json")) .check(regex("ticket\" : \"(.*?)\"").saveAs("epj_ticket"))) .exec(session=>{ val rawTicket = session("epj_ticket").as[String] // 方法1:用Gatling内置的URL编码工具(推荐) val encodedTicket = io.gatling.commons.util.StringEscapeUtils.urlEncode(rawTicket) // 方法2:用Java原生工具(需指定UTF-8字符集) // val encodedTicket = java.net.URLEncoder.encode(rawTicket, "UTF-8") println("Raw epj_ticket:") println(rawTicket) println("Encoded epj_ticket:") println(encodedTicket) // 注意:Gatling的Session是不可变对象,必须用set返回新实例 session.set("encoded_epj_ticket", encodedTicket) })
2. 在后续请求中使用编码后的变量
把原来GET请求里的${epj_ticket}替换成我们刚存的${encoded_epj_ticket}即可:
.exec(http("request_hentPasient_1") .get("https://qa1.xxx.html?ticket=${encoded_epj_ticket}") .headers(headers_1) .check(status.is(expected = 200)))
小提醒
- 优先用Gatling内置的
StringEscapeUtils,它已经适配了URL编码的标准场景,不用额外处理字符集问题; - 如果用Java的
URLEncoder,必须指定UTF-8字符集,避免出现编码不一致的bug; - 一定记得用
session.set()返回新的Session实例,不然修改不会生效哦。
内容的提问来源于stack exchange,提问作者Magnus Jensen
相关产品推荐
相关产品推荐

