使用Visual Studio 2015我录制了一个网络测试,其中包括将文件上传到网站。此站点不允许上载具有相同名称的文件。在webtest方案中,我有File Upload Parameter
,其中属性Generate Unique Name
设置为True
:
但每次尝试运行此webtest时,尝试上传文件时都会失败,因为已存在具有给定名称的文件。
在我的项目文件夹中,我检查了TestResults文件夹,该文件夹复制了我需要上传的文件,其名称与录制的名称相同,而不是给它一个唯一的名称。
我已经看到有关此问题的一些建议,并尝试检查Enable deployment
文件中的.testsettings
选项,并在此检查下的“要部署的文件”部分中添加此文件的确切路径。但它仍然无法解决问题。
UPD。调试单个webtest运行。
接头:
HTTP/1.1 500 Internal Server Error
X-AspNetMvc-Version : 5.2
Persistent-Auth : true
Content-Length : 312
Cache-Control : private, s-maxage=0
Content-Type : application/json; charset=utf-8
Date : Tue, 06 Mar 2018 14:42:48 GMT
Server : Microsoft-IIS/8.5
X-AspNet-Version : 4.0.30319
X-Powered-By : ASP.NET
体:
0x00000000 7B 22 63 6F 6E 66 69 72 6D 61 74 69 6F 6E 22 3A {"confirmation":
0x00000010 7B 22 6D 65 73 73 61 67 65 22 3A 22 D0 94 D0 BE {"message":"....
0x00000020 D0 BA D1 83 D0 BC D0 B5 D0 BD D1 82 20 D1 81 20 ............ ..
0x00000030 D0 B8 D0 BC D0 B5 D0 BD D0 B5 D0 BC 20 5C 75 30 ............ \u0
0x00000040 30 32 37 32 6D 62 2E 70 64 66 5C 75 30 30 32 37 0272mb.pdf\u0027
0x00000050 20 D1 83 D0 B6 D0 B5 20 D1 81 D1 83 D1 89 D0 B5 ...... ........
0x00000060 D1 81 D1 82 D0 B2 D1 83 D0 B5 D1 82 2E 20 D0 A1 ............. ..
0x00000070 D0 BE D0 B7 D0 B4 D0 B0 D1 82 D1 8C 20 D0 BD D0 ............ ...
0x00000080 BE D0 B2 D1 83 D1 8E 20 D0 B2 D0 B5 D1 80 D1 81 ....... ........
0x00000090 D0 B8 D1 8E 20 D0 B4 D0 BE D0 BA D1 83 D0 BC D0 .... ...........
0x000000A0 B5 D0 BD D1 82 D0 B0 3F 22 2C 22 73 68 6F 72 74 .......?","short
0x000000B0 4D 65 73 73 61 67 65 22 3A 22 D0 92 D0 B5 D1 80 Message":"......
0x000000C0 D1 81 D0 B8 D1 8F 20 D0 B4 D0 BE D0 BA D1 83 D0 ...... .........
0x000000D0 BC D0 B5 D0 BD D1 82 D0 B0 20 D0 BD D0 B5 20 D0 ......... .... .
0x000000E0 BE D0 B1 D0 BD D0 BE D0 B2 D0 BB D0 B5 D0 BD D0 ................
0x000000F0 B0 22 7D 2C 22 6D 65 73 73 61 67 65 22 3A 22 D0 ."},"message":".
0x00000100 92 D0 B5 D1 80 D1 81 D0 B8 D1 8F 20 D0 B4 D0 BE ........... ....
0x00000110 D0 BA D1 83 D0 BC D0 B5 D0 BD D1 82 D0 B0 20 D0 .............. .
0x00000120 BD D0 B5 20 D0 BE D0 B1 D0 BD D0 BE D0 B2 D0 BB ... ............
0x00000130 D0 B5 D0 BD D0 B0 22 7D ......"}
答案 0 :(得分:2)
如果您按照毫秒的时间段上传许多文件,可能会遇到麻烦,是吗?
供您参考,这是生成唯一文件名的实际代码,它使用毫秒分辨率的时间戳。
<!-- language: c# -->
internal string GenerateUniqueFileName()
{
string fileName = this.FileName;
if (!string.IsNullOrEmpty(this.FileName))
{
string str = Path.GetFileName(this.FileName);
if (!string.IsNullOrEmpty(str))
{
if (!this.m_useGuids)
{
CultureInfo invariantCulture = CultureInfo.get_InvariantCulture();
object[] objArray = new object[2];
DateTime now = DateTime.get_Now();
//--- Here:
objArray[0] = now.ToString("ddMMyyyyhhmmssfff", CultureInfo.get_InvariantCulture());
objArray[1] = str;
str = string.Format(invariantCulture, "{0}{1}", objArray);
}
else
{
Guid guid = Guid.NewGuid();
string str1 = guid.ToString().Replace("-", string.Empty);
str = string.Format(CultureInfo.get_InvariantCulture(), "{0}{1}", new object[] { str1, str });
}
fileName = str;
}
if (!string.IsNullOrEmpty(Path.GetDirectoryName(this.FileName)))
{
fileName = Path.Combine(Path.GetDirectoryName(this.FileName), fileName);
}
}
return fileName;
}
我尝试重现您的错误,但它的行为符合预期。
我做的唯一更改是在PostParameter FileName
中设置一个绝对文件路径以使其运行,因为它未正确复制到MSTest的Out文件夹。
您能否展示一次运行webtest的更详细调试?
请检查您的表单帖子参数,它应该如下所示:
和:如果生成唯一名称,则将文件上传名称留空:
答案 1 :(得分:0)
想出了一些解决方法。我从.webtest生成代码,并将Guid.NewGuid()
添加到fileName
参数的值中。因此,生成Form Post Parameters的代码片段如下所示:
FormPostHttpBody request2Body = new FormPostHttpBody();
request2Body.FormPostParameters.Add(new FileUploadParameter("null", "2mb.pdf", "application/pdf", true));
request2Body.FormPostParameters.Add("fileName", Guid.NewGuid() + "2mb.pdf");
request2.Body = request2Body;
根据这个编码的.webtest制作.loadtest,最后开始将Guids添加到loadtest期间上传的文件名。
也许它不是最佳解决方案,但尝试删除fileName
参数,将Name
参数值从null
更改为其他内容等等都没有帮助。