目录:
Run-time setting的设置
1、Run Logic运行逻辑 脚本如何运行的,每个action和action之间运行的先后顺序就是在这里设置的 Number of Iterations:只为Run上设置迭代次数(运行的次数),不为Init,End设置。
2、设置日志
这里设置为“提交的参数信息”和“服务器端返回的日志信息”
检查点:检查点的作用是什么?
使用检查点时应该注意以下几点:检查对象是web服务器返回页面的全部HTTP协议数据,不单单指页面能够预览的内容或相关页面的源文件,还包括HTTP头信息。
检查过程就是对指定范围(HTTP头或实体数据)内容进行查找的过程 检查内容应该是一些关键的文本或图像,以便标识服务器返回的页面是否正确。
常用的检查点有:文本检查点和图像检查点
文本检查点:主要通过检查web服务器返回的内容是否存在指定文本来判断返回的页面是否正确。比如检查登录之后是不是有用户名(jojo)
文本检查点的两个函数实现:
- web_find和web_reg_find区别:web_find在请求完成之后进行检查;
- web_reg_find是注册型函数,需要在请求之前对预期返回的结果进行检查 。
方法:在登录之前一行,鼠标右击,选择insert—>new step,在输入框输入web_reg_find,点击OK按钮
进行脚本的编译:
显示:No errors detected
运行脚本:
在日志里面可以看到name_count=0,说明没有登录成功,那是为啥呢?
来看脚本的登录部分,用户名和密码是登录时输入的,但是userSession是怎么来的呢?
在回放的日志里面,输入“userSession”,又找到了一个,不过这次的值和上一次脚本里面的值已经不一样了,说明这个值是动态产生的
那怎么办呢?这个时候就需要用到关联,关联又怎么做呢?
什么是关联?所谓的关联就是把脚本中某些写死的数据,转变成获取服务器返回的动态的数据,然后再请求到服务器进行验证
一般关联操作步骤可以描述如下:
(1)从服务端返回的数据中选取需要进行关联的数据
(2)将该数据存入脚本的一个参数中。
(3)将脚本中需要使用该数据的的地方用参数替代 手动关联函数(web_reg_save_param)
在上面回放的日志里面找到了这个值第一次出现的位置,只要双击这一行值,当上面的光标跳转到哪一行,就在这一行的前面加上关联函数就可以了,是不是很简单?
添加关联函数的方法和上面添加函数的方法一样的,就不多写了 在输入框输入web_reg_save_param,双击这一行就可以了
主要的几个值说明:
web_reg_save_param("UserSession", // 关联的变量名称 "LB=value=", //需要关联的左边界 "RB=>\n", //需要关联的右边界,中间就是变化的值 "Ord=1", //当关联的值有多个时,取第几个 "Search=All", //查找的范围 LAST);
再回放脚本,验证,已经找到了一次,说明登录成功了 。
Action.c(26): Registered web_reg_find successful for "Text=jojo" (count=1) [MsgId: MMSG-26364] Action.c(26): Notify: Saving Parameter "name_count = 1".
总结一下关联步骤:
查找函数放到事务外面是为了使事务的响应时间更加的准确,要不查找时间会占用一些事务响应时间
关联其实是对经常变动的值做的,比如session第一次登陆是这个,第二次登陆是另外一个,那么你用第一次登陆的session肯定是不行的,所以我们要怎么去的第二次登陆的session呢,就是关联了,使用关联函数web_reg_save_param_ex或者web_reg_save_param找到左右边界,利用左右边界来确定session的值,这样,我们变动的值对我们就没有影响了,我们也可以使用关联来做判断这就用到了比对函数“”strcmp(字符串1,字符串2):比较连个字符串的大小,直接和你预期的值比对==0,就可以了,token取值也是用这个来解决的
为什么要进行参数化?
模拟一个真实的操作场景
文件参数化
数据库参数化
其他参数化
lr_save_string(“www.baidu.com”,“ip”);//给url地址赋给一个变量ip
//post请求,这个也可以做get请求body直接是空就可以
//下面这种是做接口测试的
web_custom_request("web_custom_request",//步骤名称
"URL={ip}",//请求地址
"Method=POST",//请求方式
"TargetFrame=",//frame名称
"Resource=1",//
"Referer=",//
"Mode=HTTP",//
"EncType=",//编码方式application/json ,text/html
"Body=testbody",//json串
LAST);
//web_url:只能用于get请求
//web_submit_data:get,post,提交form表单
// web_custom_request:即可用于get,也可用于post请求,post请求是标准json串
参数化,选中你要进行参数化的参数,右击鼠标,点击replace with a parameter
使用记事本记录参数话的话要鼠标光标最后要放在最后一行的下一行的最前面
添加完之后保存点击关闭,OK然后参数就变成这个样子了
参数中取值的方法意义在下表中展示
如果是两个相关联的函数比如说是账号和密码,那么设置完账号的参数化之后,再设置密码的参数化
当token中有“+”或者“=”时,这时候使用关联是不好用的,可以把token字符串进行转换,把他转换成纯文本,使用一下这个函数
web_convert_param("Plaintext", "SourceEncoding=HTML",
"TargetEncoding=URL", LAST );
web_convert_param()
//将HTML文本转换为纯文本或URL,或者将纯文本转换为URL
lr_save_string(lr_eval_string("{token}"),"tokenUTF8");
//将token进行urlcode编码
web_convert_param(
"tokenUTF8", //参数的名称,转换后的字符串被保存在该参数
"SourceEncoding=PLAIN", //编码的数据类型HTML、URL、plain
"TargetEncoding=URL", //目标数据的编码类型
LAST );
//乱码转换为中文
步骤:
1、对返回的中文进行关联
2、用lr_convert_string_encoding()函数进行转换,后面引用
例如:
lr_convert_string_encoding(lr_eval_string(“乱码”),“utf-8”,NULL,“resetpaywd_msg”);
lr_error_message(lr_eval_string("{resetpaywd_msg}"));
中文传输信息也需要转码,转成lr能识别的
lr_convert_string_encoding(lr_eval_string(“中文”),NULL,“utf-8”,“resetpaywd_msg”);
lr_error_message(lr_eval_string("{resetpaywd_msg}"));//这个地方输出的是乱码
这个上面不同的地方是NULL的位置不同
LR11的和JDK1.6 32配合
LR12和JDK1.7 32配合