【今利用されるコマンド】curlコマンドを使いこなせないかたへ

Curlコマンドは、Webスクレイピングではよくよく利用するコマンドです。 また、手軽に HTTPリクエストしたくなる場合にも利用ができます。

同様のコマンドにwgetがあるが、色々できるようなので改めて調べてみた。

最近のLinuxには初めからcurlがインストールされています。

1.URLをパラメータにしてそのコンテンツを標準出力させるのが、基本的な使い方。

$ curl http://www.google.co.jp

2.ファイルに保存したければ

リダイレクトを使う または「-o」オプションを指定することで、保存ができます。

リダイレクト

$ curl http://www.example.com/ > example.html

「-O」オプション

curl -O http://ftp.gnu.org/gnu/wget/wget-1.18.tar.gz

URLに、file1、file2、file3……のように連番が使われている場合は、 「[1-100]」のようにまとめて指定することができます。

curl -O ftp://ftp.numericals.com/file[1-100].txt

3.プロキシ経由でアクセスする

curl -x プロキシサーバ:ポート番号 http://www.google.co.jp

認証が必要な場合、以下のようにユーザ名・パスワードを指定する

curl -x プロキシサーバ:ポート番号 --proxy-user ユーザ名:パスワード http://www.google.co.jp

4.POST送信をする場合

POSTするには -d オプションつけれよいです。

curl -d name=yoshilover http://www.google.co.jp

※HTTPのPOSTとは、 リクエストの送り方が違います。GETとPOSTがあります。

POSTでサーバにデータを送信する際は、リクエストボディにデータが記述されます。

詳しくは、下述します。


・HTTP通信で、サーバへ情報を登録する時に使用する(データベースへの格納など) ・データ量が多い場合(GETでのデータ送信量制限を超えてしまう場合) ・バイナリデータを送信したい場合 ・他の人に見られたくない情報を送る場合(パスワードなど)


5.ヘッダー情報を取得する

オプションで-I を利用する

curl -I http://google.com/

6.BASIC認証の場合

-uを利用します。

curl -u username:password http://www.example.com/member/

7.SessionからCookieを取得して使用する場合

-bオプションを利用します。

curl -b name=value http://example.com

複数のCookie を送信するには

curl -b 'name=1&arg=value' http://example.com/

複数書くときに、- b を複数記述しても動作しない。

8.curlコマンドで、SSL証明書のエラーが出ても無視して、アクセスする

SSL証明書を無視する。 オレオレ証明書を使っているWebサーバーにアクセスする時に必要となる。

curl -k http://foo.com/

まとめ

その他にも利用方法ありますが、纏め切れないのであとで更新します。

Katalon Recorder(Selenium IDE の強化版)を動作確認をしてみた感想

Seleniumの記録・再生ツールといえば「Selenium IDE」が有名ですが、これらのツールはFirefox55以降では使い物にならなくなりました。

そのほかで、無料で使える様々なSeleniumスクリプトの記録ツールがないか調べてみましたところ、「Katalon Automation Recorder」が適していましたので、動作確認してみました。

Katalon Automation Recorderとは

オープンソースではありませんが、無料で使えるSelenium IDEライクな無料の記録・再生ツールです。あらゆるブラウザで作成および再生できます。

C#、JavaRubyPython、Groovy、Robot Frameworkに幅広く対応し、自動テストケースとして記録、編集、エクスポートできます。

この拡張機能でさまざまなシナリオ環境を作成できます。

下記のURLからインストールし、Chromeプラグインできます。

https://chrome.google.com/webstore/detail/katalon-recorder-selenium/ljdobmomdgdljniojadhoplhkpialdid

テスターがWeb自動テストを実行したり、回帰テストを実行するためのサポートツールです。作業が自動化・高速化する便利なユーティリティです。

2.ユーザーガイド

2.1 ツールバー

Katalon Recorderメインツールバーには、Web記録プロセスを管理するためのボタンがあります。

header1 header2
new 新しいTestCaseを作成
Play/stop TestCaseを作る
Record/stop TestCaseを動作させる

2.2 TestCase作成

TestCaseエクスプローラビューには、テストケースの一覧が表示されます。

ユーザが任意のテストケースを整理、ブラウズ、アクセスできるようになります。 ドラッグ・アンド・ドロップ機能もあり、ユーザーがテストスイートまたはテストケースを編成するのに役立ちます。

