وبلاگ شخصی حامد شیربندی

حامد شیربندی

توسعه دهنده نرم افزار

پیاده سازی تست E2E به کمک Selenium در برنامه های مبتنی برا NET Core

با توجه به مسائل مربوط به یک پروژه و شرایطی که برای انجام آن وجود دارد ممکن است به تست UI نیاز داشته باشیم. باید دید آیا پیاده سازی تست UI چه ارزشی به انجام و توسعه این پروژه اضافه خواهد کرد، گاه پیاده سازی این تست ها البته در بلند مدت ممکن است درصد بسیار زیادی در بهبود توسعه و ارائه ی ارزش به مشتری تاثیر داشته باشد. گاهی نیز استفاده ی کورکورانه باعث میشود که یک هزینه ی سنگین روی دست تیم تست یا توسعه برجای بگذارد.
طبق تصویر زیر مشخص است که Automate سازی تست UI یا به عبارتی همان تست E2E هزینه ی سنگین تری نسبت به سایر تست ها در پیاده سازی داشته و از نظر اجرا نیز سرعت کمتری خواهد داشت اما تعداد تست هایی هم که برای آن نوشته میشود کمتر است.




حال با ذکر این پیش زمینه سراغ اتوماتیک سازی انجام این تست ها میرویم و بهترین ابزاری که میتوانم در این زمینه معرفی کنم Selenium است. با استفاده از این ابزار میتوانیم یک لایه ی تست UI به پروژه اضافه کرده و یک سری سناریو را با آن پیاده سازی کنیم مثلا کاربر لاگین کند، یک محصول در سبد خود اضافه کند- سبد خرید را مشاهده کند- آن را پرداخت کند.
سلنیوم با توجه به امکاناتی که در اختیار ما قرار میدهد میتواند این تست ها را در مرورگر های مختلفی به صورت تعاملی اجاره کرده و نهایتا از صحت کد های خود مطلع خواهیم شد.

برای اضافه کردن تست E2E به پروژه کافی است یک لایه جدید از نوع MsTest مثلا با نام MyProject.UITests به سلوشن پروژه اضافه کنیم و وابستگی های زیر را به فایل csproj آن اضافه کنیم تا از نوگت دریافت شوند.


 <ItemGroup>
 <PackageReference Include="Selenium.Firefox.WebDriver" Version="0.21.0" />
 <PackageReference Include="Selenium.WebDriver" Version="3.14.0" />
 <PackageReference Include="Selenium.WebDriver.ChromeDriver" Version="2.41.0" />
 <PackageReference Include="Selenium.WebDriver.IEDriver" Version="3.14.0" />
 </ItemGroup>

سپس یک کلاس تست به صورت زیر در آن پیاده میکنیم. در این کلاس ما یک تست ساده روی ویوی index یک وب سایت پیاده کرده ایم همچنین فایل های اجرایی مربوط به درایورها که پس از نصب از نوگت در bin برنامه قرار میگیرند را در محل خاصی از هارد کپی کرده و از آدرس آنها برای تمام برنامه ها استفاده میکنیم. برای مثال من آنها در در آدرس "C:\Selenium_Drivers" قرار داده ام :


 [TestClass]
 public class MyUITests
 {


 private IWebDriver driver;
 private string appURL;

 [TestInitialize()]
 public void SetupTest()
 {
 appURL = "http://mysite.com";

 string browser = "Chrome";
 switch (browser)
 {
 case "Chrome":
 driver = new ChromeDriver(@"C:\Selenium_Drivers");
 break;
 case "Firefox":
 driver = new FirefoxDriver();
 break;
 case "IE":
 driver = new InternetExplorerDriver();
 break;
 default:
 driver = new ChromeDriver();
 break;
 }

 }



 [TestMethod]
 public void Check_App_Initialization()
 {
 driver.Navigate().GoToUrl(appURL + "/home/index");
 var responseElement = driver.FindElement(By.Id("myCarousel"));
 Assert.IsTrue(responseElement.Text.Equals("Learn how to build ASP.NET apps that can run anywhere"));

 }



 [TestCleanup()]
 public void MyTestCleanup()
 {
 driver.Quit();
 }


 }





نوشته شده توسط حامد شیربندی

اگر در مورد این نوشته سوال یا ابهامی وجود دارد میتوانید به ایمیل من ارسال کنید. البته در این مورد باید کمی صبور باشید. در آینده بخش نظرات اضافه خواهد شد.