Если вы используете C# с NUnit, вы можете использовать атрибуты [SetUp]
и [TearDown]
, включенные в NUnit, для выполнения sh этого. Если вы хотите применить этот сценарий ко всем своим тестам, вы можете поместить эти методы в отдельный класс Fixture
, который будет наследовать каждый из этих методов.
Вот очень базовая установка c для получения вы начали:
public class Fixture
{
public AndroidDriver<IWebElement> Driver { get; }
private AppiumLocalService _appiumLocalService;
[SetUp]
public void StartDriver()
{
// start appium service
var builder = new AppiumServiceBuilder();
_appiumLocalService = builder.UsingAnyFreePort().Build();
_appiumLocalService.Start();
// create appium driver capabilities
var options = new AppiumOptions { PlatformName = "Android" };
options.AddAdditionalCapability("deviceName", "Pixel 3a Pie 9.0 - API 28");
// add app or appPackage / appActivity depending on preference
options.AddAdditionalCapability("appPackage", "org.mozilla.firefox");
options.AddAdditionalCapability("appActivity", "org.mozilla.gecko.BrowserApp");
options.AddAdditionalCapability("udid", "emulator-5554");
options.AddAdditionalCapability("automationName", "UiAutomator2"); // this one is important
// these are optional, but I find them to be helpful -- see DesiredCapabilities Appium docs to learn more
options.AddAdditionalCapability("autoGrantPermissions", true);
options.AddAdditionalCapability("allowSessionOverride", true);
// set the driver global variable
Driver = new AndroidDriver<IWebElement>(appiumLocalService.ServiceUrl, options);
}
[TearDown]
public void CloseDriver()
{
Driver.Close(); // may need to change Driver.CloseApp();
Driver.Quit();
// stop appium service
_appiumLocalService.Stop();
}
Теперь, когда вы создаете класс для тестового случая, он будет выглядеть так:
public class MyTestClass : Fixture
{
[Test]
public void RunTest()
{
// perform test functions here such as FindElement and SendKeys
Driver.FindElement("myElement");
}
[Test]
public void RunAnotherTest()
{
// these tests use different driver instances, but that code will never have to be duplicated!
}
}
Примечание , которое вы можете создать столько классов тестов, сколько вы хотите унаследовать от Fixture
, и вам никогда не придется дублировать код объявления драйвера или даже вызывать его.
Теперь давайте разберем, что происходит Здесь. Атрибуты NUnit [Setup]
и [TearDown]
обозначают метод, который будет выполняться до того, как все будет помечено [Test]
. Итак, если NUnit запускает метод [Test]
, он будет запускать [SetUp]
> [Test]
> [TearDown]
. Это очень полезно, потому что вам не нужно дублировать код для действий, которые нужно повторять снова и снова.
В Fixture
у нас есть глобальная переменная Driver
, которая представляет AndroidDriver<>
экземпляр для этого конкретного теста . Экземпляры Driver
создаются с нуля в [SetUp]
перед тестированием, используются во время метода [Test]
, и после завершения [Test]
, [TearDown]
уничтожит экземпляр Driver
. Процесс повторяется для каждого теста. Этот тип использования, когда мы создаем ровно один экземпляр объекта для повторного использования в процессе, называется Singleton Pattern .
Это гарантирует, что ваш Driver
экземпляр не получит повторно используется между тестовыми примерами, что является предпочтительной практикой в автоматизации тестирования.
Мы также объявили _appiumLocalService
как частную переменную, потому что, хотя нам не нужно использовать эту переменную вне Fixture
, нам все еще нужно повторно использовать переменную между [SetUp]
и [TearDown]
, чтобы мы могли остановить службу Appium после завершения нашего теста.