Solr 5.4.1でschema.xmlを使う
Solr5.4.1ではデフォルトではschema.xmlを使えない
Solr5.4.1ではスキーマ定義の変更はスキーマAPIでのみ変更が可能になっています。 Schema.xmlを定義しても、上書きしてしまいます。
従来通りのSchema.xmlをcoreのconfフォルダ内にセットしたい場合は、 solrconfig.xmlの設定を変更する必要があるようです。
手順は下記のとおりになります。
1.デフォルトでconfフォルダ内にある managed-schema を schema.xmlに変更します。
2.solrcofig.xml内の設定を下記のように変更します。
<!-- <schemaFactory class="ManagedIndexSchemaFactory"> <bool name="mutable">true</bool> <str name="managedSchemaResourceName">managed-schema</str> </schemaFactory> --> <schemaFactory class="ClassicIndexSchemaFactory"/>
3.coreをリロードします。
結果は Schema Browser screen で確認できます。 ※ 確認するためには、2. のschema.xmlを少し変更する必要があります。
<参考URL>
Managed Schema Definition in SolrConfig - Apache Solr Reference Guide - Apache Software Foundation
Solr 5.4.1にWindowsでサンプルドキュメントを登録する
WindowsでサンプルドキュメントをSolrに登録する
まずは、Solrインストールフォルダに移動してSolrを起動します
bin\solr start
Linuxでは通常、postコマンドを使うみたいなんですが、Widowsだと使えない...
でもWindows用にpostツールが用意されているそうです。
Post Tool - Apache Solr Reference Guide - Apache Software Foundation
というわけで言われるがままにそこに書いてあるコマンドを実行してみます。
java -jar example\exampledocs\post.jar example\exampledocs\*.xml
結果は
SimplePostTool version 5.0.0 SimplePostTool: FATAL: Specifying either url or core/collection is mandatory.
なるほどね、core/collectionが必須ですよと。
わかりました。じゃあ、まずはcoreを作らないといけないみたいです。 というわけで下記のコマンドを実行します。
bin\solr create -c collection1
そのうえで、core/collectionを指定してサンプルドキュメントを登録します。
java -Dc=collection1 -jar example\exampledocs\post.jar example\exampledocs\*xml
無事登録できました。
Solr 5.4.1をwindowsにインストールする
SolrをWindowsにインストールする
参考URL:
http://lucene.apache.org/solr/quickstart.html
まずは、Javaがインストールされていることを確認します。
コマンドプロンプトを開いて下記のコマンドを実行します。
java -version
修正: 動作環境が、java8以上になっていたので修正
その後、下記のURLより、solr-5.4.1.zipをダウンロードします。
ダウンロードが完了したら適当なフォルダに解凍します。
解凍したフォルダに移動して下記のコマンドを実行します。
bin\solr start
管理画面にアクセスして無事、Solrが起動していることを確認します。
以上、思った以上に簡単でした。
Selenium WebDriver でページを操作してみる
3回目の今日は実際にSeleniumでページを操作してみたいと思います。
内容はこのブログのページ内検索を利用して、検索を実施して結果として予想通りに検索できるかをテストします。
結果は下記のとおり。
[TestClass] public class SearchTest { [TestMethod] public void SearchResult0() { // Firefox用のWebDriverをインスタンス化 var driver = new FirefoxDriver(); // 暗黙の待ち時間を設定 ・・・ ① driver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0,0,5)); //ブログを表示します。 driver.Navigate().GoToUrl("http://genpaku1110.hatenablog.com/"); //ブログのサイト内検索で「おしゃれな喫茶店」を入力します。 IWebElement seachbox = driver.FindElement(By.Name("q")); seachbox.SendKeys("おしゃれな喫茶店"); // 検索ボタンをクリック IWebElement submit = driver.FindElement(By.ClassName("search-module-button")); Actions builder = new Actions(driver); builder.Click(submit).Perform(); // 結果が0件であることをテストする・・・そんな記事書いてないですからね。 IWebElement result = driver.FindElement(By.CssSelector("#main-inner > p:nth-child(3)")); // ・・・② Assert.AreEqual("この期間に記事はありません", result.Text); } }
ほとんどコメントで書いてしまいましたが、苦労した点としては①の「暗黙の待ち時間を設定」のコードがないと時たまテストが失敗するということです。 また便利だと思ったのは、②のCSSセレクタがそのまま使えることですね。
あとは、繰り返しの操作をまとめて使えば結構テストでも使えるのでないでしょうか。 また気が向いたら調べてみたいと思います。
Selenium WebDriverでステータスコードをチェックしたい・・・できない!?
結論としては方法が見つかりませんでした。
残念です。
仕方ないので、とりあえずHttpClientを使ってチェックをしてみます。
[TestClass] public class HTTPStatusTest { [TestMethod] public void HttpStatusTest() { Task<HttpResponseMessage> res = Get("http://genpaku1110.hatenablog.com/aaaa"); Assert.IsTrue(res.Result.StatusCode.Equals(HttpStatusCode.OK)); } private async Task<HttpResponseMessage> Get(string url) { using (var client = new HttpClient()) { return await client.GetAsync(url); } } }
とりあえず、できましたが、Seleniumで操作してからチェックがしたかった。 ページのタイトルとかで判断するしかないですかね。 残念です。
<参考記事>
How To Get The HTTP Status Code In Selenium WebDriver « Ninth Avenue Software
Selenium WebDriverでスクリーンショットをとる
今回は画面キャプチャを毎回とるのがめんどくさかったため、Seleniumを使って自動化してみます。
使う言語はC#でやってみます。
1. VisualStudioプロジェクトを作る
まずはVisual Studio 2015を使ってプロジェクトを作ります。 今回は、テンプレートはコンソールアプリケーションを選択します。 テストに使いたい場合は、テストアプリケーションを使うのもおすすめです。 というか通常は後者のほうが多いと思います。今回は動作確認をしたいだけなので、コンソールアプリでサクっと作ります。
2. nugetを使って、Seleniumをインストールする
メニューバーから「プロジェクト > NuGetパッケージ管理」をクリックします。 「Selenium」で検索して、「Selenium WebDriver 」をサクッとインストールします。
3. Mainメソッド作る
今回は単純に1つのページを表示して、指定したフォルダにキャプチャを保存するというプログラムを作ります。 結果はこのような感じになります。
using System; using OpenQA.Selenium.Firefox; using OpenQA.Selenium; namespace BlogSelenium { class Program { static void Main(string[] args) { // Firefox用のWebDriverをインスタンス化 IWebDriver driver = new FirefoxDriver(); // Firefoxでページを表示する driver.Navigate().GoToUrl("https://www.google.co.jp/"); // スクリーンショットをとる Screenshot ss = ((ITakesScreenshot)driver). GetScreenshot(); // デスクトップにファイル名にタイトルをつけて保存する var title = driver.Title; var file = System.IO.Path.Combine(System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) ,title + ".png"); ss.SaveAsFile(file, System.Drawing.Imaging.ImageFormat.Png); } } }
4. 実行してみる
実行するとFirefoxが立ち上がって、ページが自動で遷移します。 そして実行が終わると無事ファイルが出来ていました。
めでたし、めでたし。 若干いまさら感のあるSeleniumですが、頑張れば色々できそうなので これかも少しずつ試して行きたいと思います。