LoginSignup
16
10

More than 3 years have passed since last update.

業務で使用したC#の便利ライブラリ

Last updated at Posted at 2019-12-08

はじめに

自分のモチベーションアップも含め、Qiitaに何か投稿をしようと考えて半年が経ってしまいました。
今回のアドベントカレンダーを機に投稿していこうと思った次第です。

あまりにも知られているライブラリであるため、お役に立てなかったらすいません。
たくさん紹介したいものもありますが、今回私が紹介したいものは下記となります。

  • Selenium
  • ExcelDataReader

※SEO対策のテストや、SIer時代のテスト項目消化などに使用していました。

Selenium

昔からあるクライアントチェックライブラリの一つですが、改めて紹介をさせていただきます。

dotnetコマンドからプロジェクトを作っていきましょう。
※dotnet SDKに関してはDownload .NET (Linux, macOS, and Windows)からダウンロードをお願いします。

dotnet new nunit -o SeleniumUITest

実行すると下記のようなcsファイルができるかと思います。

UnitTest1.cs
    public class Tests
    {
        [SetUp]
        public void Setup()
        {
        }

        [Test]
        public void Test1()
        {
            Assert.Pass();
        }
    }

次に、プロジェクトにSeleniumを追加していきましょう。

dotnet add package Selenium.WebDriver
dotnet add package Selenium.WebDriver.ChromeDriver

ここから簡単にコードを追記していきます。

UnitTest1.cs
    public class Tests
    {
        private OpenQA.Selenium.IWebDriver webDriver = null;
        [SetUp]
        public void Setup()
        {
            var options = new ChromeOptions();
            // 2つのオプションを追加
            // 1つ目ブラウザを立ち上げない
            // 2つ目プライベートモードで開く
            options.AddArguments("--headless", "--incognito");
            webDriver = new OpenQA.Selenium.Chrome.ChromeDriver(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), options);
        }

        [Category("Assert True Test")]
        [TestCase("https://qiita.com/nariakiraHara/items/f1b4d091ed447a283d8d", "title", "業務で使用したC#の便利ライブラリ - Qiita")]
        public void Test1(string url, string tagName, string content)
        {
            AssertTrueTest(url, tagName, content);
        }

        private void AssertTrueTest(string url, string tagName, string content)
        {
            webDriver.Navigate().GoToUrl(url);
            var titleInfo = webDriver.Title;
            Assert.AreEqual(content,  titleInfo, "タイトルを間違えています。");
        }

        [OneTimeTearDown]
        public void Dispose()
        {
            if(webDriver != null)
            {
                webDriver.Quit();
                webDriver.Dispose();
            }
        }
    }

テスト内容としては、渡されたTestCaseのUrl, tag名, コンテンツを渡します。
SeleniumからUrlにアクセスし、タグの内容と想定される結果が正しいかを検証します。
◎実際のクライアントからテストできるため便利かと

ExcelDataReader

エクセルのデータを読み込むことができるライブラリとなります。
テスト項目を作成後、読み込ませ想定される結果が合っているかを、上記Seleniumを使用して確認したりしてました。

プロジェクトを作成していきます。

dotnet new console -o ExcelReadSample

ライブラリーを入れていきます。

dotnet add package ExcelDataReader
dotnet add package ExcelDataReader.DataSet
dotnet add package System.Text.Encoding.CodePages

今回はサンプルとして下のようなExcelを作成し、Console出力してみたいと思います。
MicrosoftTeams-image (1).png

プロジェクトに"resources"フォルダを追加し、Excelを格納します。
こんな感じになりました。

Program.cs
    class Program
    {
        // 先程の画像のExcel Data.xlsxを読み込む
        private static readonly string DATA_PATH = @"resources/Data.xlsx";
        static void Main(string[] args)
        {
            Console.WriteLine("Start Excel Read");
            var app = new Program();
            app.Run();
            Console.WriteLine("End Excel Read");
        }

        public void Run()
        {
            var ds = ReadData(DATA_PATH);

            foreach(DataTable tbl in ds.Tables) {
                Console.WriteLine($"シート名 {tbl.TableName}");
                // 1行ずつ見ていく
                for(var j = 0; j < tbl.Rows.Count; j++) {
                    if (j == 0) continue;
                    // 1カラムずつ見ていきます
                    for(var i=0; i<tbl.Columns.Count; i++) {
                        Console.Write($"{tbl.Rows[j][i]} ");
                    }
                    Console.WriteLine("");
                }
            }

        }

        private DataSet ReadData(string path)
        {
            DataSet ds = null;
            System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
            try {
                // ファイルパスからExcelを読み込む
                using(var stream = File.Open(path, FileMode.Open, FileAccess.Read)) {
                    using(var reader = ExcelReaderFactory.CreateReader(stream)) {
                        ds = reader.AsDataSet();
                    }
                }
            }
            catch(Exception ex) {
                Console.Error.WriteLine(ex.Message);
            }

            return ds;
        }

    }

出力結果

Start Excel Read
シート名 Sheet1
1 https://qiita.com/ title Qiitaだよ 
2 https://qiita.com/ h1 はじめに 
3 https://qiita.com/ h1 僕はトムではありません 
4 https://qiita.com/ title はは 
End Excel Read

こんな感じの出力結果になります。
Excelをテストケースのように作成し、テストをSeleniumを使用してテストを実施していました。

よかったら参考にしてみてください^^

16
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
10