LR处理文件上传和下载
文件上传
在业务场景有上传操作时,使用LR能录制到上传操作,代码如下。在录制的原始代码中,Filename的Value是上传的文件名,name的Value是一串文件名的加密串,file的Value也是上传的文件名。
web_submit_data("upload",
"Action=http://dggtsv036-ap.huawei.com/CFS/servlet/upload?ulType=ExcelImport&batchId=&excelType=salesContractUpload&uploadResultId={correlation_uploadresultid}",
"Method=POST",
"EncType=multipart/form-data",
"RecContentType=text/plain",
"Referer=",
"Snapshot=t77.inf",
"Mode=HTTP",
ITEMDATA,
"Name=Filename", "Value={filename}.xlsx", ENDITEM,
"Name=name", "Value={filename_code}.xlsx", ENDITEM,
"Name=file", "Value=D:\\CFSXML\\{filename}.xlsx", "File=yes", ENDITEM,
"Name=Upload", "Value=Submit Query", ENDITEM,
LAST);
首先的问题是如何处理文件名被加密?
对于该问题,先要弄清楚该处的加密是在客户端还是在服务器端加密的,如果不清楚最直接的办法的是询问相关开发或设计人员,也可以在该请求之前的请求响应中去找是否存在此处的文件名加密串,如果在其他请求的响应中找到了这里的文件名加密串,说明是在服务器端加密的,处理方法就是通过关联用变量替代此处的文件名加密串即可。
但如果没有找到或已确认是在客户端加密的要怎么处理呢?
那么期望最简单的办法就是询问开发人员或者是自己尝试,确认此处的加密是否可以直接使用文件名明文,如果可以使用明文直接使用文件名的明文替代加密串即可,我在此处的最后处理方法就是直接使用了文件名的明文替代加密串,结果仍然有效。
那如果不能使用明文只能使用密文该怎么办呢?
这种情况处理起来可能就稍微麻烦些,可以通过开发人员提供的加密函数,通过调用DLL的方法自行对文件名进行相应的加密处理,再用加密的变量替换此处的值,目前我也还没有遇到需要使用调用dll的方式。
这里我在处理完加密的问题后还遇到了文件路径的问题,将上传对应的文件置于脚本目录中,然后脚本在LR的vugen和本机contraller中都能成功运行,但是将该脚本上传到PC(LR11的升级版本)上去跑场景运行时,会报错提示找不到上传的文件,后来发现是因为上传的文件并没有放到执行脚本产生压力的LG机器上,因此工具找不到上传的文件。最终的解决办法是将待上传的文件置于运行该脚本的LG的目录中,并把file的value改为对应的全路径名,问题才得以解决。需要注意的是在PC中运行该脚本的场景中需要确保选择的是存有待上传文件的LG,如果想要实现可以任意分配LG,那么就得把待上传的文件置于每一个LG的相同目录下。
文件下载
对于http协议来说,文件下载也只不过是http的一个请求,并无特别之处,服务器会返回待下载的文件流数据,这里LR中并没有直接的办法获得到下载的文件,而是通过关联的方式,将服务器返回的文件流数据保存起来,再通过函数写入到文件中,即可得到下载的文件。主要代码如下:
//设置参数的最大长度,注意该值必须大于文件的大小
web_set_max_html_param_len("20000");
//获取响应的全部内容,作为文件内容保存
web_reg_save_param("fcontent", "LB=", "RB=", "SEARCH=BODY", LAST);
web_url("viewfile.asp",
"URL=http://www.testage.net/bbs/viewFile.asp?BoardID=25&ID=217",
"Resource=0",
"RecContentType=text/html",
"Referer=http://www.testage.net/bbs/dispbbs.asp?boardID=25&ID=5187&page=1",
"Snapshot=t16.inf",
"Mode=HTML",
EXTRARES,
"Url=viewFile.asp?BoardID=25&ID=217", "Referer=http://www.testage.net/bbs/dispbbs.asp?boardID=25&ID=5187&page=1", ENDITEM,
LAST);
//获取响应中的文件长度
flen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);
if(flen > 0)
{
//以写方式打开文件
if((filedes = fopen("c:\\test.rar", "wb")) == NULL)
{
lr_output_message("Open File Failed!");
return -1;
}
//写入文件内容
fwrite(lr_eval_string("{fcontent}"), flen, 1, filedes);
//关闭文件
fclose(filedes);
}
LR处理文件上传和下载的更多相关文章
- 文件上传和下载(可批量上传)——Spring(三)
在文件上传和下载(可批量上传)——Spring(二)的基础上,发现了文件下载时,只有在Chrome浏览器下文件名正常显示,还有发布到服务器后,不能上传到指定的文件夹目录,如上传20160310.txt ...
- 文件上传和下载(可批量上传)——Spring(二)
针对SpringMVC的文件上传和下载.下载用之前“文件上传和下载——基础(一)”的依然可以,但是上传功能要修改,这是因为springMVC 都为我们封装好成自己的文件对象了,转换的过程就在我们所配置 ...
- java web学习总结(二十四) -------------------Servlet文件上传和下载的实现
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- (转载)JavaWeb学习总结(五十)——文件上传和下载
源地址:http://www.cnblogs.com/xdp-gacl/p/4200090.html 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传 ...
- JavaWeb学习总结,文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- java文件上传和下载
简介 文件上传和下载是java web中常见的操作,文件上传主要是将文件通过IO流传放到服务器的某一个特定的文件夹下,而文件下载则是与文件上传相反,将文件从服务器的特定的文件夹下的文件通过IO流下载到 ...
- 使用jsp/servlet简单实现文件上传与下载
使用JSP/Servlet简单实现文件上传与下载 通过学习黑马jsp教学视频,我学会了使用jsp与servlet简单地实现web的文件的上传与下载,首先感谢黑马.好了,下面来简单了解如何通过使用 ...
- JavaWeb学习总结(五十)——文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- Struts2 之 实现文件上传和下载
Struts2 之 实现文件上传和下载 必须要引入的jar commons-fileupload-1.3.1.jar commons-io-2.2.jar 01.文件上传需要分别在struts.xm ...
随机推荐
- Android 用adb pull或push 拷贝手机文件到到电脑上,拷贝手机数据库到电脑上,拷贝电脑数据库到手机上
先说一下adb命令配置,如果遇到adb不是内部或外部命令,也不是可运行的程序或批量文件.配置下环境变量 1.adb不是内部或外部命令,也不是可运行的程序或批量文件. 解决办法:在我的电脑-属性-高级计 ...
- 7.xmpp版即时聊天
即时聊天的解决方案 socket: xmpp:xmpp+openfire+asmack 环信 常见协议 比较安全,tcp上还加了俩层 简单聊一下socket socket:套接字,连接需要ip和端口, ...
- JVM的粗略简述
什么是Java虚拟机 虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟机有自己完善的硬体架构,如处理器.堆栈.寄存器等,还具有相应的指令系统.JVM屏蔽了与 ...
- js:数据结构笔记6--字典
Dictionary类的基础是数组不是对象:字典的主要用途是通过键取值: 基本定义: function Dictionary() { this.dataStore = new Array(); thi ...
- Hierarchy视图里的Transform和Camera组件
Hierarchy视图里的Transform和Camera组件 在Hierarchy视图里,选中Camera,然后在Inspector视图里查看其各组件,如图1-8所示.对于Transform和Cam ...
- FireBug使用总结
FireBug是一个用于网站前端的开发工具,它是Firefox浏览器的一个拓展插件,它可以调试JavaScript.查看DOM.分析CSS.监控网络流量以及进行Ajax交互等.提供了几乎前端开发需要的 ...
- BZOJ1767 : [Ceoi2009]harbingers
设d[i]表示i到1的距离 f[i]=w[i]+min(f[j]+(d[i]-d[j])*v[i])=w[i]+d[i]*v[i]+min(-d[j]*v[i]+f[j]) 对这棵树进行点分治,每次递 ...
- BZOJ3831 : [Poi2014]Little Bird
设f[i]表示到i最少休息次数,f[i]=min(f[j]+(h[j]<=a[i])),i-k<=j<i,单调队列优化DP #include<cstdio> #defin ...
- 洛谷 P1147 连续自然数和 Label:等差数列
题目描述 对一个给定的自然数M,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为M. 例子:1998+1999+2000+2001+2002 = 10000,所以从1998到2002的一个 ...
- [Cocos2d-x For WP8]Particle粒子系统
在游戏中,经常要实现一些真实的效果,这些效果(如,火焰,雪花等)都是由大量微粒组合而形成的.为了在游戏中实现这种效果,我们必须引进粒子系统,粒子系统中需要包括四个部分:粒子对象,运动规律,随机性,粒子 ...