右クリックしてコンテキストメニューを 表示します。コンテキストメニューを使用すると、New TestCaseを作成したり、名前を変更したり、削除したりすることができます。

2.3 起動と保存

TestSuitを右クリックし、コンテキストメニューから選択します。

2.4 Test case window

Katalon Automation Recorderは、記録されたテストスクリプトをウィンドウに表示します。

追加、削除、実行、新しいTest caseの追加、全てのTest caseの削除、Test caseの特定のステップでの実行など、管理に役立ちます。

2.5 テストケースの編集

Katalon Automation Recorder では、記録されたコマンドを編集、、ステップの任意のポイントで新しいコマンドを追加することが可能です。編集するステップを選択し、コマンド、ターゲット、および 値フィールドを使用して編集します

2.6 テストケースのエクスポート

メインメニューの「Export」をクリック すると、「Export Test Case as script」画面が以下のように表示されます。

生成されたテストスクリプトは、Katalon Studio(http://www.katalon.com)を使用して高度な条件、動的検証およびテストデータを使用して拡張できます。

Katalon Studioは、SeleniumとAppiumを完全なテスト自動化フレームワークで強化し、すぐにテストを開始するのに役立ちます。

まとめ

日本語のページが少ないので、動作させるまで苦労しました。より本格的にテストツールとして活用したい場合は、画面定義の共通化やデータ駆動・キーワード駆動テストなどを備えたKatalon Studioというものもあります。

Pandocにトライしてみましょう。

最近資料を作る場合は、WordやEXCELでするのが面倒でMarkdown形式のgitbookでPDFやHTML化をすることが多いです。

Markdownは慣れてしまえば、間単に書くことができ、議事録や仕様書を作成するにはもってこいです。

Markdownの書き方は下記を参考にしてください。

http://yoshilover.com/?p=74

Pandocとは

Pandocは異なる形式のドキュメントやマークアップ言語を変換することができるツールです。

gitbookは、MARKDOWNからPDFやHTMLへの一方方向へしか変換できませんでしたが、Pandocを 用いれば双方向が可能となります。

特徴

対応フォーマットが非常に多いです。

入力形式

markdown ・reStructuredText ・textile ・HTML ・DocBook ・LaTeXMediaWiki markup ・TWiki markup ・OPMLEmacs Org-Mode ・Txt2Tags ・Microsoft Word docx ・EPUBHaddock markup

出力形式

XHTMLHTML5 ・HTML slide shows using Slidy ・reveal.js ・Slideous ・S5 ・DZSlides ・Microsoft Word docx ・OpenOffice/LibreOffice ODT ・OpenDocument XMLEPUB version 2 or 3 ・FictionBook2 ・DocBook ・GNU TexInfo ・Groff man pages ・Haddock markup ・InDesign ICML ・OPMLLaTeX ・ConTeXt ・LaTeX Beamer slides ・PDF ・Markdown (including CommonMark) ・reStructuredText ・AsciiDoc ・MediaWiki markup ・DokuWiki markup ・Emacs Org-Mode ・Textile

pandocのインストール

rpmパッケージがあるので、yumで簡単にインストールできます。

yum install pandoc

操作はとても簡単です。

マークダウンからワードに変換する場合

pandoc README-JP.md -o README-JP.docx pandoc -f markdown -t html hoge.md

以下のようにも書けます

pandoc --from markdown -to html hoge.md

これで変換された文章がコマンドラインに表示されることになります。 標準出力なのでパイプ等で他のコマンドに引き渡しが可能です。

また標準出力ではなく、ファイルに保存したい場合は以下のように書けば良いです。

pandoc -f markdown -to html -o hoge.html hoge.md

-oは–outputオプションの短縮形で、出力先ファイルを指定するものです。変換したhtmlはhoge.htmlに保存されることになります。

まとめ

もうエクセルやワードが時代遅れになりつつあります。 Markdownを覚え、だめなおじさんにはならないようにしましょう。

構成管理とAnsibleインストール編

構成管理 とは

前回Ansibleを利用する場合の言語yamlの重要性を説明いたしましたが、良く耳にする構成管理とは何なんでしょうか。

Infrastructure as Code

昔ながらのサーバー構築では、物理サーバーを調達して担当エンジニアが手順書に従ってミドルウェアをインストールする作業でした。

AWSを代表とするクラウドの台頭により、以前とは比較にならない程のスピード・台数でのサーバー構築 が可能のなりました。

そのような背景には「Infrastructure as Code」というキーワードから成り立っています。

構成管理は、大きく以下の 3 つのレイヤーで説明されることがあります。

サーバー・プロビジョニング

1.Bootstrapping: OS のプロビジョニング

AWS

Configuration: システム構成のプロビジョニング

→Chef、Puppet、Ansible などの構成管理ツール

Orchestration: アプリケーションのプロビジョニング

Capistrano、Fabirc などのデプロイツール

インストール〜基本操作

今回はインストール方法を説明いたします。 Ansibleをインストールする場合、Vagrant環境で構築したほうがよいでしょう。

Vagrantのインストール方法は下記を参考にしてください。

Vagrantインストール方法

Ansible をインストール

まずは Ansible をインストールしましょう。 Ansible 2.0 をインストールするため、pip を使ってインストールします。

なお、Ansible の実行には python が必要ですが、今回構築した実行環境には既にインストールされているため、インストール作業は不要です。


[vagrant]$ sudo yum install gcc python-devel -y [vagrant]$ curl https://bootstrap.pypa.io/ez_setup.py -o - | sudo python [vagrant]$ curl https://bootstrap.pypa.io/get-pip.py -o - | sudo python [vagrant]$ sudo pip install ansible


ansible --version を実行し、2.0 がインストールされていることを確認してください。


[vagrant]$ ansible --version ansible 2.0.0.2 config file = configured module search path = Default w/o overrides


inventory ファイルを作成する

Ansible の実行対象サーバーを定義した inventory ファイルを作成します。 inventory ファイルは ini 形式で作成します。

/etc/ansible/hosts に作成すると、実行時に自動的に読み込まれるのでそちらに作成しましょう。


[vagrant]$ sudo mkdir -p /etc/ansible [vagrant]$ sudo vi /etc/ansible/hosts


ファイルの中身には、事前に配布された EC2 インスタンスのパブリック IP アドレスを記載します。


xx.xx.xx.xx


ansible コマンド

ansible コマンドを使って、簡単なシェルをサーバー上で実行してみましょう。


[vagrant]$ ansible all -m command -a "uptime" -u ec2-user --private-key machiiro-tools.pem xx.xx.xx.xx | SUCCESS | rc=0 >> 07:41:19 up 34 min, 1 user, load average: 0.00, 0.01, 0.05


・all を指定したことで、inventory ファイルに記載された全サーバーが対象となります

・all の代わりに IP アドレスを指定すると、対象サーバーのみに対して実行されます ・-m でモジュールを指定します。詳細は別章で説明します

・-a で実行シェルを指定します ・-u で実行ユーザーを指定します ・--private-key で SSH 秘密鍵を指定します

ansible.cfg ファイルを作成する

毎回 --private-key を指定するのは煩雑なので、Ansible 設定ファイル ansible.cfg を作成しましょう。


[vagrant]$ sudo vi /etc/ansible/ansible.cfg



[defaults] private_key_file=./machiiro-tools.pem


--private-key を指定せずに、ansible-playbook が実行可能なことを確認してください。


[vagrant]$ ansible all -m command -a "uptime" -u ec2-user xx.xx.xx.xx | SUCCESS | rc=0 >> 07:41:19 up 34 min, 1 user, load average: 0.00, 0.01, 0.05


YAMLの基礎知識を理解していますか?

YAMLの構文がわからないかたは、ansibleは覚えるのに苦戦します。

ぜひ、ansibleを勉強するまえにはYAMLを覚えたほうがよいです。

ansible の参考書では YAMLの由来はあるのですが、書き方についてはあまり説明がないのです。知識があることは既に前提となっています。

基本

ansible の設定ファイルは YAML なのです 被管理ホストの作業手順書はプレイブックと言ます。 YAMLの構文を理解する必要あります。

また、Pythonが必要となります。 YAMLファイルとPythonを繋ぐライブラリはAnsibleを利用します。 YAMLAWSではおなじみなJSONに似た、データ定義のためのフォーマットです。

参考URL:Ansibleのための YAML入門 https://dev.classmethod.jp/server-side/ansible/getting-start-yaml-for-ansible/

基本書式

YAMLとは構造化されたデータを表現するための規格で、「シーケンス」「マッピング」という2つのデータ構造を使います。

シーケンス

YAMLでは行頭に「-」をつけることで配列を表現します。 「-」のあとの空白は必須です。これは忘れてはいけません。

YAMLでは、文字列をダブルクォート(")やシングルクォート(')で囲む必要は ありません。

  • d1
  • d2
  • d3 (結果) ['d1', 'd2', 'd3']

リスト

リストは複数のデータを格納するデータ構造です。 プログラミング言語でも同様にリストや配列などと言われます

何度も言いますが、ハイフンの後に半角スペースが必須です。

  • name: "Suzuka Nakamoto" metal_name: "SU-METAL"
  • name: "Yui Mizuno" metal_name: "YUI-METAL"
  • name: "kikuchi moa" metal_name: "MOA-METAL"

YAMLではインデントの位置によりデータ構造が決まります。

重要 原則として、インデントは2文字の半角スペースで記述してください。

変数

Ansibleでは変数を扱う機能があり、Playbookの一部を変数で置き換えます。

  • name: "check {{ wp_path }}/wp-config.php' if exist" stat: path: "{{ wp_path }}/wp-config.php" register: stat_wp_config

重要 利用する場合、{{と}}で変数名を記述してください。 この時、必ずダブルクォートで全体を囲む必要があります

Ansibleでは

Ansibleでは、タスク定義でよく使われるフォーマットでしょう。

  • name: apache24 installed yum: name: httpd24
  • name: httpd service started service: name: httpd state: started enabled: yes


最初のタスクでは、httpdyumでインストールする。 次のタスクでは、httpdをスタートする。

ansibleのプレイブックの構造

  • hosts: all become: yes become_user: root tasks:
    • user: name=piyo
    • copy: src=/home/foo/bar.txt dest=/home/piyo/


プレイブックは、2箇所に分けられる。


・接続設定を行う箇所

  • hosts: all インベントリファイルに記述したホスト名、グループ名を指定 become: yes プレイブックのモジュールをsudoで実行するように指定 become_user: root 実行するユーザーを指定

※:複数のホストを指定したい場合は、コロンで区切ることで複数のホストを指定可能です。

・実行モジュールを定義する箇所


tasks: - user: name=piyo ユーザー追加を行うuserモジュール - copy: src=/home/foo/bar.txt dest=/home/piyo/  管理ホストから被管理ホストへのファイルコピーを行うcopy


まとめ

ansibleではこのほかにリファレンスを読むなどして、理解をする必要があります。 次回に続きます。

単体テストとJUNIT5

プログラミング開発において、テストフェーズは下記に大きく分けられます。


1.単体テスト 2.結合テスト 3.機能テスト 4.システムテスト 5.ユーザ受け入れテスト


テストの目的とはなんでしょうか。

バグを発見すること 品質を保証すること 品質を改善すること

バグを防ぐのはいつでもエンジニアの課題でしょう。

今回は、Seleniumの検証中でもあり、単体テストについて触れてみたいと思います。

単体テストとは

・クラスや関数などのプログラム単体でのテスト ・設計通りに動くかを検証 ・テスティングフレームワークを使ったテストプログラムで、メソッドなどの小さな単位で行うテスト ・個々の機能を正しく果たしているかどうかを検証するテスト

実装中段階の早期段階で、機能が仕様通りに実装されているかを確認することにより、開発の後工程で行われるテストに比べて早い段階でバグをつぶすことができます。

必要な理由


・問題の原因の特定や修正が容易。 ・開発全体のバグ修正コストを下げる ・コードの内容をよく理解している開発者によって、コード作成と同時か直後にテストケースが作成できる


単体テストの課題は


・開発者への負担 ・ある程度のスキルが必要 ・スケジュール的に厳しい


テストプログラムには、JUNITが利用されます。

JUNITとは


Java開発では多くのプロジェクトでオープンソースの「JUnit」が使われています。 JUnitJavaプログラム単体テスト用のフレームワークです。

共通のテストフレームワークをもつことで、他人のテストプログラムの修正を容易にします。

また、テストプログラムを記述するために、たくさんの知識を習得する必要はありません。数個の規則を学べばよいのです


JUNITの現状


単体テストの重要性は誰もが把握していますが、テストプログラミングに時間が取れない。 ・ユニットテストを行うのは原則としてプログラマです。専門の知識は必要ありませんが、 基礎的な知識やスキルはが必要となります。 ・HTMLやCSSについても、最低限の知識やスキルが必要。


問題点


JUnitを使った単体テストは、テストコードを書く必要があり。 ・テスト対象と同じくらい、またはそれ以上のコード量が必要 ・意図した通りにテストが動くかを確認するためにはデバッグが不可欠 ・単体テストにも慣れが必要


推奨される理由


・一度作成すればすばやくテスト可能 ・テストコードを標本とすることでバグ訂正が容易 ・IDEを使うことで、テストコードの再作成によって生じる手間を軽減または高速化 ・テストコードを見れば仕様がわかる


JUNIT4 から5へ

2017年にはJUnit5 がリリースされました。


・サポートされるJavaのバージョンは8です。今後は9にも対応します。 ・最初のハードルが高いため、直感的な仕様となっている。 ・JUnit 4とは互換性がない。 ・既存のテストを書き換えないほうがよい。 ・インストールは、Maven Centralにデプロイされています。


今後は


seleniumやselenideなどで自動化する動きがありますので、需要はますます上がるでしょう。


Selenium+Pythonインストールをインストールしたことある?

Seleniumとは、Webの自動テストのためのライブラリ。 Python版のSeleniumをインストールしたいと思います。

開発環境


ホストマシン

・Vagrant2.0.1 ・Windows 7 Home PremiumVagrant 1.7.2 ・VirtualBox 4.3.26-98988

ゲストマシン

CentOS Linux release 7.3.1611 (Core)

ソフトウェア

Python :3.5.4 ・JAVA:"1.8.0_151" ・chromedrive:2.3 ・Crome:62.0.3202.89 ・Selenium:3


EPELリポジトリのインストール

CentOSのパッケージは枯れたものが多いので、外部リポジトリを 追加することで新しいパッケージを利用できるようにします。


$sudo yum -y install epel-release


ChromeDriverのインストールの事前準備


$sudo yum -y install wget $sudo yum -y install unzip $wget https://chromedriver.storage.googleapis.com/2.33/ chromedriver_linux64.zip   

$sudo unzip chromedriver_linux64.zip $sudo mv chromedriver /usr/local/bin/ $sudo chown root:root /usr/local/bin/chromedriver   


Google Chromeのインストール  

参考URL: [CentOS7にChromeをインストール] (https://qiita.com/shadowhat/items/af6b973df43d75abfe8e)


/etc/yum.repos.d/google-chrome.repoでリポジトリファイルを設定。

sudo vi /etc/yum.repos.d/google.chrome.repo

Viで内容を入力

[google-chrome] name=google-chrome baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch enabled=1 gpgcheck=1 gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

インストールする

sudo yum -y install google-chrome-stable

Chromedriverは2.31以降をインストールしてください。 2.30以前ですと、seleniumでsend_keysが使えない問題が 発生していたのですが、2.31でこの問題が解消しています!


PIPのインストール方法


python-devel を入れる

sudo yum -y install python-devel

python-pip をインストールする

sudo yum -y install python-pip  

パッケージをアップデートする。

sudo yum -y update


JAVAのインストール


sudo yum install -y java-1.8.0-openjdk.x86_64 sudo yum install -y java-1.8.0-openjdk-devel.x86_64


pythonを2系から3系にアップさせる。


pyenvをインストールすることで複数のバージョンのpythonを共存させて 簡単に切り替えることができます。

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv bash_profileに環境変数を記述します。

$ vim .bash_profile 下記を追記 $ pyenv export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)"

.bash_profileを読み込ませる  

念のためコマンドを読む

export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH"

インストールできるバージョンを一覧表示

pyenv install --list

3.5.4をインストール

$ pyenv install 3.5.4   pythonのバージョンを確認  

$ python --version Python 2.7.5

python3.5.1に切り替え

$ pyenv global 3.5.4 $ pyenv rehash $ python --version Python 3.5.4


Seleniumのインストール


pip install selenium


バージョンの確認方法


java -version google-chrome -version python --version


実行


python test.py

まとめ

ChromeDriverの実行ファイルは、ご利用のGoogle Chrome のバージョンに合わせて適切な組み合わせを選ぶ必要が有ります。 また、Google Chrome自体は自動アップデートしていくので、 開発環境のChromeDriverも追随していく必要が有ります。