.

Selenium で BDD

BDD とは

ビヘイビア駆動開発(Behavior Driven Development; BDD) より

ビヘイビア駆動開発とは、プログラム開発手法の一種で、テスト駆動開発から派生した物である

Gherkin

BDD記法としては, Gherkin (ガーキン) というものに沿っており, 以下の3つから成っています

  • Given (前提 -> 状態を記述)
  • When (もし -> 振舞いを記述)
  • Then (ならば -> 振舞いの結果を記述)

参考
https://cucumber.io/docs/gherkin/languages/
https://cucumber.io/docs/gherkin/reference/

1
2
3
Describe an initial context (Given steps)
Describe an event (When steps)
Describe an expected outcome (Then steps)

各言語での BDD フレームワーク

実際に各プログラミング言語で BDD フレームワークが存在します
(上記 wikipedia より一部抜粋)

各フレームワークと selenium, appium などを組み合わせて使用することが一般的かと思います

  • Ruby
    • RSpec
  • Java
    • JBehave
    • Instinct
    • JDave
    • beanSpec
    • Tumbler
  • .Net
    • NSpec
    • Specter
  • Groovy
    • GSpec
    • easyb
  • Python
    • PySpec
    • behave

Python での BDD フレームワーク

2年前の記事ですが, Python の BDD のフレームワークの比較です
https://automationpanda.com/2019/04/02/python-bdd-framework-comparison/

以下の 5 つが紹介されていました
(star は 2021/03 時点)

star の数とメンテされているかどうかからも behave がよさそうです
上記サイトでは pytest-bdd が推奨されていました, こちらもメンテナされているようです

詳細確認できていませんが, gauge もよさそうです
Thoughtworks が作成しており, 開発も活発のようです
Python以外の言語でも使用できます

https://gauge.org/
https://github.com/getgauge/gauge

[Python] Selenium + BDD フレームワークのサンプルコード

こちらに slenium + BDD(behave) のサンプルコードを置いています

https://github.com/ki4070ma/selenium-bdd-sample

Hexo の Plugin で出来ること (Hexo3)

Instagram の埋め込み

instagram を引用するため

  • plugin: hexo-tag-instagram

インストール

1
$ npm install hexo-tag-instagram --save

使い方

