之前使用python模拟登录过设备也正常获取到了cookie,这次使用jmeter来实现登录,熟悉一下jmeter的各个组件
这次登录用到一些组件,参数的定义,调用外部python脚本,正则表达式提取信息,debug组件调试正则表达式,循环语句,和if逻辑组件判断登录是否成功
给我的感觉像是有一半写代码的感觉,只是这种是图形界面上进行的
整体的脚本如下:
首先创建一个用户变量定义组件,用来存储相关变化的信息,譬如账号密码,ip等等
再创建一个循环控制器,看需要执行多少次,变量的使用方式是${变量名}
进行一个操作,将密码进行两次加密,第一次为md5,第二次为sha
这对于我这个会python不会java的人来说实属头疼,但是方法多的是,使用OS Process Sampler组件来调用系统命令执行python脚本,然后再用正则表达式提取即可
python脚本
#coding:utf-8import hashlib,syspwd = sys.argv[1]pwd1 = hashlib.md5(pwd.encode('utf-8')).hexdigest()pwd2 = hashlib.sha1(pwd1.encode('utf-8'))pwd2 = pwd2.hexdigest()print(pwd2)
Apply to:应用范围
要检查的响应字段:样本数据源。
引用名称:其他地方引用时的变量名称,我这里写的passwordsha,可自定义设置,引用方法:${passwordsha}
正则表达式:正则表达式
模板:用于从找到的匹配项创建字符串的模板。这是一个带有特殊元素的任意字符串,用于引用正则表达式中的组。引用组的语法是:' $ 1 $ '引用组1,' $ 2 $ '引用组2,等等。$ 0 $引用整个表达式匹配的内容。
匹配数字:正则表达式匹配数据的所有结果可以看做一个数组,匹配数字即可看做是数组的第几个元素。-1表示全部,0随机,1第一个,2第二个,以此类推。若只要获取到匹配的第一个值,则填写1
缺省值:匹配失败时的默认值。可以不写。若需用于后续逻辑判断,可简单写为 ERROR
实在不知道怎么写模板和匹配数据那么就直接写$0$和1,在debug中会输出所有信息,然后自己去选择正确的信息
然后提交数据还需要一个token值,是访问/login/mainbody获取到的,那么添加一个http请求和请求头,和两个正则提取器提取登录前的cookie和token
登录的所需要的参数君依旧获取到了,那么进行登录,添加一个请求和请求头,将获取到的cookie加入到请求头中,token加入到post参数中
添加一个登录后的响应判断,如果其中跳转页面是/entranc/jump则登录成功,否则失败,然后正则提取这个登录后的跳转地址,用作if控制器的判断,再提取服务器返回的登录后的cookie值
添加一个登录后的if逻辑控制器判断是否正常登录了,则进行状态的获取,否则不进行之后的操作,这里面只支持写true和false,不能直接写语句
"${login_result}"=="https://${dut_ip}/entrance/jump"
这样子是不行的,所以需要借助函数__groovy,或者__jexl3
${__groovy("${login_result}"=="https://${dut_ip}/entrance/jump",)}
最后添加登录后页面的访问,获取最新的cookie和token值
添加结果树查看到状态页面访问成功,登录成功