使用硒网络驱动程序进行CRUD测试
本文关键字:CRUD 测试 驱动程序 网络 | 更新日期: 2023-09-27 18:22:16
我正在尝试运行测试,这些测试将使用web应用程序从数据库中创建、编辑和删除条目。我遇到的问题是,这些测试是相互依赖的。例如,我必须首先创建条目才能编辑或删除它。做这件事的合适方法是什么?有没有办法按照特定的顺序执行测试?下面是我现在的代码示例:
[TestFixture]
public class DevicesTest : ASysTest {
private const string DeviceName = "Automated Test Device";
private const string EditedDeviceName = "Modified Automated Test Device";
public override void PostInitialize() {
this.Login("devices");
}
[SetUp]
public void TestInitialize() {
this.Driver.Navigate().GoToUrl(GetAppUrl("/devices/"));
}
[Test]
public void CreateNewDeviceTest() {
var modal = DisplayModal("create");
var selector = new SelectElement(modal.FindElement(By.Id("CompanyID")));
selector.SelectByIndex(2);
modal.FindElement(By.CssSelector("option[value='1']"));
modal.FindElement(By.Id("Name")).SendKeys(DeviceName);
modal.FindElement(By.Id("IP_Address")).SendKeys("111.1.1.1");
modal.FindElement(By.Id("Operating_System")).SendKeys(DeviceName);
modal.FindElement(By.Id("Administrator_Password")).SendKeys(DeviceName);
modal.FindElement(By.Id("Notes")).SendKeys(DeviceName);
modal.FindElement(By.CssSelector(".btn-primary[type='submit']")).Click();
var heading = Driver.FindElementByTagName("h1");
Assert.IsTrue(heading.Displayed);
StringAssert.Contains("Devices", heading.Text);
var page = Driver.FindElementByClassName("device");
StringAssert.Contains(DeviceName, page.Text);
}
[Test]
public void EditDeviceTest() {
var tableData = Driver.FindElement(By.XPath("//td[contains(., '" + DeviceName + "')]")); // Select <td> containing DeviceName
var tableRow = tableData.FindElement(By.XPath("..")); // Grab parent element <tr>
tableRow.FindElement(By.CssSelector(".modal-open[data-modal='edit-modal']")).Click(); // Click edit button contained within <tr>
Thread.Sleep(500);
var modal = Driver.FindElementById("edit-modal");
modal.FindElement(By.Id("Name")).Clear();
modal.FindElement(By.Id("Operating_System")).Clear();
modal.FindElement(By.Id("Administrator_Password")).Clear();
modal.FindElement(By.Id("Notes")).Clear();
modal.FindElement(By.Id("Name")).SendKeys(EditedDeviceName);
modal.FindElement(By.Id("Operating_System")).SendKeys(EditedDeviceName);
modal.FindElement(By.Id("Administrator_Password")).SendKeys(EditedDeviceName);
modal.FindElement(By.Id("Notes")).SendKeys(EditedDeviceName);
modal.FindElement(By.CssSelector(".btn-primary[type='submit']")).Click();
var heading = Driver.FindElementByTagName("h1");
Assert.IsTrue(heading.Displayed);
StringAssert.Contains("Devices", heading.Text);
var page = Driver.FindElementByClassName("device");
StringAssert.Contains(EditedDeviceName, page.Text);
}
[Test]
public void DeleteDeviceTest() {
var tableData = Driver.FindElement(By.XPath("//td[contains(., '" + EditedDeviceName + "')]")); // Select <td> containing DeviceName
var tableRow = tableData.FindElement(By.XPath("..")); // Grab parent element <tr>
tableRow.FindElement(By.CssSelector(".modal-open[data-modal='delete-modal']")).Click(); // Click delete button contained within <tr>
Thread.Sleep(500);
var modal = Driver.FindElementById("delete-modal");
modal.FindElement(By.CssSelector(".btn-danger[type='submit']")).Click();
var heading = Driver.FindElementByTagName("h1");
Assert.IsTrue(heading.Displayed);
StringAssert.Contains("Devices", heading.Text);
var page = Driver.FindElementByClassName("device");
StringAssert.DoesNotContain(EditedDeviceName, page.Text);
}
}
作为一个解决方案,您可以使用字母顺序:
[Test]
public void A_Create()
...
[Test]
public void B_Edit()
...
[Test]
public void C_Delete()
...
关于
我遇到的问题是,这些测试相互依赖于
我认为Modularity-driven_testing方法正是您想要的。一般来说,它需要小型、独立的测试脚本。创建它们之后,您可以以分层的方式使用它们来构建更大的测试,还可以创建您需要/订购的特定测试用例。
当我不得不在MVC项目中使用Selenium进行E2E测试时,我实现了自己的DB_Accessor类,该类负责CRUD。用例:验证来自前端的数据更改是否相应地在DB中表示。
在NUnit 2.5中,单个测试用例按字母顺序排序并按该顺序执行。使用NUnit 2.5.1,不会对单个案例进行排序,而是按照NUnit发现它们的顺序执行
参考:Nunit测试订单