Selenium gridの並列動作

こんにちは、エンジニアの ksnth です。

今回は、Selenium Gridを使用して、ブラウザテストの並列動作を実施してみました。

ここではWindows11環境なので、ChromeFirefoxとEdgeの3つのブラウザでそれぞれ2つ並列で動かしてみました。

Edgeのみ、うまく並列動作ができず、MicrofoftのEdgeのWebdriver周りを調べると、癖があるようで、正しく?設定すると動くようになりました。

簡単なテストですが、Pythonでyahooサイトの検索で試しましたので、よかったらご覧ください。

環境

今回のデモの環境は以下の通りです

Windows 11

Python 3.7.3

Selenium grid

Python

・msedge-selenium-tools

Selenium grid

以下のコマンドのnodeConfig起動ではChromeFirefoxは問題ありませんでしたが、Edgeが動作しませんでした。

◆ hub
java -jar selenium-server-standalone.jar -role hub
◆ nodeConfig
java -jar selenium-server-standalone.jar -role node -nodeConfig nodeConfig.json

よく調べてみると、以下の様なコマンドならEdgeでも動くようなので、こちらで起動してみました。

◆ hub
java -jar selenium-server-standalone.jar -role hub
◆ nodeConfig
java -jar -Dwebdriver.edge.driver=msedgedriver.exe selenium-server-standalone.jar -role node -nodeConfig nodeConfig.json

ブラウザで以下のURLを開くとGrid Consoleが表示できます。

http://localhost:4444/grid/console

Chrome

Chromeの2つの並列動作のスクリーンショットです。

Firefox

Firefoxの2つの並列動作のスクリーンショットです。

Edge

Edgeの2つの並列動作のスクリーンショットです。

以上で、Selenium gridの並列動作を終わります。

ありがとうございました。

Docker によるテスト環境構築~Mac編

こんにちは、エンジニアの ksnth です。

今回は、MacでDockerを構築してみました。

ベースは、以前紹介しました、WindowsでのDocker環境構築と同じ設定ファイルで実施してみました

環境

macOS 10.15 (古いです^^;)

・Docker Desktop for Mac

Chrome

コマンド例

今回は、以下のコマンドを使いました。

・sudo docker-compose build

・sudo docker-compose up -d

動作の様子

環境構築後の様子になりますが、Docker DesktopからCLIを開いて、seleniumでyahooサイトから画面のスクリーンショットを取得するスクリプトを実行しました。

Windoesと同様、上手く動作できました。

同じく、OCRを使ったスクリプトも試したところ、こちらも問題なく動きました(変換精度はともかく..)。

15:15 な画箇③⑤                      鐘4自
Q。 アプリやゲームを検索る ツ 蘭
おすすめ     ランキング       子供        カテゴリ

無料 マ     カテゴリ別 マ
T      region PAY
1 ここ     ファイナンス
1.9娘
_          TVer(ティーバー) 民放公式テレビ配信..…
2 1 WeF エンタメ・ストリーミング コンテンッ
3.3X エディターのおすすめ
Ii記剛 血圧
3 有 品剛 健康&フィットネス・医療・健康管理
ざツ   4.4 廊
Instagram
4   OI   ソーシャル・ネットワーク
3.8
Timee スキマバイ トはタイミー /お金がすぐ.…
5       ライフスタイル
(9) 45x
          HH          固
の        アプリ         書籍       映画&TV
る             ⑤            田

Dockerが動作する環境であれば、PC依存を気にしないで、ubuntu環境で色々な試験ができるのでとても重宝してます。

以上で、Docker によるテスト環境構築~Mac編を終わります。

ありがとうございました。

SeleniumとCypressを簡単に比べてみた

こんにちは、エンジニアの ksnth です。

今回は、普段自動テストで使っているSeleniumと、自分は使ったことのないCypressを簡単ですが比べてみました。

Seleniumの方は使い慣れているPythonで作成してますが、その他サポートしている言語でもOKです。

CypressはTypeScriptで作成するようです。

環境

今回のPC環境は以下の通りです

Windows 11

Chrome

Selenium

・Cypress

・node

テーマ

Yahooサイトで「テスト自動化」を検索するところまでの操作をテストすることにしました。

Selenium

