使用硒网络驱动程序进行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);
    }
}

使用硒网络驱动程序进行CRUD测试

作为一个解决方案,您可以使用字母顺序:

[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测试订单