1
{% instagram true 50% https://www.instagram.com/p/BsOGulcndj-/ %}
  • true: captioned
  • 50%: width

と書くと以下のように表示されます

(もっとも いいね された投稿のようです. world_record_egg . こちら記録を狙っての投稿のよう)

tweet の埋め込み

tweet を引用するため

  • plugin: hexo-tag-twitter

インストール

1
$ npm install hexo-tag-twitter --save

使い方

1
{% twitter https://twitter.com/chadwickboseman/status/1299530165463199747 %}

と書くと以下のように表示されます

(もっとも いいね されたツイートのようです. Chadwick Boseman が大腸がんで亡くなった後の関係者によるツイート)

Google Photo の画像の埋め込み

画像を準備して埋め込むことが少々手間なので, スマホで写真を撮り, Google Photo にアップロードし, その URL を使用すればよいのは便利

  • plugin: hexo-tag-google-photos-album

インストール

1
$ npm install hexo-tag-google-photos-album --save

使い方

_config.yml に以下を追加し

1
2
3
4
5
6
7
8
9
10
11
12
13
googlePhotosAlbum:
descriptionLength: 140
target: _blank
rel: noopener
className: google-photos-album-area
enableDefaultStyle: true
defaultStyle: .
largeSizeThreshold: 768
largeSize: '=s1920-no'
mediumSize: '=s720-no'
smallSize: '=w225-no'
maxPics: 10
generateAlways: false
1
{% googlePhotosAlbum https://photos.app.goo.gl/x7urRFRNGDMJF5R4A %}

と書くと以下のように表示されます

Github のコードの引用

  • plugin: hexo-tag-github-code

インストール

1
$ npm install hexo-tag-github-code --save

使い方

1
{% ghcode https://github.com/pytest-dev/pytest/blob/master/setup.py 1 4 %}
  • 1 -> 開始行番号
  • 4 -> 終了行番号

と書くと以下のように表示されます

setup.pylink
1
2
3
4
from setuptools import setup

if __name__ == "__main__":
setup()

Web上にある画像の挿入

not プラグイン

使い方

1
![An Imgur Image](https://i.imgur.com/ucHPX7L.gif "An Imgur Image")

と書くと以下のように表示されます

An Imgur Image

リモートワークのために購入したもの3

Logicool のウェブカメラ
ノートPCにもカメラは付いていますが, 外部ディスプレイに接続しているのでノートPC自体は閉じており使用できていないです
また外部ディスプレイを使用しているとノートPCの画面を見ないので, ビデオ会議のときに皆に対して正面を見れないのですが, ウェブカメラを使用しているとディスプレイの上に装着でき, 皆に対して正面を向くことができます

(カメラ違いますがこのような感じ)

Tips

amazon で購入しようとしたときに, マーケットプレイスでの購入になりそうなときは, keepa で過去の価格を把握して, その価格が適正かどうかを確認するとよいです

https://keepa.com/#!

chrome extension
https://chrome.google.com/webstore/detail/keepa-amazon-price-tracke/neebplgakaahbhdphmkckjjcegoiijjo?hl=ja

Appium による macOS の操作

準備

  • macOS 10.15 以上
  • Xcode 12 以上

がインストールされている状態で, Xcode Helper app のアクセシビリティアクセスが有効化されている必要があります
App自体は以下に存在しており,

1
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Agents/Xcode Helper.app

まず /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Agents/ を Finder で開いて,
Xcode Helper app を ドラッグ&ドロップで システム環境設定Security & Privacy -> Privacy -> Accessibility のリストへもっていきます
こちらは一度のみでよいです

これで準備完了です

実行

あとは appium が実行されていて, appium-python-client がインストールされている状態であれば, 以下のコードで macOS 上の TextEditor を動かすことができます
以下のコードを script.py として保存して, 実行は pytest script.py です

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import pytest

from appium import webdriver


@pytest.fixture()
def driver():
drv = webdriver.Remote('http://localhost:4723/wd/hub', {
# automationName capability presence is mandatory for this Mac2 Driver to be selected
'automationName': 'Mac2',
'platformName': 'mac',
'bundleId': 'com.apple.TextEdit',
})
yield drv
drv.quit()


def test_edit_text(driver):
edit_field = driver.find_element_by_class_name('XCUIElementTypeTextView')
edit_field.send_keys('hello world')
assert edit_field.text == 'hello world'
edit_field.clear()
assert edit_field.text == ''


def test_sending_custom_keys(driver):
edit_field = driver.find_element_by_class_name('XCUIElementTypeTextView')
flagsShift = 1 << 1
driver.execute_script('macos: keys', {
'keys': [{
'key': 'h',
'modifierFlags': flagsShift,
}, {
'key': 'i',
'modifierFlags': flagsShift,
}]
})
assert edit_field.text == 'HI'

このあと

Appium desktop を使用して, TextEditor 上の element を確認したりして, コードを追加していけば自動による操作を追加できます

Software test に関する Slideshare

  • Black box testing

    • http://www.slideshare.net/abasit83/black-box-testing-30782934
      • What is dynamic black-box testing?
      • How to reduce the number of test cases by equivalence partitioning
      • How to identify troublesome boundary conditions
      • Good data values to use to induce bugs
      • How to test software states and state transitions
      • How to use repetition, stress, and high loads to locate bugs
      • A few secret places where bugs hide
      • [感想]
        • Specないときに, Spec知るためのExploratory testing
        • Test-to-pass -> 最低限の動作を確認するため(Normal)
        • Test-to-fail -> バグを出させるためのテスト
        • Equivalence Partitioning -> 入力/出力/操作の同値グループを作る
          • 計算機とか, 1+1, 1+2, 10+12, 100+102, …無限にあるし
          • テストデータの数を減らすため
    • http://www.slideshare.net/nivetha/black-box-testing
      • Developerがやらないのはなぜ?
        • 自分が作ったコードを壊すのは難しいから. (Disagree by Mori)
      • テストデータの種類
        • Valid
        • Invalid
        • Boundary
      • Error Guessing
        • 経験と勘から
      • [例] バイクが止まったときなに確認する? ガソリン? 整備士さんとこ行く? マニュアル, spark plug
  • White box testing

Elasticsearch, Kibanaの勉強用メモ

1. サンプルを動かす

  1. DockerでElasticsearch, Kibanaを構築
  2. curl を使用してElasticsearchに対していろいろリクエストを送る
    • ローカルにあるサンプルデータ(.json)をElasticsearchへ登録
  3. Kibanaで↑で登録したサンプルデータを使ってbalanceに関してPie chartを作成

2. Elasticsearchメモ

  1. (Tips) 手元でcurlでelasticsearchに対してrequestを送って, jsonを見やすくするためには jq を使うと良いかも
  2. (Note) ローカルにあるサンプルデータ(.json)をアップロードするとき
  • account.json内にあるようにindexが必要そう
  • link
  1. サンプルデータ

3. Kibanaメモ

  1. Pie chartの作成
  2. Kibanaからデータの登録
  3. 確認するリンク

作りたいチャート

  1. 日付毎の特定の値のカウント(A, B, C)
  2. 日付毎のログから特定の値のカウント

4. Elasticsearchに入れるデータ

  1. TBU

5. Elasticsearchにデータ入れたり

https://github.com/elastic/elasticsearch-py を使用すると吉

ref: https://qiita.com/atsushi0521/items/1d6342ef553babded8c5

スライドを作成するときに参考にするサイト

背景

毎回スライド作成するときに探している気がするのでその手間を減らすため

アイコン

  1. カジュアル

  2. フォーマル

参考

ref: https://qiita.com/atsushi0521/items/71a146d2ef0f518d71de

Macで空き容量を増やすためにやったこと

  1. まずどこで容量を食っているの確認

  2. Dockerあたりで容量を食っていた

  3. Mac関連

    • $brew cleanup -s
  4. Mac ストレージの空き領域を増やす方法 (Apple公式)

  5. その他

    • Xcodeが大きい…
    • そもそも大きな容量を積んだMacbookを買いましょう (反省)
    • (2021/03) M1 Mac(1TB)買いました, とても満足です 😀

ref: https://qiita.com/atsushi0521/items/85aca0153c33a22e74a3

Appiumのセットアップ, 使い方

Appiumのセットアップ

1
2
3
export ANDROID_HOME="~/Library/Android/sdk"
export JAVA_HOME=`/usr/libexec/java_home -v 11`
export PATH=$JAVA_HOME/bin:$PATH

使い方

Screenrecord

Appium で screen recordを使用する

Memo

ref: https://qiita.com/atsushi0521/items/660a3ac74cb4b7d734f5