以下の様なスクリプトを作成して実行すると、以下のスクリーンショットが出力されます。

# -*- coding: utf-8 -*-
import os
import sys
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from time import sleep

options = webdriver.ChromeOptions()
options.add_argument('--hide-scrollbars')
options.add_argument('--headless')
options.add_argument('--incognito')
options.add_argument('--no-sandbox')
driver = webdriver.Chrome(options=options)

url = 'https://www.yahoo.co.jp/'
driver.get(url)
driver.implicitly_wait(30) el = driver.find_element(By.TAG_NAME, "input") el.clear() el.send_keys("テスト自動化") sleep(5) driver.set_window_size(1000, 1200) driver.save_screenshot('selenium_001.png') el = driver.find_element(By.CLASS_NAME, "_3s3YPSCNUcgAFkPwVeRyfT") el.click() sleep(5) driver.save_screenshot('selenium_002.png') driver.close() driver.quit()

Cypress

調べながら以下の様なスクリプトを作成し実行しましたが、以下の様なエラー(未キャッチ例外??)が発生して動きませんでした。

const SEARCH = "テスト自動化";

describe('cypressでテスト', () => {
  it('yahooで検索する', () => {
    cy.visit('https://www.yahoo.co.jp/');
    cy.wait(10000);
    cy.screenshot('page001');

    cy.get('.m4wO0W1Qp4Rm8IpDS5ZjR').children('._1wsoZ5fswvzAoNYvIJgrU4').should('be.visible').type(SEARCH).type('{enter}');
    cy.wait(10000)
    cy.screenshot('page002');
  });
});
  cypressでテスト
    1) yahooで検索する


  0 passing (8s)
  1 failing

  1) cypressでテスト
       yahooで検索する:
     Error: The following error originated from your application code, not from Cypress.

  > ResizeObserver loop limit exceeded

When Cypress detects uncaught errors originating from your application it will automatically fail the current test.

This behavior is configurable, and you can choose to turn this off by listening to the `uncaught:exception` event.

