StructType
предоставляет методы json
и jsonValue
, которые могут быть использованы для получения json
и dict
представления соответственно и fromJson
, которые могут быть использованы для преобразования словаря Python в StructType
.
schema = StructType([
StructField("domain", StringType(), True),
StructField("timestamp", LongType(), True),
])
StructType.fromJson(schema.jsonValue())
Единственное, что вам нужно, это встроенный модуль json
для синтаксического анализа ввода dict
, который может быть использован StructType
.
Трудно ответить, почему ваш сценарий всегда извлекает значение 1, пока мы не узнаем, что является возвращенным ответом и как ваши Regex Extractor
ведут себя на этом ответе. Также лучше использовать Groovy
в более новых версиях JMeter вместо BeanShell
.
В качестве примера, чтобы помочь вам, я разместил ниже использование Regex Extractor
и Beanshell Preprocessor
для одного из моих старых проектов, который извлекает значения cookie & CSRF
из ответа предыдущего запроса и переходит к следующему просьба.
HTTP-ответ:
{"responseMessage":{"messageObjects":[{"Authorization":"Bearer eyJhbGcxxxxxxxxxx.hsagdshvvdcwfdhwegdwdvbsqmshljkdhlqwkvnAJHFDBVGHWFHJDWBMNEHDJBSMNWBWJLHDKLJWHKJHDHWFVWDJGJKEWWBDNXVWGHDFWJHXKLBSNXVWFXWJEHXKWBXWDVXHGHWCDGXWDXCB0YXNrdcbwdgwegvcbwdvxbscxwfdvcwehgdwebwbvdcwdgckkhecdADGGHWFCVWBDVCGWCWVXNBSVXKWHCWVCBWCJWFGHECWECwgdhwvcwehhebdmnwwjhgnwvdcnbvwgvcwrehcwefnwecwghkevwe.abcdefghijklmnopqrst-poushfgabjwgjhwdvvttrudyqgd-CSGQGBkjgdjwhged","csrfToken":"adganm7ik39i6oclabce54154","ConnectedIP":"127.0.0.1","lastLoginIp":"null"}],"messageString":""},"responseStatus":200}
Извлечение регулярных выражений (имя используемой переменной - «authcsrfkey»)
{"responseMessage":{"messageObjects":\[{"Authorization":(.+?),"csrfToken":"(.+?)"
BeanShell PostProcessor (так как мне нужно объединить два извлеченных значения. Этот постпроцессор находится сразу после экстрактора Regex)
String authkey=vars.get("authcsrfkey_g1");
String csrf=vars.get("authcsrfkey_g2");
String cookie="Authorization=" + authkey + "; csrfToken=" + csrf;
vars.put("cookie",cookie);
[ 1121] BeanShell PreProcessor (будет добавлен в заголовок последующего запроса)
import org.apache.jmeter.protocol.http.control.Header;
sampler.getHeaderManager().add(new Header("Cookie",vars.get("cookie")));