使用vstest.console.exe工具运行Selenium测试时显示测试的URL
本文关键字:测试 显示 URL Selenium 运行 vstest console exe 工具 使用 | 更新日期: 2023-09-27 17:59:04
上下文
我配置了执行SeleniumC#测试的Jenkins作业。构建作业时,我必须提供两个值:
- 分支来构建我的解决方案
- 应测试的URL
详细描述
Jenkins执行以下步骤:
- 签出所选分支
- 将存储在AppSettings中的URL替换为用户提供的URL("TestedURL")
- 生成解决方案
-
执行vstest.console.exe工具(该工具随Visual Studio 2012一起提供,位于以下路径中:"Microsoft Visual Studio 11.0''Common7''IDE''CommonExtensions''Microsoft''TestWindow"),如下所示:
vstest.console.exe"c:''myProject''bin''Debug''myProject.Test.dll"
问题
我想确保测试正确的URL:我想在Jenkins/vstest.console.exe输出的控制台输出中显示URL。
我在StackOverflow上按照不同的答案修改了代码。
URL直接在Visual Studio的测试输出中可见。不幸的是,在vstest.console.exe/Jenkins输出中,我仍然没有看到任何测试URL。
如何在输出中显示URL(如何修改printMessage方法)?
我的代码如下:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;
using System.Configuration;
using System.Diagnostics;
namespace My.Test
{
[TestClass]
public class MyTests
{
IWebDriver driver;
string baseURL;
[TestInitialize]
public void Initialize()
{
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
// URL is replaced by the value provided in Jenkins
baseURL = config.AppSettings.Settings["TestedURL"].Value;
driver = new ChromeDriver();
driver.Navigate().GoToUrl(baseURL);
printMessage(string.Format("Tested URL: '{0}'", baseURL));
}
private TestContext testContextInstance;
/// <summary>
///Gets or sets the test context which provides
///information about and functionality for the current test run.
///</summary>
public TestContext TestContext
{
get
{
return testContextInstance;
}
set
{
testContextInstance = value;
}
}
private void printMessage(string message)
{
// Method should display custom message in both Visual Studio output and Jenkins (vstest.console.exe) output
Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));
Trace.Listeners.Add(new ConsoleTraceListener());
Trace.WriteLine(message);
Debug.WriteLine(message);
TestContext.WriteLine(message);
Console.WriteLine(message);
}
}
}
由于找不到直接的解决方案,我找到了一个变通方法。
vstest.console.exe具有/logger:trx选项,该选项生成扩展名为.trx的文件。提到的文件是一个xml,其中包含测试结果和Std输出。我注意到,当我在测试方法中使用printmessage时,消息就在那里(在trx文件的Std输出中)。
让我提供生成的.trx文件的一部分:
<Output>
<StdOut>Tested URL was 'http://someURL'
Debug Trace:
Tested URL: 'http://someURL'
Trying to log into as 'Incorrect account'
TestContext Messages:
Tested URL: 'http://someURL'
Trying to log into as 'Incorrect account'</StdOut>
</Output>
</UnitTestResult>
有一些工具可以将.trx转换为.html。因此Jenkins可以在控制台中显示测试结果的输出链接。
但是
我遇到了问题,因为我找不到一个能正常工作并在生成的html文件中显示Std输出的工具。从那以后,我写了以下Powershell代码:
# set $inputTRXFile, $outputHTMLFile before running following lines
$results = ([xml] (Get-Content $inputTRXFile)).TestRun.Results.UnitTestResult
$results | select testname,outcome,duration, @{Name="Output";Expression={$_.Output.InnerText}} | ConvertTo-HTML -head $a -title "Test results" | Out-File $outputHTMLFile