如何在 Visual Studio Webtest 中上传具有唯一名称的文件
How to upload a file with unique name in Visual Studio Webtest
使用 Visual Studio 2015 我录制了一个网络测试,其中包括将文件上传到网站。本站不允许上传同名文件。在 webtest 场景中,我有一个 File Upload Parameter
,属性 Generate Unique Name
设置为 True
:
但是每次我尝试 运行 这个网络测试时,它都会在尝试上传文件时失败,因为给定名称的文件已经存在。
在我的项目文件夹中,我检查了 TestResults 文件夹,它复制了我需要上传的文件,并使用与记录时相同的名称,而不是给它一个唯一的名称。
我看到了一些关于此问题的建议,并尝试检查我的 .testsettings
文件中的 Enable deployment
选项,并在此检查下的“要部署的文件”部分中添加此文件的确切路径.但是还是没有解决问题
更新。调试单个 webtest 运行.
要求:
响应:
Headers:
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
Body:
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 ......"}
详情:
如果你以毫秒为单位上传很多文件,你可能会遇到麻烦,是吗?
供您参考,这是生成唯一文件名的实际代码,它使用分辨率为毫秒的时间戳。
<!-- 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
中设置绝对文件路径以获取它 运行ning,因为它没有正确复制到 MSTest 的输出文件夹。
您能否显示单个 运行 网络测试的更详细调试?
请检查您的表单 post 参数,它应该如下所示:
并且:如果生成唯一名称,请将文件上传名称留空:
想出了一些解决方法。我从我的 .webtest 中生成了代码,并将 Guid.NewGuid()
添加到 fileName
参数的值中。所以生成表单 Post 参数的代码片段如下所示:
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,它最终开始将 Guid 添加到负载测试期间上传的文件的名称中。
也许这不是最好的解决方案,但尝试删除 fileName
参数、将 Name
参数值从 null
更改为其他值等都没有帮助。
使用 Visual Studio 2015 我录制了一个网络测试,其中包括将文件上传到网站。本站不允许上传同名文件。在 webtest 场景中,我有一个 File Upload Parameter
,属性 Generate Unique Name
设置为 True
:
但是每次我尝试 运行 这个网络测试时,它都会在尝试上传文件时失败,因为给定名称的文件已经存在。
在我的项目文件夹中,我检查了 TestResults 文件夹,它复制了我需要上传的文件,并使用与记录时相同的名称,而不是给它一个唯一的名称。
我看到了一些关于此问题的建议,并尝试检查我的 .testsettings
文件中的 Enable deployment
选项,并在此检查下的“要部署的文件”部分中添加此文件的确切路径.但是还是没有解决问题
更新。调试单个 webtest 运行.
要求:
Headers:
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
Body:
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 ......"}
详情:
如果你以毫秒为单位上传很多文件,你可能会遇到麻烦,是吗?
供您参考,这是生成唯一文件名的实际代码,它使用分辨率为毫秒的时间戳。
<!-- 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
中设置绝对文件路径以获取它 运行ning,因为它没有正确复制到 MSTest 的输出文件夹。
您能否显示单个 运行 网络测试的更详细调试?
请检查您的表单 post 参数,它应该如下所示:
并且:如果生成唯一名称,请将文件上传名称留空:
想出了一些解决方法。我从我的 .webtest 中生成了代码,并将 Guid.NewGuid()
添加到 fileName
参数的值中。所以生成表单 Post 参数的代码片段如下所示:
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,它最终开始将 Guid 添加到负载测试期间上传的文件的名称中。
也许这不是最好的解决方案,但尝试删除 fileName
参数、将 Name
参数值从 null
更改为其他值等都没有帮助。