我在selenium c#中的脚本使用NUnit框架进行多次测试,如下所示,它连接到我的TestRail,我想知道是否有任何方法可以在实际测试完成之前检查我的测试是否通过。
[Test, Order(0)]
public void Login()
{
Navigate.ToLoginPage();
Log.In("user");
TestRailServer.Result("1"); //1 is testcase id
}
[Test, Order(1)]
public void RegisterUser()
{
Add.User();
TestRailServer.Result("2"); //2 is testcase id
}
TestRailServer。您在测试中看到的结果("1"(是我在testrail中的连接,它将根据TestMethod(Login and RegisterUser(决定testrail的测试用例是通过还是失败
这是我在TestRail连接中的代码
private static TestRailClient trClient;
public static void Result(string testCaseID)
{
ulong testRunID = "testRailID";
string testrailComment;
trClient = new TestRailClient("https://client.testrail.net/",
"username", "password");
var result = TestContext.CurrentContext.Result.Outcome.Status;
var testrailStatus = result switch
{
TestStatus.Failed => ResultStatus.Failed,
TestStatus.Passed => ResultStatus.Passed,
_ => ResultStatus.Retest
};
testrailComment = (testrailStatus == ResultStatus.Failed) ? TestContext.CurrentContext.Result.Message : "Passed";
trClient.AddResultForCase(testRunID, ulong.Parse(testCaseID), testrailStatus, testrailComment);
}
但问题出在TestRailServer上。Result是在测试完成之前调用的,所以我需要一种方法来判断我的测试是否在执行TestRailServer 之前通过
感谢你的帮助(如果有的话(,如果你发现很难摆脱,请道歉
我没有使用testrail,但我使用了相当多的Nunit。
我的理解是NUnit只知道它是否通过断言失败了。如果你的代码中没有断言(我在你发布的级别上看不到任何断言(,你的测试总是会在完成时通过。你的方法面临的挑战是,一个失败的断言将停止测试,你可能不会得到任何结果。NUnit就是这样设计的——它是为单元测试设计的,毕竟需要几毫秒的时间。
与其结束与报告程序交互的每条测试线,不如将其移动到[Teardown]
方法。通过这种方式,测试完成(处于通过或失败状态(,并在事件发生后进行报告。
类似于:
public string testId;
[Test, Order(0)]
public void test1()
{
testId= "1";
Navigate.ToLoginPage();
Log.In("user");
//assert here
}
[Test, Order(1)]
public void test2()
{
testId= "2";
Add.User();
//assert here
}
[TearDown]
public void TearDown()
{
TestRailServer.Result(testId);
}
(如果你还没有的话,可以在测试中添加断言(:-(