// 变慢,所以
public const string TimeToWaitForPageLoad = "30000";
}
public class TestLibrary
{
public UserOperationsHelper UserHelper { get; private set; }
}
public class TestClass
{
[TestMethod]
public void LogOnTest()
{
var username = "donjuan";
var password = "它是个秘密";
TestLibrary.UserHelper.LogOn(username, password);
// 在测试过程中,我们发现这个链接是
// 根据用户名而变的,为了扩展性,动态生成其标识文本
selenium.Click(string.Format("link={0}", username));
selenium.WaitForPageToLoad(Consts.TimeToWaitForPageLoad);
selenium.Click("link=博客");
selenium.WaitForPageToLoad(Consts.TimeToWaitForPageLoad);
// 执行一些必要的测试验证过程
Assert.IsTrue(selenium.IsTextPresented(...));
}
}
这里稍微解释一下,创建自动化测试代码,就是为了节省手工重复测试的工作量以及测试失误的风险。但只要是代码,都会有可能出错,因此自动化测试框架里面创建了一个CaseErrorException,这样在每次分析测试用例失败的时候,可以一眼区分开测试代码的错误和产品代码中的错误。例如在UserOperationHelper.LogOn函数中的参数检查,当然啦,在测试过程当中,有可能需要测试不输入用户名或者密码的情况下,验证登录界面是否正常工作的情况。因此在验证参数的时候,特意为这种情况留下了String.Empty的入口,而对于null值,则基本上可以判断是因为测试人员在编写代码上的失误(具体原因会在数据驱动测试里面讲到)。
至于TestLibrary的初始化,完全可以放到每一个测试类型的TestInitializer里面,如下表所示:
[TestClass] public class AddBlogTest { private TestContext testContextInstance; public TestContext TestContext { get { return testContextInstance; } set { testContextInstance = value; } }
private TestLibrary TestLibrary; private ISelenium selenium;
[TestInitialize] public void SetupTest() { TestLibrary = TestLibrary.SetupTest(TestContext); selenium = TestLibrary.Selenium; }
[TestCleanup] public void TeardownTest() { TestLibrary.Shutdown(); } } |