在系统项目中,登陆界面会有随机生成的验证码,在接口测试过程中,要如何获取这个验证码呢?
Jmeter 登录接口测试,怎么获取页面随机生成的验证码?
在系统项目中,登陆界面会有随机生成的验证码,在接口测试过程中,要如何获取这个验证码呢?
Jmeter 登录接口测试,怎么获取页面随机生成的验证码?
上午好☀️☀️☀️️
本答案参考通义千问
在使用 JMeter 进行接口测试时,如果登录接口需要验证码(如图片验证码或短信验证码),那么直接进行接口测试会遇到“验证码不匹配”的问题。为了绕过这个限制,我们需要通过以下方式获取并验证验证码:
验证码通常由服务器端生成,并返回给前端页面展示。在接口测试中,若没有正确的验证码,请求将被拒绝。因此,我们需要:
Content-Type 为 image/png 或 image/jpeg(根据实际接口响应类型)。注意: 如果验证码是通过
/captcha.png接口获取的,可以直接访问该 URL。
GET /captcha.png HTTP/1.1
Host: yourdomain.com
import java.io.FileOutputStream
import java.io.InputStream
import org.apache.jmeter.samplers.SampleResult
SampleResult result = prev.getResponseData()
InputStream is = new ByteArrayInputStream(result)
FileOutputStream fos = new FileOutputStream("captcha.png")
byte[] buffer = new byte[1024]
int len;
while ((len = is.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
fos.close();
is.close();
重点: 这一步用于调试和查看验证码内容,不能用于自动化识别。
{"username": "test", "password": "123456", "code": "ABCD"}import java.net.URL
import java.io.InputStream
import groovy.json.JsonSlurp
// 获取验证码图片(假设已经保存为 captcha.png)
def file = new File("captcha.png")
def imageBytes = file.bytes
def base64Image = Base64.encoder.encodeToString(imageBytes)
// 调用百度 OCR API
def url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"
def params = [
'access_token': 'your_access_token',
'image': base64Image
]
def postBody = params.collect { k, v -> "${k}=${URLEncoder.encode(v, 'UTF-8')}" }.join('&')
def conn = new URL(url).openConnection()
conn.setRequestMethod('POST')
conn.setRequestProperty('Content-Type', 'application/x-www-form-urlencoded')
conn.setDoOutput(true)
conn.getOutputStream().write(postBody.getBytes('UTF-8'))
def response = new BufferedReader(new InputStreamReader(conn.getInputStream())).readLine()
def json = new JsonSlurp().parseText(response)
def code = json.words_result[0].words
// 将识别到的验证码存入变量
vars.put("captcha_code", code)
重点: 自动识别验证码依赖于 OCR 技术,准确率可能不高,适用于简单验证码。
{"username": "test", "password": "123456", "code": "${captcha_code}"}发送请求获取验证码图片
/captcha.png)。保存验证码图片(可选)
手动输入验证码(适用于测试环境)
自动识别验证码(高级方案)
将验证码传入登录接口
| 工具 | 用途 | |------|------| | JMeter | 接口测试、验证码获取 | | Postman | 快速测试接口 | | Tesseract OCR | 开源 OCR 工具 | | 百度 OCR | 商业 OCR 服务 |
如需进一步帮助,欢迎提供具体的验证码接口地址或截图,我可以帮你定制化脚本!