9つのRobot Frameworkテストファイルを含むフォルダがあります。そのうち8個だけを実行すればよい。最後は他のすべてを設定するために使用されるからです(私たちはこれをと呼びますconfig.robot
)。
これらすべてのテストを実行する必要がある場合は、次のことを行います。
for test_file in folder/*.robot; do
robot -b debug.log -d log/ $test_file.robot;
done
しかし、この場合は実行も可能であるという意味ですが、config.robot
これは私が望んでいません。
1つを除いて、フォルダ内のすべてのファイルに対してforループを実行する方法は?
これが役立つ場合、config.robot
除くすべてのファイルは次の命名構文に従います。すべて実行順で始まり、その後に実際の名前が続きます01__init-connection.robot
。
編集する:この質問を投稿する前に、提供された回答を見てみました。グローバルマッチングからパターンを除外そして次のようなことを書いた
shopt -s extglob
for test_file in folder/!(config).robot; do ...
ただし、Robot Frameworkはファイル名を認識しません。
Parsing 'folder/!(config).robot' failed: Data source does not exist.
だからロボットフレームワークはこの構文が好きではないようです。
私のファイル名構造に一致する正規表現に基づいて検索結果を使用して変数を設定し、その変数に対してforループを実行しようとしています。
SUITES=$(find . -regex '^[0-9][0-9][a-zA-Z_-]*')
for SUITE in $SUITES; do robot -b ...
しかし、何らかの理由で私がecho
バスルームにいるときは何も返しません。私がここで何を見逃しているのかわかりません。
答え1
Bashでは、タグは次のようになります。
shopt -s extglob
for test_file in folder/!(config).robot; do robot -b debug.log -d log/ "$test_file".robot; done
応答の更新:
shopt -s extglob for test_file in folder/!(config).robot; do ...
次に続く:
'folder/!(config).robot' 解析に失敗しました: データソースが存在しません。
「フォルダ」に「config.robot」以外に「.robot」ファイルがない場合、この現象が発生する可能性があります。考慮する:
$ mkdir folder
$ touch folder/config.robot
$ shopt -s extglob
$ shopt -u nullglob
$ for f in folder/!(config).robot; do ls --- "$f"; done
ls: cannot access folder/!(config).robot: No such file or directory
コントラスト(新しいスタート):
$ mkdir folder
$ touch folder/config.robot
$ shopt -s extglob
$ shopt -s nullglob
$ for f in folder/!(config).robot; do ls -- "$f"; done
$
ここで、for
ワイルドカードはどのファイルにも拡張されないため、ループはコマンドを実行しません。
または代替としてはい非config.robotファイルは次のとおりです。
$ mkdir folder
$ touch folder/config.robot
$ touch folder/01__init-connection.robot
$ shopt -s extglob
$ shopt -s nullglob
$ for f in folder/!(config).robot; do ls -- "$f"; done
folder/01__init-connection.robot
答え2
このコマンドを使用できますcontinue
。
また、この変数はフルパスを選択することに注意してください。
for f in folder/*.robot; do
test "$f" = folder/config.robot && continue
robot -b debug.log -d log/ "$f"
done
答え3
この試み、
for test_file in folder/*.robot;
do
[ "$test_file" != "config.robot" ] && robot -b debug.log -d log/ $test_file.robot;
done
robot
$test_file
以下のような場合にのみ実行されます。config.robot
または単に使用find
find folder/*.robot ! -name "config.robot" -exec robot -b debug.log -d log/ {} +