主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Azure: VPSでサーバからNginxサンプルをサーブする(ポートの開け方)

                
tags:
 Azureの管理コンソールが変更され、ポートの開け方の説明が見つからなかったので、どうにかこうにかやってみたメモ。

 VPSへのOSインストール、Nginxのインストールは割愛。

 OSの用意が終わったら管理コンソールでそのOSを選ぶ。

 ネットワークインターフェイスを選択。
1607030112018.jpg

続いてネットワークセキュリティーグループを選択。
1607030112319.jpg

続いてまずインバウンドセキュリティーグループでポート80を開ける。これでリクエストを受け付けられるように。
1607030113136.jpg

インバウンドに続きアウトバウンドでもポート80を開ける。これでリクエストへのレスポンスを返せるように。
1607030113397.jpg

ポートを開けたらNginxを立ち上げて、IPにアクセスしてみる。ちゃんとポートが開いててNginxが動いてれば下の画像のようにレスポンスがある。
1607030114203.jpg


 このあとはDockerをインストールしてWebアプリをイミュータブルに置いておける環境を・・・と考えていたんだけど、AzureではWebアプリは専用の環境でいくつか無料で作れてしまう。なのでVPSいじりは一旦ここでストップする。


スポンサーサイト

新しいブログをぼちぼちと

                
tags:
1606290009159.png

 .NET Coreの正式版がリリースされた。それにさきがけてブログを引っ越そうと、新しいブログをその.NET Coreベースで書いていた。モデルが揃ってきてぼちぼち形にはなってきたが、使用しているライブラリの都合などからまだデプロイできない。ただデプロイをAzureのWebアプリとしてやるか、それともDockerコンテナとしてやるかと迷ってもいるが。とりあえず今週末を一つの目安として考える。

MongoDBでオートインクリメントを・・・という話をほんの少し先まで

                
tags: C# mongoDB
MongoDBでドキュメントの任意のフィールドをオートインクリメントにしたい・・・というサンプルは本家にある。
https://docs.mongodb.com/v3.0/tutorial/create-an-auto-incrementing-field/

関数を使うわけだが、その時点で開いてるターミナルを閉じたらその関数は消える。なので永続化として下記のように保存、保存したものを呼び出して使える。
db.system.js.save({_id:'nextSeq',
value:function getNextSequence(name) {
var ret = db.counters.findAndModify(
{
query: { _id: name },
update: { $inc: { seq: 1 } },
new: true
} );
return ret.seq;
}
});

db.system.js.findOne({_id:"nextSeq"}).value("userid");


C#ではストアしたJavaScriptはBsonJavaScriptとして取得できる。だけどどう実行するの・・・ドキュメントでもサンプルでも使用例が見つからない。なのでストアされたものを使わずに自分で書く。
var fooCollection = db.GetCollection("foo");
var d = new BsonDocument
{
{ "a", new BsonJavaScript("(function getNextSequence(name) {
var ret = db.counters.findAndModify(
{
query: { _id: name },
update: { $inc: { seq: 1 } },
new: true
});
return ret.seq;
})('entry_id')")
}
};
fooCollection.InsertOne(d);

WebアプリのテストにSeleniumを導入する

                
tags: Selenium
 継続的に改修依頼が来ているWebアプリにテストが組まれていなかった。そんでテストを導入した。ぼくの開発方法はたぶんTDDと呼ばれるものである。開発中にテストを必要に応じて行っているので、テストが主導だと大変面倒だと感じる。なのでクライアントサイドの動作確認にSeleniumを導入した。

 Seleniumとは、ざっくり言うとブラウザをスクリプトでコントロールしてしまおうというものである。なにか登録フォームを作ったとしたら、Seleniumでnameがほにゃららのとinputにほにゃららな値を入れて、submitボタンを押したことにして遷移画面をスクショで撮る、とかってことができる。
 以前はこういった役割にPhantomJSを使っていたが、PhantomJSというブラウザは一般的にない。SeleniumはFireFoxやクロームなどのドライバを入れれば、そのブラウザでテストができる。そういうわけでPhantomJSよりSeleniumを使うことにした。

 とりあえずSeleniumを使ってFireFoxのコントロールまでを今回はやる。

 まずインストールから。
 ぼくの導入タイミングでは、日本で作られたSeleniumの紹介サイトがだいぶふるいものになっていたので本家を参考にした。
