【環境構築】社内Proxy環境上でRobotframework_導入編

##１．はじめに

・Proxy環境の社内でRobotframeworkを導入しようとした際にうまくいかないことが多かったので、
備忘録目的で手順をまとめました。
・内容が長くなる為、「導入編」と「カスタマイズ編」で二部構成にしています。


##２．各種基本情報

###２.１．各種Ver.
| No. | 項目 | Ver. | 備考 |
|:--------|:--------|:--------|:----------|
| 1 | Windows10 OS | -- | 作業用ホストPCのOS |
| 2 | VirtualBox | 6.1 | システムを構築する仮想環境 |
| 3 | Ubuntu 18 | 18.04 | 仮想マシーンのOS |
| 4 | Pyenv | 1.2.21 |  |
| 5 | Python 3 | 3.9.0 |  |
| 6 | Pip 3 | 20.3.1 |  |
| 7 | Selenium | 3.141.0 |  |
| 8 | Robotframework | 3.2.2 |  |
| 9 | Robotframework-seleniumlibrary | 4.5.0 |  |
| 10 | Pyautogui | 0.9.52 |  |
| 11 | Google Chrome | 87.0.4280.141 |  |
| 12 | Chrome Driver | 87.0.4280.88 |  |

###２.２．設定情報一覧
| 項番 | 項目 | 設定値 | 備考 |
|:----------|:------------|:-----------|:----------|
| A-1 | Proxy ホスト名 | proxy.example.co.jp | ※あくまで例です（環境に合わせて変更してください） |
| A-2 | Proxy ポート番号 | 8088 | ※あくまで例です（環境に合わせて変更してください） |
| A-3 | Proxy ユーザ名 | myname | ※あくまで例です（環境に合わせて変更してください） |
| A-4 | Proxy パスワード | mypassword | ※あくまで例です（環境に合わせて変更してください） |
| B-1 | Ubuntu Root パスワード | adminpassword | ※あくまで例です（環境に合わせて変更してください） |
| C-1 | Ubuntu ユーザ名 | ubuntu | ※あくまで例です（環境に合わせて変更してください）|
| C-2 | Ubuntu ユーザパスワード | ubupassword | ※あくまで例です（環境に合わせて変更してください）|


##３．環境構築作業

