给业务系统做性能测试时,附件提交、图片上传、批量导入都可能涉及文件传输。浏览器里能正常上传的文件,放到LoadRunner脚本中回放,却可能出现找不到文件、提交失败,或者本机通过、换一台负载机就报错的情况。这类问题既与请求内容有关,也涉及文件在执行机器上的存放位置。下面以VuGen的Web HTTP/HTML协议、C语言脚本为例,说明普通表单上传的处理方法。
一、LoadRunner怎么模拟文件上传
模拟上传要保留实际业务请求中的文件字段、普通表单字段和登录状态。对于采用分块传输或直接发送二进制内容的接口,应沿用其实际请求格式,不能直接套用普通表单上传写法。
1、录制完整的上传操作
录制时建议使用体积较小、格式符合要求的测试文件,便于检查回放结果。文件中不要放真实业务资料。
①在VuGen中通过【文件】→【新建脚本和解决方案】,选择【Web HTTP/HTML】协议,创建并保存脚本。
②点击【开始录制】,打开测试系统,完成登录并进入附件提交页面。
③在业务页面点击文件选择按钮,选中【sample.pdf】,完成上传及后续确认操作。
④返回VuGen,点击【停止录制】,保存生成的脚本。
2、定位上传请求并检查文件字段
①在【Action.c】中搜索【sample.pdf】,定位包含该文件名的请求。
②如果请求采用【web_submit_data】,检查【Method=POST】和【EncType=multipart/form-data】。
③在【ITEMDATA】部分找到文件字段,核对【Name】与录制请求中的字段名,保留同一字段中的【File=Yes】。
④保留上传请求中的其他业务字段,例如附件分类、所属记录编号和提交标识。
文件字段名由被测系统决定,可能是file、attachment,也可能是其他名称。只改文件路径、随意替换字段名,会让服务器无法按原有规则接收附件。录制结果如果使用其他请求函数,也不要仅凭文件名就强行改成表单提交。
3、核对文件类型并执行回放
①对照录制内容检查文件字段中的【ContentType】。上传PDF文件时,可使用【ContentType=application/pdf】。
②检查【ITEMDATA】中的字段分隔,保留每组字段后的【ENDITEM】和函数末尾的【LAST】。
③执行一次【回放】,在业务系统的附件列表中核对文件名、大小,并尝试打开上传后的文件。
二、LoadRunner上传文件路径如何设置
脚本中的上传路径指向执行机器能够读取的文件。录制时留下的个人电脑目录,切换到负载机后通常需要重新处理,不能只检查文件名是否正确。
1、将测试文件放入脚本目录
小型测试附件可以随脚本一起管理,减少对某台电脑目录的依赖。不同版本的菜单译名可能略有差别,可以从解决方案资源管理器中的附加文件区域进入。
①在【解决方案资源管理器】中右键点击【附加文件】,选择【添加文件到脚本】,选中【sample.pdf】。
②打开脚本所在文件夹,确认【sample.pdf】已放入脚本目录。
③在上传字段中,将【Value】改为【Value=sample.pdf】,保留【File=Yes】。
④如果同一字段中保留了指向旧目录的【FilePath】,将其删除,再执行一次【回放】。
2、使用绝对路径定位文件
①在实际执行回放的机器上创建【D:UploadData】目录,将【sample.pdf】放入该目录。
②在文件字段中保留【Value=sample.pdf】,加入【FilePath=D:UploadDatasample.pdf】。
③将【FilePath】放在对应的【File=Yes】与【ENDITEM】之间,保存脚本并回放。
④使用负载机执行时,在各台负载机检查【D:UploadDatasample.pdf】是否存在,并检查执行账户的读取权限。
这里的双反斜杠用于C代码字符串中的转义,磁盘上的实际目录仍使用普通反斜杠。Value涉及上传请求中携带的文件名,FilePath用于指定读取的文件位置。两者分开设置,可以保留业务要求的文件名,同时调整本地取文件的位置。
3、更换文件时同步检查路径
①替换附件时,同时核对文件字段中的【Value】、【FilePath】和【ContentType】。
②使用相对【FilePath】时,对照同一字段中【Value】包含的路径检查实际文件位置。
③将【Value】设为单独文件名、并省略【FilePath】的脚本,在添加附件后重新回放,确认读取的是预期文件。
相对FilePath的解析与Value中的路径有关,不能把所有相对写法都理解为固定从脚本根目录查找。脚本里如果同时混用了旧的完整路径和新的相对路径,排查起来比较绕。一个上传字段尽量采用清楚、一致的定位方式。
三、LoadRunner上传脚本如何验证与排错
上传请求执行完成,不代表业务系统已经接受附件。进入并发测试前,应分别确认文件读取正常、服务器接收成功,以及附件后续能够使用。
1、给上传请求增加业务检查
HTTP状态正常时,响应内容仍可能提示文件格式不支持、登录失效或业务校验失败。检查点应选用稳定的成功标识,避免直接匹配整段响应。
①在【回放日志】中找到上传响应,确认成功时返回的业务状态或提示文字。
②在上传请求之前插入【web_reg_find】,将【Text】设为实际成功标识,将【Search】设为【Body】。
③再次执行【回放】,检查响应匹配结果,并到业务页面确认附件记录。
④如果响应提示登录或令牌失效,回到前置请求检查会话处理,更新上传请求使用的动态值。
2、在负载机上单独验证
①在【Controller】中加入脚本,选择一台负载机,将虚拟用户数量设为【1】,执行短时间验证。
②出现文件不存在的错误时,检查脚本携带的【附加文件】,或核对绝对【FilePath】指向的目录。
③出现拒绝访问时,使用负载机的执行账户检查文件权限,并关闭可能独占该文件的程序。
④上传成功后,换用接近业务实际大小的测试文件,再逐步调整虚拟用户数量。
本机回放通过,只能说明当前机器上的脚本与文件能够配合工作。负载机的目录、账户权限和附件分发仍要单独确认。测试大文件时,还应同时观察负载机的磁盘读取与网络情况,避免把执行端的资源限制误判为服务器问题。
总结
LoadRunner文件上传测试的可靠性,既取决于请求是否符合业务规则,也取决于执行环境能否稳定读取附件。附件大小、类型和并发比例应贴近实际使用情况,成功判断也要落到业务结果上。把测试文件和脚本作为一套材料维护,后续换机器、调整场景时会省下不少排查时间,希望这些操作能为上传测试提供参考。