http://www.seleniumhq.org
 コントロールに使う言語はスクリプト系やらなんやら選べるが、今回はC#。ということでVisualStudioを開いて、C#でコンソールアプリケーションのプロジェクトを新規作成する。
 続いてNugetでSeleniumパッケージを入れる。たぶんVisualStudioの真ん中下段にパッケージマネージャーコンソールというのがあるので、そこに下記を打ち込んでインストールされることを確認する。
Install-Package Selenium.WebDriver
Install-Package Selenium.Support


 以上でSeleniumを使う準備は整う。オブジェクトエクスプローラでWebDriverを見てみると、いろいろなブラウザが使えるようになっているのがわかるはず。あとは下記のコードをビルドでもして試してみる。Bingに検索キーワードを入れ、結果を見たりするようになっている。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Support.UI;

namespace PlaySelenium
{
class Program
{
private static FirefoxDriver driver;
private static LogWriter log = new LogWriter("Selenium Test Sample");

static void Main(string[] args)
{
var url = "http://bing.com";

driver = new FirefoxDriver();

// Go to the home page
driver.Navigate().GoToUrl(url);

driver.FindElement(By.Id("sb_form_q")).SendKeys("selenium test");
driver.FindElement(By.Name("go")).Click();

var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(1));
wait.Until(ExpectedConditions.TitleContains("selenium test"));
driver.GetScreenshot().SaveAsFile("screen1.png", System.Drawing.Imaging.ImageFormat.Png);

driver.FindElement(By.ClassName("sb_pagN")).Click();
wait = new WebDriverWait(driver, TimeSpan.FromSeconds(1));
wait.Until(ExpectedConditions.TitleContains("selenium test"));
driver.GetScreenshot().SaveAsFile("screen2.png", System.Drawing.Imaging.ImageFormat.Png);

driver.FindElement(By.ClassName("sb_pagN")).Click();
wait = new WebDriverWait(driver, TimeSpan.FromSeconds(1));
wait.Until(ExpectedConditions.TitleContains("selenium test"));
driver.GetScreenshot().SaveAsFile("screen3.png", System.Drawing.Imaging.ImageFormat.Png);

driver.FindElement(By.Id("sb_form_q")).SendKeys(" sample");
driver.FindElement(By.Name("go")).Click();


AssertEqual(driver.Title.Contains("selenium"), true);


//File.WriteAllText("result.txt", result);

log.Close();
driver.Quit();
driver.Dispose();
}


private static void AssertEqual(string a, string b)
{
if (a == b)
{
return;
}
else
{
var output = $"Test failed!\n" +
$"Page Title: {driver.Title}\n" +
$"URL: {driver.Url}\n" +
$"'AssertEqual' failed: {a} != {b}";
Console.WriteLine(output);
log.Add(output);
log.Close();
driver.Dispose();
Environment.Exit(1);
}
}

private static void AssertEqual(bool a, bool b)
{
if (a == b)
{
return;
}
else
{
var output = $"Test failed!\n" +
$"Page Title: {driver.Title}\n" +
$"URL: {driver.Url}\n" +
$"'AssertEqual' failed: {a} != {b}";
Console.WriteLine(output);
log.Add(output);
log.Close();
driver.Dispose();
Environment.Exit(1);
}
}
}
}

 

なんとなく。

                
tags:
DSCN0450.jpg
 
 ここしばらくガンプラ作りに没頭していて、ブログ更新を滞らせていた。そんなもんでそろそろいい加減にとなんか書こうかと考えてみた。そういや会社でWebアプリのテストにSeleniumを導入したからそれ書こう・・・といきたいところだけど、導入方法をSphinxでまとめたものが会社のPCに入っているので、家で一から調べなおして書いていく気が起きない。
 
 技術的な遊び道具としては、RaspberryPiの3が出たり、Xamarinがタダになったりと、自分用ガジェットを作るのに役立ちそうなものがある。どっかからメールで、コンテナをデプロイできるサービス開始したぞというのも来ていた。そろそろガンプラ作りから帰ってくる頃合だろう。

 ただPCが古くて不調なので、まずはそこからどうにかせねば。
プロフィール

Matoba

Author:Matoba

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。