jmeterFQA
1问题:适用csv参数化,发送请求时一直读取不到数据或数据乱码
原因:创建的csv文件有问题,没有正确创建csv文件(直接通过xlxs文件修改文件属性,再编辑文件)
解决:准备数据文件,一般以 .csv,.dat ,.txt等结尾的文件,数据之间的分隔符可用 ,或者 tab空格。当以csv文件保存数据时,可以创建xlxs文件编辑数据另存为csv格式
2、jmeter BeanShell PostProcessor创建Map<String,String>逗号出报错
解决:其创建语法与java不一样,Map map= new HashMap();
3、正则表达式的模板选项意义:
$n$。若模板为:$0$,则为整个表达式匹配到的内容,就是包括小括号内跟小括号外的内容,
若模板为:$1$,则对应正则表达式中的第一个(.*?)所匹配的内容
若模板为:$2$,则对应正则表达式中的第二个(.*?)所匹配的内容
若模板为$1$$2$,则把2个(.*?)所匹配的内容拼接起来,即(83EEAA887F1D2F1AA1CDA9E1978109920)
若模板为$-1$,则把全部(.*?)所匹配的内容拼起来
匹配数字:如果匹配到多个数据(返回数组)$0$,随机取一个数据返回,$-1$将全部匹配的数据返回(数组),
4、正则表达式的要检查响应字段意义:
主体: 接口响应主体内容,默认选择此项
信息头:响应头的所有内容
Request Headers:请求头的所有内容
url:是对sample的url进行匹配,也就是查看结果树里请求内容的第一行url,不包含data里的请求参数
响应代码:http响应代码,如101,200,302,404,501等
响应信息:http响应代码对应的响应信息,例如:OK, Found(HTTP/1.1 200 Ok;HTTP/1.1 302 Found)
信息头:响应头的所有内容
Request Headers:请求头的所有内容
url:是对sample的url进行匹配,也就是查看结果树里请求内容的第一行url,不包含data里的请求参数
响应代码:http响应代码,如101,200,302,404,501等
响应信息:http响应代码对应的响应信息,例如:OK, Found(HTTP/1.1 200 Ok;HTTP/1.1 302 Found)
5、jmeter 连接本地的mysql时提示 message from server: "Host '*.*.*.*' is not allowed to connect to this MySQL server"
原因:该问题是由于本地的mysql限制只能localhost登录,且window阻止了3306端口的连接
解决:1、将mysql里的user表(一般在mysql库里)里user为root的host字段从localhost改成%
2、进入window防火墙里将3306添加为例外,控制面板-window防火墙-高级设置-入站规则-新建规则-端口-下一步-特定本地端口设置为3306-下一步
6、变量&属性
A、创建一个属性并赋值:props.put("属性名","属性值");${__setProperty(cookie3,${COOKIE_session})}.setProperty()函数的属性名和属性值不用带引号,否则引号会被当做属性名和属性值的一部分,属性名和属性值之间不能存在空格,否则会被当做属性值的一部分赋值给属性
B、属性访问:${__P(属性名)};${__property(属性名)};prop.get("属性名")
使用${__setProperty()}赋值的属性,如果跨线程且在BeanShell脚本中使用上面方法读取属性则可能读取不到值
vars 只能在档期线程内使用,props 可以跨线程租使用,vars中的变量仅对当前线程组内可见, 跨线程组则需要使用属性。
vars 只能保持String 或者Objec, props 是 Hashtable 对象
vars 只能保持String 或者Objec, props 是 Hashtable 对象
7、参数化
A、${__BeanShell(vars.getObject("result").get(${__Random(1,5,)}).get("id"))}可以将数据库Result variable name变量参数化
B、CSV参数化中文问题--将file=encoding设置为gb2312,标志文件支持中文
8、jmeter-JSR223 PreProcessor-JavaScript-登录场景前端会加密密码,在把加密的密码传到后台,如果要使用jmeter构造登录接口的测试,可以找前端的同学帮助,找到他们要JavaScript的加密工具包,看看他们使用工具包编写的加密js脚本。然后可以使用JSR223 PreProcessor编写JavaScript脚本加密明文密码
例如之前参与的项目,其登录接口密码前端采用的是jsencrypt.js加密,想要测试登录接口的时候测试数据里的密码为明文,经过jmeter加密后,再将密码传输给后台,脚本如下:
load("..\\lib\\ext\\jsencrypt\\bin\\jsencrypt.js");//加载加密工具包,工具包的存在路径填写需要以jmeter的bin目录为起点
var txt= vars.get("password");//此处采取的csv传参,传入明文密码
var crypt = new JSEncrypt.JSEncrypt();//此处构造加密工具包类对象实例,之前使用的是var crypt= new JSEncrypt();会获取不到里面的方法
var PUBLIC_KEY="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCyXtKQzjR0e/QrSZwPb5aX4EELlLDlAB/S3MBOjq/430s3zokRVf1dprWoDEVRe6CnA3C9Xs7E60orOysuxfZ3LFL0M2x35uc84L+R9usGSxMaXSIzGBlrlHdDCTj7236kfSS8zVD9TcAgXxVCR2bX4lcnXb6AYGWPwPnEyHC6dwIDAQAB";
function encrypt(text) {
crypt.setPublicKey(PUBLIC_KEY);
var enc = crypt.encrypt(text);
return enc;
};
log.info("加密前"+txt+"=============加密后==========="+encrypt(txt))
vars.put("passwordEN",encrypt(txt))
var txt= vars.get("password");//此处采取的csv传参,传入明文密码
var crypt = new JSEncrypt.JSEncrypt();//此处构造加密工具包类对象实例,之前使用的是var crypt= new JSEncrypt();会获取不到里面的方法
var PUBLIC_KEY="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCyXtKQzjR0e/QrSZwPb5aX4EELlLDlAB/S3MBOjq/430s3zokRVf1dprWoDEVRe6CnA3C9Xs7E60orOysuxfZ3LFL0M2x35uc84L+R9usGSxMaXSIzGBlrlHdDCTj7236kfSS8zVD9TcAgXxVCR2bX4lcnXb6AYGWPwPnEyHC6dwIDAQAB";
function encrypt(text) {
crypt.setPublicKey(PUBLIC_KEY);
var enc = crypt.encrypt(text);
return enc;
};
log.info("加密前"+txt+"=============加密后==========="+encrypt(txt))
vars.put("passwordEN",encrypt(txt))

浙公网安备 33010602011771号