###３.１．前提
・Windows10上にVirtualBoxがインストール済みであること
・VirtualBox上にUbuntu18.04が設置済みであること（「[Server World](https://www.server-world.info/query?os=Ubuntu_18.04&p=download)」参照）


###３.２．作業手順
（1）Rootユーザのパスワード設定
（2）UbuntuのProxy設定
（3）Gitの設定
（4）Pyenvの設定
（5）ChromeDriverの設定
（6）Robotframeworkの動作検証


###３.３．構築作業

####３.３.１．Rootユーザのパスワード設定
・Terminalを起動し下記コマンドを実行する

```terminal:
$ sudo passwd root
[sudo] password for ubuntu : ubupassword
Enter new UNIX password : adminpassword
Retype new UNIX password : adminpassword
passwd : password updated successfully
```

####３.３.２．UbuntuのProxy設定

#####３.３.２.１．ネットワーク設定
① Ubuntu GUI 画面上部「▼」を押下
② メニューの「設定」を押下（画像左下アイコン）
![3.3.1.1_02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/40b33ca0-ae06-f21f-a08f-dd607baca4a2.png)

③ メニューの「ネットワーク」を押下（画像左下から3つ目）
![3.3.1.1_03.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/29771c3f-9779-418b-dcbf-6fe73b529eb2.png)

④ 「ネットワークプロキシ（⚙）」アイコンを押下
![3.3.1.1_04.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/862a75d4-0ccf-c6ec-9dd9-b9c581992119.png)

⑤ HTTP、HTTPS プロキシのフォームに設定を入力する
![3.3.1.1_05.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/f1faeb5c-0f6b-6180-0927-96f3e907f734.png)


#####３.３.２.２．bashrcの設定

```Terminal:
$ echo 'export ftp_proxy="ftp://myname:mypassword@proxy.example.co.jp:8088/"' >> ~/.bashrc
$ echo 'export http_proxy="http://myname:mypassword@proxy.example.co.jp:8088/"' >> ~/.bashrc
$ echo 'export https_proxy="http://myname:mypassword@proxy.example.co.jp:8088/"' >> ~/.bashrc
$ source ~/.bashrc
```
※パスワードに「@」を含む場合は、「%40」に適宜置き換える（例：P@ss　⇒ P%40ss）

#####３.３.２.３．aptconfの設定

```Terminal:
$ echo Acquire::http::proxy \"http://myname:mypassword@proxy.example.co.jp:8088/\"\; > /etc/apt/apt.conf.d/apt.conf
$ echo Acquire::https::proxy \"http://myname:mypassword@proxy.example.co.jp:8088/\"\; >> /etc/apt/apt.conf.d/apt.conf
$ echo Acquire::ftp::proxy \"http://myname:mypassword@proxy.example.co.jp:8088/\"\; >> /etc/apt/apt.conf.d/apt.conf
$ sudo apt -y update
$ sudo apt -y upgrade
```
※パスワードに「@」を含む場合は、「%40」に適宜置き換える（例：P@ss　⇒ P%40ss）

####３.３.３．Gitの設定

```Terminal:
$ sudo apt -y install git
$ gitconfig --global http.proxy http://myname:mypassword@proxy.example.co.jp:8088
$ gitconfig --global https.proxy http://myname:mypassword@proxy.example.co.jp:8088
```
※パスワードに「@」を含む場合は、「%40」に適宜置き換える（例：P@ss　⇒ P%40ss）

####３.３.４．Pyenvの設定

#####３.３.４.１．Pyenvインストール

```Terminal:
$ sudo apt -y install build-essential libffi-dev libssl-dev zlib1g-dev liblzma-dev libbz2-dev libreadline-dev libsqlite3-dev
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
$ echo 'eval "$(pyenv init -)"' >> ~/.profile
$ source ~/.profile
```

#####３.３.４.２．Pythonインストール

・インストールするPythonのVer.で作業を行うフォルダ（work）を作成
・作業フォルダ以下の環境のみPython3.9.0にする

```Terminal:
$ pyenv versions
$ pyenv install 3.9.0
$ mkdir ~/work
$ cd ~/work
$ pyenv versions
$ pyenv local 3.9.0
$ pyenv version
$ python -m pip install --upgrade pip
$ python -m pip install robotframework==3.2.2
$ python -m pip install robotframework-seleniumlibrary==4.5.0
$ python -m pip install pyautogui==0.9.52
$ pip freeze
```

####３.３.５．ChromeDriver設定

・GoogleChromeを使ったテストを想定

#####３.３.５.１．GoogleCromeインストール

①任意のブラウザを使い https://www.google.com/intl/ja_jp/chrome/ にアクセス
![3.3.5.1_01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/7db8b7f3-da85-ba80-2644-1884eed609c5.png)

②64ビット .deb（Debian/Ubuntu 用）を選択
③「同意してインストール」を押下
![3.3.5.1_02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/9d5498f8-73fe-cccd-6740-ba9d8b66b4d0.png)

④ポップアップ「google-chrome-stable_current_amd64.debを開く」表示
⑤「ファイルを保存する」を選択し、「OK」を押下
![3.3.5.1_04.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/064805e3-28b5-e3bd-7074-7be1b373a5f8.png)

⑥「google-chrome-stable」が起動するので、「インストール」を押下
![3.3.5.1_06.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/5ca5b8b5-62d1-d5e1-6f3f-c87ff7e6a291.png)

⑦確認がポップアップ表示される
⑧パスワードを入力し実行
![3.3.5.1_07.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/2bdbf1bb-1747-0aa4-c223-b66a3aae4629.png)

⑨インストールが完了したらポップアップを閉じる
⑩Terminalを起動し下記コマンドを実行
⑪表示されたバージョンを確認する
![3.3.5.1_10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/9aeda37b-7a8d-eb48-d175-6e417c099c97.png)



#####３.３.５.２．ChromeDriverインストール

①任意のブラウザを使い http://chromedriver.chromium.org/downloads/ にアクセス
②事前に確認したGoogleChromeのバージョンの頭二桁と同一のDriverを選択
（例：Current Releases >  ChromeDriver 87.0.4280.88）
![3.3.5.2_01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/074a0de4-ee65-5a67-5b78-bdf9fc4f73e7.png)

③「chromedriver_linux64.zip」リンクを押下
![3.3.5.2_03_2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/18cdec65-aa6d-a99c-1fb4-d1fa8bea8ee3.png)

④Terminalを起動し「ダウンロード」フォルダへ移動
![3.3.5.2_04_2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/1c4a531b-9e2b-804e-6e2b-96cd5171e99e.png)

⑤ZIPファイルを解凍し /bin/ 直下に配置
![3.3.5.2_05.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/6cfbba7a-83ad-c720-37cf-5a95a6516a9e.png)


#####３.３.５.３．GoogleDrive動作検証

・下記操作でブラウザが起動しグーグルのトップ画面が表示されれば成功

```Terminal:
$ cd ~/work
$ python
>>> from selenium import webdriver
>>> drv = webdriver.Chrome()
>>> drv.get('https://www.google.com/')
>>>
```

####３.３.６．Robotframework動作検証

①「work」フォルダ内に移動し検証用のファイル（test.robot）を生成

```Terminal：
$ cd ~/work
$ nano test.robot
```

②下記内容を記述し保存

```nano:test.robot
*** Settings ***
Library         Seleniumlibrary

*** Variables ***
${LOGIN URL}    https://www.google.co.jp/
${BROWSER}      Chrome

*** Test Cases ***
正規ログイン
    ブラウザを起動しGoogleを表示する
    [Teardown]  Close Browser

*** Keywords ***
ブラウザを起動しGoogleを表示する
    Open Browser    ${LOGIN URL}  ${BROWSER}
    Title Should Be  Google
```

③robotコマンド実行

```Terminal
$ python -m robot test.robot
```

![4.2_02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/ba40d459-560e-2125-07ff-7f60e60ab445.png)

④生成された「report.html」をgoogle-chromeコマンドで実行
![4.2_04.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/173cdeba-5c51-49ff-6a5c-555aafccc563.png)

![4.2_05.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487902/1fbb61ba-8486-c8c2-6f8f-6c439609c487.png)

##４．まとめ

以上、Proxy環境下でのRobotoframeworkの基本設定でした。

私の環境で詰まったのは、Proxyパスワード部分に「@」を含む構成にしていた為、
うまく認証が通らずなかった部分でした。

次回「カスタマイズ編」では、Proxy認証が必要な環境でRobotframeworkを実行した際に
ブラウザ起動毎に求められるID/Password認証を自動化する為の手順をまとめます。