问题描述
我正在编辑我们的 API 自动化解决方案的 SpecFlow Runner ReportTemplate.cshtml 以使用我创建的 ProductVersionGrabber 类来执行一个简单的远程 PowerShell 命令,然后从 ReportTemplate.cshtml 中使用它并遍历列表并呈现出来PowerShell 输出
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
namespace API.Tools.ProductVersionGrabber
{
public class ProductVersionGrabber
{
public string vmName = Environment.MachineName;
public List<string> productVersionList = new List<string>();
public List<string> GrabVersions()
{
string envType = GetEnvType(vmName);
if (envType.StartsWith("QE_AUTO",true,CultureInfo.InvariantCulture))
{
productVersionList.AddRange(GetQeAutoProductList());
}
else if (envType.StartsWith("DEV_INT",CultureInfo.InvariantCulture))
{
productVersionList.AddRange(GetDevIntProductList(vmName));
}
return productVersionList;
}
public List<string> GetProductVersionsChocolatey(string vmName)
{
List<string> output = RunPSGrabVersions(vmName);
return output;
}
public string GetEnvType(string envName)
{
string envType = null;
if (envName.StartsWith("QE_AUTO",CultureInfo.InvariantCulture))
{
envType = "QE_AUTO";
}
else if (envName.StartsWith("DEV_INT",CultureInfo.InvariantCulture))
{
envType = "DEV_INT";
}
else
{
envType = "QE_AUTO";
}
return envType;
}
public List<string> GetQeAutoProductList()
{
List<string> intProdVers = new List<string>();
intProdVers.Add("QE_AUTO_1");
intProdVers.AddRange(GetProductVersionsChocolatey("QE_AUTO_1"));
intProdVers.Add("QE_AUTO_2");
intProdVers.AddRange(GetProductVersionsChocolatey("QE_AUTO_2"));
intProdVers.Add("QE_AUTO_3");
intProdVers.AddRange(GetProductVersionsChocolatey("QE_AUTO_3"));
intProdVers.Add("QE_AUTO_4");
intProdVers.AddRange(GetProductVersionsChocolatey("QE_AUTO_4"));
intProdVers.Add("QE_AUTO_5");
intProdVers.AddRange(GetProductVersionsChocolatey("QE_AUTO_5"));
intProdVers.Add("QE_AUTO_6");
intProdVers.AddRange(GetProductVersionsChocolatey("QE_AUTO_6"));
intProdVers.Add("QE_AUTO_7");
intProdVers.AddRange(GetProductVersionsChocolatey("QE_AUTO_7"));
return intProdVers;
}
public List<string> GetDevIntProductList(string envName)
{
List<string> intProdVers = new List<string>();
intProdVers.Add(envName);
intProdVers.AddRange(GetProductVersionsChocolatey(envName));
return intProdVers;
}
public List<string> RunPSGrabVersions(string vmName)
{
List<string> resultsList = new List<string>();
InitialSessionState initial = InitialSessionState.CreateDefault();
Runspace runspace = RunspaceFactory.CreateRunspace(initial);
runspace.Open();
PowerShell ps = PowerShell.Create();
ps.Runspace = runspace;
ps.AddCommand("invoke-command");
ps.AddParameter("ComputerName",$"{vmName}.testing.local");
ScriptBlock command = ScriptBlock.Create("choco list -lar companyName");
ps.AddParameter("ScriptBlock",command);
StringBuilder stringBuilder = new StringBuilder();
foreach (PSObject obj in ps.Invoke())
{
resultsList.Add(obj.ToString());
}
resultsList.Add(stringBuilder.ToString());
runspace.Close();
return resultsList;
}
}
}
所以这是内部信息净化的 ProductVersionGrabber 但它非常简单和基本,我已经完成了类的单元测试/控制台实现以确认它输出机器列表和安装的产品没有问题所以类本身应该是好的afaik 作为一个刚回来的新手,已经生疏了。
当我对 ReportTemplate.cshtml 进行修改时,问题本身似乎出现了,即使只是最后的 using 语句似乎也激怒了这件事,但我们的解决方案显然没有 CSHTML 检查器(尽管 VSCode 有,但没有检测到助手之外的任何不“有效”的东西,但在我进行这些修改之前它们是有效的,所以可能没什么好担心的)而且我在第 2 天陷入困境,不知道该去哪里找出答案什么实际上坏了/不工作。
助手:
@inherits SpecFlow.Plus.Runner.Reporting.CustomTemplateBase<TestRunResult>
<!DOCTYPE html>
@using System
@using System.Linq
@using System.Globalization
@using TechTalk.SpecRun.Framework
@using TechTalk.SpecRun.Framework.Results
@using TechTalk.SpecRun.Framework.TestSuiteStructure
@using API.Tools.ProductVersionGrabber
@{var timeFormat = "hh\\:mm\\:ss"; }
@helper GetBuildInfo(string projectName)
{
var info = projectName.Split('#');
var branch = info[0];
var environment = info[1];
var build = info[2];
var jobName = info[3];
var jobType = info[4];
var productGrabber = new ProductVersionGrabber();
var output = productGrabber.GrabVersions();
<li>Branch: @branch</li>
<li>Environment: @environment</li>
<li>Build Id: @build</li>
<li>Job Name: @jobName</li>
<li>Job Type: @jobType</li>
<b>Versions:</b>
<p>
@foreach (var obj in output)
{
@obj<br>
}
</p>
}
Helper 用于:
@GetBuildInfo(Model.Configuration.TestProfileSettings.Name)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)