我需要找到測試用例失敗的數量。這裏TC003包含(3個SUB測試用例),其中2通過,1失敗。 (3)失敗 - (1)。我該如何做到這一點。我們如何使用c#將列表分組?
TC001-Passed
TC002-Passed
TC003-Passed
TC003-Passed
TC003-Failed
TC004-Passed
我有一個DataTable即ItemArray[0]
包含TestCaseID和ItemArray[3]
包含狀態
我需要找到測試用例失敗的數量。這裏TC003包含(3個SUB測試用例),其中2通過,1失敗。 (3)失敗 - (1)。我該如何做到這一點。我們如何使用c#將列表分組?
TC001-Passed
TC002-Passed
TC003-Passed
TC003-Passed
TC003-Failed
TC004-Passed
我有一個DataTable即ItemArray[0]
包含TestCaseID和ItemArray[3]
包含狀態
好吧,這是尷尬的,但讓我們直截了當:
void Main()
{
List<string> AllTheTestCasesStrings = new List<string>();
AllTheTestCasesStrings.Add("TC001 Passed");
AllTheTestCasesStrings.Add("TC002 Passed");
AllTheTestCasesStrings.Add("TC003 Passed");
AllTheTestCasesStrings.Add("TC003 Passed");
AllTheTestCasesStrings.Add("TC003 Failed");
AllTheTestCasesStrings.Add("TC004 Passed");
List<TestCase> AllTheTestCases = new List<TestCase>();
foreach(string CurrentTest in AllTheTestCasesStrings)
{
TestCase NewTest = new TestCase();
NewTest.Name = CurrentTest.Split(' ')[0];
NewTest.Passed = CurrentTest.Split(' ')[1].Equals("Passed");
AllTheTestCases.Add(NewTest);
}
int FailedTestCases = AllTheTestCases.Where<TestCase>(x => !x.Passed).GroupBy<TestCase, string>(x => x.Name).Count();
int PassedTestCases = AllTheTestCases.Where<TestCase>(x => x.Passed).GroupBy<TestCase, string>(x => x.Name).Count();
Console.WriteLine("Failed: " + FailedTestCases);
Console.WriteLine("Passed: " + PassedTestCases);
}
public class TestCase
{
public string Name;
public bool Passed;
}
ID'TC003'的3個測試用例應該組合在一起。你將返回1失敗的結果,5通過,這是不正確的。 – mellamokb
@mellamokb現在我明白了,感謝您的反饋。我正在看看它現在 –
你不能只是做.... AllTheTestCases = AllTheTestCases.Distinct()。ToList();? –
假設你有LINQ提供,你可以嘗試這樣的解決方案,其中dt
是您的數據表,其中列索引0
爲testcase-id(1,2,3,4),並且列索引3
爲狀態(Passed
,Failed
):
var rows = dt.Select();
var results = rows.GroupBy (r => r[0])
.Select (r => new {
TestCaseID = r.Key,
Status = r.Any (x => x[3].Equals("Failed")) ? "Failed" : "Passed"
});
var total = results.Count();
var passed = results.Count(r => r.Status == "Passed");
var failed = results.Count (r => r.Status == "Failed");
Console.WriteLine("Total Testcases: " + total); // 4
Console.WriteLine("Passed: " + passed); // 3
Console.WriteLine("Failed: " + failed); // 1
我有一個DataTable即ItemArray [0]包含TestCaseID和 ItemArray [3]包含狀態
好吧,這裏有一個DataTable和Linq-To-DataSet
的方法:
var tcaseGroups = tbl.AsEnumerable()
.GroupBy(r => r.Field<String>("TestCaseID"))
.Select(g => new
{
Testcase = g.Key,
Count = g.Count(),
CaseInfo = g.GroupBy(r => r.Field<String>("Status"))
.Select(gStatus => new
{
Status = gStatus.Key,
Count = gStatus.Count()
})
});
// output the result
foreach (var x in tcaseGroups)
Console.WriteLine("Testcase:{0}, Count:{1} Results:[{2}]", x.Testcase, x.Count
, String.Join(",", x.CaseInfo.Select(xx =>
String.Format("Status:{0} Count:{1}", xx.Status, xx.Count))));
使用Linq按ItemArray [0]分組,然後計數ItemAr的實例射線[1]。
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication
{
internal class Program
{
private static void Main()
{
//table to mimik your structure
var table = new List<string[]>(new[]
{
new[] {"TC001", null, null, "Passed"},
new[] {"TC002", null, null, "Passed"},
new[] {"TC003", null, null, "Passed"},
new[] {"TC003", null, null, "Passed"},
new[] {"TC003", null, null, "Failed"},
new[] {"TC004", null, null, "Passed"}
});
//calculate
var grouped = from itemArray in table
//group by the testid
group itemArray by itemArray[0]
into g select new
{
TestCaseId = g.Key,
//add up the passes and fails
PassedCount = g.Count(i => i[3] == "Passed"),
FailedCount = g.Count(i => i[3] == "Failed")
};
//enumerate and output to screen
foreach (var group in grouped)
{
Console.WriteLine("TestCase {0} Passed: {1}, Failed: {2}",
group.TestCaseId, group.PassedCount,
group.FailedCount);
}
Console.ReadLine();
}
}
}
這些任意字符串還是它們在自定義對象內? –
您可以使用Linq對象 –
我有一個dataTable ie.ItemArray [0]包含TestCaseID和ItemArray [3]包含狀態 – Pat