https://on.cypress.io/uncaught-exception-from-application
    at <unknown> (https://www.yahoo.co.jp/:0:0)

う~ん、未だに原因分からずですが、回避策としてこのエラーをスルーする方法が見つかりましたので、そのコードを追加して実行したところ、動きました、ほっ。

const SEARCH = "テスト自動化";

describe('cypressでテスト', () => {
  it('yahooで検索する', () => {
    cy.on('uncaught:exception', (error) => {
      console.log(`${error.message}`);
      return false;
    });

    cy.visit('https://www.yahoo.co.jp/');
    cy.wait(10000);
    cy.screenshot('page001');

    cy.get('.m4wO0W1Qp4Rm8IpDS5ZjR').children('._1wsoZ5fswvzAoNYvIJgrU4').should('be.visible').type(SEARCH).type('{enter}');
    cy.wait(10000)
    cy.screenshot('page002');
  });
});

スクリーンショットは以下の通りです。

ところで、Cypressは自動で動画も取得してくれるのですね、すごい!!

いかがでしょうか、Cypressは初めてということもあり、途中エラーで悩んだり、思うように動かせなかったですが、環境構築がとても楽(Seleniumと比べて)ですので、すぐに色々と試すことができます。

以上で、SeleniumとCypressを簡単に比べてみたを終わります。

ありがとうございました。

 

 

ペアワイズ法を2つのツールで比較してみた

こんにちは、エンジニアの ksnth です。

今回は、テスト技法のペアワイズ法について、有名なフリーソフトのPicMaster7.0.4Jとベリサーブ社様のGIHOZテストツールを比較してみました。

環境

今回のPC環境は以下の通りです

Windows 11

Excel 2019

お題

以下の様な分かりやすいルールの組み合わせで実施してみました。

  個人 団体
一般 1,000円 800円
小学生 500円 400円

※ただし、6歳未満と65歳以上、および県内在住の小学生は無料とする

PicMaster

テストケースはこんな感じに作成してみました。

このままですと、ありえない組み合わせも生成されてしまうため、制約表を追加しました。

このテストケースでは結果が分かっているので、結果表も追加してみました。

以上の設定でテストケースを生成してみました。

GIHOZ

同様に、GIHOZツールで「ペアワイズテスト」を選択して実施してみました。

初めて触るので、正しい設定方法か分かりませんが、先ずは勉強のつもりで設定してみました。

先ずは、パラメータ設定です。

※1=Yes、0=No と読み替えてください。。

次に、制約ですが、制約表で上手く設定できなかった(スキルの問題です..)ので、制約式で作ってみましたが、正しいか分かりません。

実際に入力した式です。

IF [一般] = 1 THEN ([小学生] = 0 AND [6歳未満] = 0 AND [65歳以上] = 0);
IF [小学生] = 1 THEN ([一般] = 0 AND [6歳未満] = 0 AND [65歳以上] = 0);
IF [6歳未満] = 1 THEN ([小学生] = 0 AND [一般] = 0 AND [65歳以上] = 0);
IF [65歳以上] = 1 THEN ([小学生] = 0 AND [6歳未満] = 0 AND [一般] = 0);
IF ([一般] = 1 OR [小学生] = 1) THEN ([6歳未満] = 1 OR [65歳以上] = 0);
IF ([一般] = 1 OR [小学生] = 1) THEN ([6歳未満] = 0 OR [65歳以上] = 1);
IF [一般] = 0 THEN ([小学生] = 1 OR [6歳未満] = 1 OR [65歳以上] = 1);
IF [小学生] = 0 THEN ([一般] = 1 OR [6歳未満] = 1 OR [65歳以上] = 1);
IF [6歳未満] = 0 THEN ([小学生] = 1 OR [一般] = 1 OR [65歳以上] = 1);
IF [65歳以上] = 0 THEN ([小学生] = 1 OR [6歳未満] = 1 OR [一般] = 1);

このほか、サブモデルも追加できますので、次回もう少し複雑なもので試したいと思いました。

以上の設定でテストケースを生成してみました。

※結果設定がなかった(ように見えた)ですが、CSVへ出力ができる機能がついてますので、あとから期待値(結果)を入力すれば、素晴らしいテストケースが作れそうですね。

いかがでしょうか、このようなテストツールがフリーで使えるなんてすばらしいですね、感謝です!!

以上で、ペアワイズ法を2つのツールで比較してみたを終わります。

ありがとうございました。

 

 

LTspiceで真空管アンプのシミュレーションをしてみた

こんにちは、エンジニアの ksnth です。

今回は、回路シミュレータの LTspiceXVIIで真空管回路のシミュレーションをしてみました。

いろいろな真空管がありますが、手持ちの12BH7のモデルを組み込んでみました。

テストモデル

以下のモデルでシミュレーションしてみました。通常はV1が数百ボルトを設定しますが、低電圧でのシミュレーションをしてみます。

パラメータはこんな感じで設定しました。

シミュレーションの様子

シミュレーションを実行し、グラフプロット画面上で「Add Trace to Plot」を選択して、プレート電流(IX(UI:Plate))を選択するとプレート特性が表示されます。

この特性から、抵抗値を決め、実際の製作時に微調整すると、早く値が求められそうですね。

参考回路でシミュレーションしてみた

参考回路はこんな感じにしました。

※以下の参考回路はシミュレーション用で作りましたので、実際の動作は不明です。

上のプレート特性から回路上のR1(R3)とR2(R4)を求めてみました。

R1(R3)=12(V) / 2.7(mA) * 1,000 = 4.4kΩ
R2(R4)=0.5(V) / 1.4(mA) * 1,000 = 357Ω

この値を入力して、その他の値は一般的な値でシミュレーションしてみました。

入力:30mV サイン波で2段増幅の様子をシミュレーションしてみました。

波形がつぶれてなくていい感じです(赤:入力、青:1段目、緑:2段目・OUTPUT)。

おおよそですが、1段目で7.5倍、2段目でトータル60倍くらいでしょうか。

ついでに周波数特性もやってみました。

以上で、LTspice真空管アンプのシミュレーションをしてみたを終わります。

ありがとうございました。

業務の自動化について

こんにちは、エンジニアの ksnth です。

※関係ないですが、今日はベースの日ですね~

今回は、業務の自動化について考えてみました。

日頃、繰り返しの確認やテストを可能な限り自動で行う目的で、スクリプトやツールを作っておりますが、一般的な業務内でも自動で行えることは多いと思ってます。

具体的に何の業務を自動化できるか?は今後の課題ですが、自動化するうえで最低限必要なことはテスト自動化と同じく、業務の「内容、入力物、手順、出力物(成果物?)」を理解することと思います。

これらが分かっていれば、その業務を自動化できるか否か、どんなツールを使って自動化するか?など次のステップに進めると思ってます。

と、頭で考えても理想論になってしまうので、簡単なサンプルで実際に手を動かしてみました。

業務の理解

サンプルの業務として、「用意されたある期間のドル円/日のExcelデータから、終値と25日移動平均と50日移動平均の線グラフを作成する」を考えてみました。

※実際の業務ではありません。

先ず、この業務を整理してみました。

・内容:入力物の「終値」データから、グラフ化したい「25日移動平均」、「50日移動平均」データを計算し、X軸に「日付」、Y軸に「終値」、「25日移動平均」、「50日移動平均」の線グラフを作成する

・入力物:Excelファイルのデータ

・手順①:「終値」データから「終値」の25日移動平均、「終値」の50日移動平均を求める

・手順②:「日付」、「終値」、「25日移動平均」、「50日移動平均」の線グラフを作成する

・出力物:「日付」、「終値」、「25日移動平均」、「50日移動平均」の線グラフ

※以上の業務はExcelでもできますし、Excelのマクロで自動化も可能ですが、用意されるデータは日々更新されますし、テキストファイルなどExcelファイル以外の場合もありますので、外部で作った方が流用しやすいと思います。

自動化の可否の検討

Pythonで検討してみると、以下の通り自動化することが可能と判断しました。

Excelデータやテキストファイルなどのデータファイルの読み込みはpandasで可能

・グラフ化はmatplotlibで可能

自動化スクリプト作成と実施

以下に、Pythonで作成したサンプルコードを載せます。

import warnings
import pandas as pd
from matplotlib import pyplot

warnings.simplefilter("ignore")
df = pd.read_excel("USD_JPY_Daily.xlsx", sheet_name = "USD_JPY_Daily")
print(df.head())

date = df['日付け'].to_list()
val_end = df['終値'].to_list()
val_start = df['始値'].to_list()
val_max = df['高値'].to_list()
val_min = df['安値'].to_list()
val_amount = df['出来高'].to_list()
val_rate_change = df['変化率 %'].to_list()
mva_25 = df['終値'].rolling(25).mean().round(1)
mva_50 = df['終値'].rolling(50).mean().round(1)

pyplot.title("USD/JPY", {"fontsize": 12})
pyplot.xlabel("date", {"fontsize": 12})
pyplot.ylabel("USD/JPN", {"fontsize": 12})
pyplot.plot(date, val_end, label='END')
pyplot.plot(date, mva_25, label='MVA_25')
pyplot.plot(date, mva_50, label='MVA_50')
pyplot.legend()
pyplot.show()

成果物

実行すると、以下の様なグラフが出力されます。

このグラフは、表示を拡大、画像へ保存することができますので、報告レポート作成に使用できます。

以下は、直近の日付を拡大したものです。


以上で、業務の自動化についてを終わります。

ありがとうございました。

Appium Desktopのアプリ操作を記録して動かす

こんにちは、エンジニアの ksnth です。

今回は、Appium Desktopのアプリ操作を記録して、記録したログでアプリを動かすツールを考えてみました。

現状はタップ選択のみ対応しましたが、将来的にはスワイプや入力なども追加したいと思います。

簡単な機能のツールですが、ちょっとしたテストができると思います。

環境

今回のデモの環境は以下の通りです

Windows 11

Python 3.7.3

・AVD Pixel_2_API_29 (Android 10, Google play)

・Appium

Python

デモの様子

先ずは、Appium操作の録画用ツールの様子です。

指定したファイル名(csv)に記録していきます。

次に、記録したcsvファイルを録画再生用ツール(いまはコマンド実行ですが、いずれはGUIで作成予定)で動かした様子です。

上の録画と同じ動きをしていることが分かります。

記録したcsvファイルの一例

以上で、Appiumからアプリ操作を記録して動かすを終わります。

ありがとうございました。