将日志文件附加到 Azure Devops 测试 运行
Attaching a log file to an Azure Devops Test Run
我正在尝试附加我在 Azure 发布管道中的 运行 自动化测试期间生成的日志文件。我正在使用 selenium 和 MSTest 运行ning 自动化 UI 测试。最初,我的印象是我可以使用 TestContext 对象在 MSTest 的 AssemblyCleanup 方法中附加文件。但是,似乎 TestContext 只能用于将结果附加到单个测试用例?在网上搜索了一下后,我发现了这个 API 调用:
POST https://dev.azure.com/{组织}/{项目}/_apis/test/Runs/{运行Id}/附件?api-version=5.1-preview.1
在 Microsoft 文档中:https://docs.microsoft.com/en-us/rest/api/azure/devops/test/attachments/create%20test%20result%20attachment?view=azure-devops-rest-5.1
但是,我不明白如何在我的测试代码中获取测试 运行Id 或如何使用 OAuth2 进行身份验证。
这是我可以使用 RestSharp 进行调用的最大程度;
RestClient httpClient = new RestClient("");
//I have no clue if this is even close to right with the OAuth stuff
httpClient.Authenticator = new RestSharp.Authenticators.OAuth2AuthorizationRequestHeaderAuthenticator("");
RestRequest request = new RestRequest(Method.POST);
APIRequestBody body = new APIRequestBody
{
//not sure if this is the right stream
Stream = "",//not sure what to put in here
FileName = "TestRun.log",
Comment = "Test run log file.",
AttachmentType = "GeneralAttachment"
};
request.AddJsonBody(body);
IRestResponse response = httpClient.Execute(request);
任何帮助都会非常好...我在这里有点头疼。
下面的代码示例显示了如何使用个人访问令牌在 c# HttpClient 中调用 restful api。
您可以按照 here.
的步骤获取您的个人访问令牌
public static async void GetProjects()
{
try
{
var personalaccesstoken = "PAT_FROM_WEBSITE";
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Add(
new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(
System.Text.ASCIIEncoding.ASCII.GetBytes(
string.Format("{0}:{1}", "", personalaccesstoken))));
using (HttpResponseMessage response = await client.GetAsync(
"https://dev.azure.com/{organization}/_apis/projects"))
{
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
以上示例来自Microsoft document。你可以看看。
对于测试 runId,您可能需要调用下面的 test runs api 以获取测试运行列表,然后从 Response 中提取当前 runid。
GET https://dev.azure.com/{organization}/{project}/_apis/test/runs?api-version=5.1
希望以上内容对您有所帮助。
我正在尝试附加我在 Azure 发布管道中的 运行 自动化测试期间生成的日志文件。我正在使用 selenium 和 MSTest 运行ning 自动化 UI 测试。最初,我的印象是我可以使用 TestContext 对象在 MSTest 的 AssemblyCleanup 方法中附加文件。但是,似乎 TestContext 只能用于将结果附加到单个测试用例?在网上搜索了一下后,我发现了这个 API 调用:
POST https://dev.azure.com/{组织}/{项目}/_apis/test/Runs/{运行Id}/附件?api-version=5.1-preview.1
在 Microsoft 文档中:https://docs.microsoft.com/en-us/rest/api/azure/devops/test/attachments/create%20test%20result%20attachment?view=azure-devops-rest-5.1
但是,我不明白如何在我的测试代码中获取测试 运行Id 或如何使用 OAuth2 进行身份验证。 这是我可以使用 RestSharp 进行调用的最大程度;
RestClient httpClient = new RestClient("");
//I have no clue if this is even close to right with the OAuth stuff
httpClient.Authenticator = new RestSharp.Authenticators.OAuth2AuthorizationRequestHeaderAuthenticator("");
RestRequest request = new RestRequest(Method.POST);
APIRequestBody body = new APIRequestBody
{
//not sure if this is the right stream
Stream = "",//not sure what to put in here
FileName = "TestRun.log",
Comment = "Test run log file.",
AttachmentType = "GeneralAttachment"
};
request.AddJsonBody(body);
IRestResponse response = httpClient.Execute(request);
任何帮助都会非常好...我在这里有点头疼。
下面的代码示例显示了如何使用个人访问令牌在 c# HttpClient 中调用 restful api。 您可以按照 here.
的步骤获取您的个人访问令牌public static async void GetProjects()
{
try
{
var personalaccesstoken = "PAT_FROM_WEBSITE";
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Add(
new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(
System.Text.ASCIIEncoding.ASCII.GetBytes(
string.Format("{0}:{1}", "", personalaccesstoken))));
using (HttpResponseMessage response = await client.GetAsync(
"https://dev.azure.com/{organization}/_apis/projects"))
{
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
以上示例来自Microsoft document。你可以看看。
对于测试 runId,您可能需要调用下面的 test runs api 以获取测试运行列表,然后从 Response 中提取当前 runid。
GET https://dev.azure.com/{organization}/{project}/_apis/test/runs?api-version=5.1
希望以上内容对您有所帮助。