コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2024年11月11日 >>> 2024年10月29日
link もっと後

2024年11月11日

Pythonのテストフレームワーク

目次: Python

最近Pythonを触ることが増えたのでテストについて調べようと思い立ちました。超有名テストフレームワークpytestがありますので、無から使い始めるまでを試します。

環境はDebian Testingで、ツールのバージョンはpython 3.12.6, pytest 8.2.2です。

設定ファイルは新し目のpyproject.tomlにします。その他の選択肢についてはpytestのドキュメントを参照ください。設定ファイルではpytest実行時のオプション、テスト用のスクリプトが置いてあるディレクトリを指定します。

pytestの設定

# pyproject.toml

[tool.pytest.ini_options]
minversion = "6.0"
addopts = "-ra -q"
testpaths = [
    "tests",
]

サンプルにあるオプションの説明をしておくと、

  • -ra: パスしなかった結果だけレポートする
  • -q: バージョン情報などのメッセージを抑制する

となります。これらの効果を打ち消したければ、

  • -rA: 全ての結果をレポートする
  • -vまたは-vv: メッセージ全て(-vvだとより大量に)表示する

オプションを使うと良いみたいです。

テスト対象を作成する

全体構造はこんな感じです。

ディレクトリとファイル構造
.
|-- pyproject.toml
|-- sample
|   `-- main.py
`-- tests
    |-- __init__.py    ★★空っぽでOK★★
    `-- test_main.py

テストするにはテスト対象のコードが必要です。とりあえず成功と失敗を見たいので、合っている関数と間違っている関数の2つを作りました。アホみたいなコードですけど気にしないでください。

テスト対象のコード

# sample/main.py

def my_add(a, b):
    print('my_add!!!!')
    return a + b

def my_wrong_add(a, b):
    print('my_wrong_add!!!!')
    return a + b + 1

テストするためのコードは下記のとおりです。クラスを作ってその下にメソッドを足していくのが基本的な使い方です。

テストのコード

# tests/test_main.py

import pytest
from sample.main import my_add, my_wrong_add

class TestAdd:
    def test_add(self):
        assert my_add(1, 2) == 3

    def test_wrong_add(self):
        assert my_wrong_add(1, 2) == 3

クラスに分ける理由が良くわからなかったのですが、世の中のテスト達を見ているとどうもクラスごとにmarkを付けて、Linuxだったら実行する、Macだったら実行するなどの条件を追加する単位として使うようです。

テストの実行

実行は簡単でpytestコマンドを実行するだけです。

成功と失敗が発生する実行結果
$ pytest
.F                                                                       [100%]
=================================== FAILURES ===================================
____________________________ TestAdd.test_wrong_add ____________________________
 
self = <tests.test_main.TestAdd object at 0x7f617eab4650>
 
    def test_wrong_add(self):
>       assert my_wrong_add(1, 2) == 3
E       assert 4 == 3
E        +  where 4 = my_wrong_add(1, 2)
 
tests/test_main.py:9: AssertionError
----------------------------- Captured stdout call -----------------------------
my_wrong_add!!!!
=========================== short test summary info ============================
FAILED tests/test_main.py::TestAdd::test_wrong_add - assert 4 == 3
1 failed, 1 passed in 0.03s

関数my_add()のテストは成功し、my_wrong_add()のテストは失敗します。意図通りですね。my_wrong_add()を修正すればテスト成功する様子も簡単に確認できるはずです。

全て成功する実行結果
$ pytest
..                                                                       [100%]
2 passed in 0.00s

テストはスクリプト、テストクラス、関数を指定して部分的に実行できます。

部分的にテストを実行する方法
#### スクリプトを指定

$ pytest tests/test_main.py
..                                                                       [100%]
2 passed in 0.00s


#### クラスを指定

$ pytest tests/test_main.py::TestAdd
..                                                                       [100%]
2 passed in 0.00s


#### 関数を指定

$ pytest tests/test_main.py::TestAdd::test_add
.                                                                        [100%]
1 passed in 0.00s

失敗するテストだけ何度も再実行するときに便利ですね。

テストが出力した結果はどこへ?

どちらの関数もprint()しますが、失敗したテストの標準出力のみが表示され、成功したテストの標準出力は無視されます。もし成功したテストも見たければ-rAを指定してください。

成功するテストの標準出力も表示する
$ pytest -rA
..                                                                       [100%]
==================================== PASSES ====================================
_______________________________ TestAdd.test_add _______________________________
----------------------------- Captured stdout call -----------------------------
my_add!!!!
____________________________ TestAdd.test_wrong_add ____________________________
----------------------------- Captured stdout call -----------------------------
my_wrong_add!!!!
=========================== short test summary info ============================
PASSED tests/test_main.py::TestAdd::test_add
PASSED tests/test_main.py::TestAdd::test_wrong_add
2 passed in 0.00s

とりあえず基本的な使い方はこんなもんかなと思います。また気が向いたら書きます。

編集者:すずき(2024/11/15 23:26)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2024年11月6日

Ubuntu 24.04 LTS on ThinkPad X1 Carbon Gen 12

目次: Linux

会社ではThinkPad X1 Carbon 12th GenにUbuntu 24.04 LTSをインストールして使っています。Lenovoが公式サポートしている(Lenovoのサイトへのリンク、正確にはUbuntu 22.04を正式サポート)だけあり、大体は問題なく動作しますが、使って数日にして既に困った点が2つほど出てきました。

困った点その1はWi-Fiです。会社のWi-Fiと相性が悪いのか接続がブチブチ途切れます。全く仕事にならないので、諦めてUSB接続の有線Ethernetアダプタを使っています。有線接続バンザイ。

困った点その2は感圧式タッチパッドです。Gen 12からクリック用のボタンを廃し、タッチパッドは単なる板になりました。板を押した圧力を検知してゴツンと押し返すことでクリック感を表現するデバイスです。個人的には手が疲れるので嫌いです。

感圧式タッチパッドのドライバがおかしいのか、たまに感圧機能がバカになりクリックにめちゃくちゃ力が必要になってしまいます。この症状が発生すると設定ウインドウにタッチパッドの項目が出なくなります。もしこの症状になったときは、

Ubuntu 24.04 LTSタッチパッド復活の呪文
$ sudo rmmod i2c_hid_acpi && sudo modprobe i2c_hid_acpi

これで直りました。この直し方見つけた人すごいですね。どうやって見つけたんだろうね……?

編集者:すずき(2024/11/15 23:47)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2024年11月2日

Python - まとめリンク

目次: Python

一覧が欲しくなったので作りました。

編集者:すずき(2024/11/15 23:25)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2024年10月31日

DENSOの最終勤務日

最終勤務日でした、入門カードや会社のPCを返却してきました。在籍期間はNSITEXE(品川のオフィス)が約5年、DENSOが約1年(新橋のオフィス)でした。

やってたこと

DENSOは主に自動車メーカー直請け(俗に言うTier 1)で部品、電装品を作っている会社です。私はNSITEXEに入社したこともあり、DENSOとの合併後も半導体のIPを開発する部署に所属していました。正確にはハードウェアに付随するソフトウェア開発を行っていました。いわゆるBSPとかファームウェアと呼ばれる部分になるかと思います。

会社全体を見渡せばソフトだけでなく、ハード、機械設計、プラントのようなものまであって、自動車産業の裾野の広さを感じます。自分の仕事が好きに選べるかどうかは正直言って配属次第ですが、全員のワガママは叶えられません。Panasonicも同じでした、これは大企業の仕方ない一面でしょう。どうしても気に入らないなら別の部署に移籍する制度もあるみたいです。使ったことないので詳細は知らない。

企業風土は紙文化の残るやや古い日本の大企業ですが、時代の流れに乗るべく刷新を頑張っていました。やや大企業病(実務を下請けに丸投げで、社員は納期の管理しかしない)に掛かりかけている部分もありそうですが、エンジニア目線としてはものづくり会社の気風が強く、技術的にはさっき言ったとおりで幅広くて面白いと思います。あと大企業の割に経営陣との距離が近いというか、偉い人たちのフットワークが軽い感じがします。

辞めた理由

実は辞める気はあまりなくて管理職の昇格試験も受けてました。そんななかで突然辞めたので非常に迷惑を掛けてしまいました、申し訳ない。辞める理由を聞かれましたが、嫌なことがあったわけじゃないです。むしろDENSO良い会社ですよ、転職考えている方なら受けてみてはいかがでしょう。

理由は月並みですけど年齢です。40歳過ぎてこのまま管理職になるのも良かったですし、最後にもう一回くらい何かにチャレンジするも良かったですし、とぼんやり思っていたところに、運良くチャレンジできそうなチャンスが訪れたので乗りました。一度しかない人生なのでやりたいことをやれるときにやってみようと思いました。

年齢的に数年先の保証もないベンチャー企業に行くのは迷うところでしょうけど、NSITEXE時代を思い出してベンチャーの雰囲気は結構好きだったなー、と一歩前に踏み出せました。もちろん会社が急に消滅して40半ばで無職として放り出されるリスクはあります。とはいえ最近の動向を見ていると、

  • 大企業は傾けば40〜50代をリストラするし、その後の面倒も見ない(Panasonicで何度も見た風景)
  • 人手不足の影響か40歳以上は取りません!みたいな足切りする企業が減った

労働者側から見たらリストラも会社がなくなるのも職を失うという意味では一緒です。昔と違って40半ばで無職となっても詰みではなさそうですし、その時はその時でなんとかするしかない、そのために腕を磨いておくしかないだろう……と思える環境に変わってきたことも要因の一つです。

編集者:すずき(2024/11/04 15:17)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2024年10月30日

マンガ紹介

目次: マンガ紹介

お気に入りのマンガ紹介シリーズ。最近完結した短めの作品を紹介します。

マイナススキル持ち四人が集まったら、なんかシナジー発揮して最強パーティーができた件(全4巻、2022年〜2024年)
RPG的ファンタジー世界が舞台です。主人公達4人が致命的に悪い効果を持つ「マイナススキル」を消せると噂のダンジョンに偶然集まります。マイナススキルの悪い効果を打ち消しあう出会いの順、奇跡の組み合わせに気づくパズルのような展開が面白かったです。世界観の説明をほぼ省略し「なんかしらんがそうなる」の一点張りで通す点も個人的には好きです。読みやすくてテンポが良いです。
ゴリせん〜パニックもので真っ先に死ぬタイプの体育教師〜(全7巻、2021年〜2024年)
あるあるなシチュエーションを逆手に取ったギャグ漫画です。主人公は体育教師のゴリせんで、なぜか学校に次々と押し寄せる強そうor悪そうな奴らに必ず襲われます。襲う側はやる気満々なものの、ゴリせん側は圧倒的に強いうえに本人は無自覚で、全てノーダメージ&いつのまにか勝っています。アリとゾウの戦いですね。襲う側の空回りやボコられた後のギャップが面白いです。
編集者:すずき(2024/11/02 20:33)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2024年11月11日 >>> 2024年10月29日
link もっと後

管理用メニュー

link 記事を新規作成

<2024>
<<<11>>>
-----12
3456789
10111213141516
17181920212223
24252627282930

最近のコメント20件

  • link 21年9月20日
    すずきさん (11/19 01:04)
    「It was my pleasure.」
  • link 21年9月20日
    whtさん (11/17 23:41)
    「This blog solves my ...」
  • link 24年10月1日
    すずきさん (10/06 03:41)
    「xrdpで十分動作しているので、Wayl...」
  • link 24年10月1日
    hdkさん (10/03 19:05)
    「GNOMEをお使いでしたら今はWayla...」
  • link 24年10月1日
    すずきさん (10/03 10:12)
    「私は逆にVNCサーバーに繋ぐ使い方をした...」
  • link 24年10月1日
    hdkさん (10/03 08:30)
    「おー、面白いですね。xrdpはすでに立ち...」
  • link 14年6月13日
    2048player...さん (09/26 01:04)
    「最後に、この式を出すのに紙4枚(A4)も...」
  • link 14年6月13日
    2048playerさん (09/26 01:00)
    「今のところ最も簡略化した式です。\n--...」
  • link 14年6月13日
    2048playerさん (09/16 01:00)
    「返信ありがとうございます。\nコメントが...」
  • link 14年6月13日
    すずきさん (09/12 21:19)
    「コメントありがとうございます。同じ結果に...」
  • link 14年6月13日
    2048playerさん (09/08 17:30)
    「私も2048の最高スコアを求めたのですが...」
  • link 14年6月13日
    2048さん (09/08 17:16)
    「私も2048の最高スコアを求めたのですが...」
  • link 14年6月13日
    2048playerさん (09/08 16:10)
    「私も2048の最高スコアを求めたのですが...」
  • link 02年8月4日
    lxbfYeaaさん (07/12 10:11)
    「555」
  • link 24年6月17日
    すずきさん (06/23 00:12)
    「ありがとうございます。バルコニーではない...」
  • link 24年6月17日
    hdkさん (06/22 22:08)
    「GPSの最初の同期を取る時は見晴らしのい...」
  • link 24年5月16日
    すずきさん (05/21 11:41)
    「あー、確かにdpkg-reconfigu...」
  • link 24年5月16日
    hdkさん (05/21 08:55)
    「システム全体のlocale設定はDebi...」
  • link 24年5月17日
    すずきさん (05/20 13:16)
    「そうですねえ、普通はStandardなの...」
  • link 24年5月17日
    hdkさん (05/19 07:45)
    「なるほど、そういうことなんですね。Exc...」

最近の記事3件

  • link 24年12月9日
    すずき (12/15 15:17)
    「[nvJPEGとNVJPGとJetson APIその4 - Jetson Linux API] 目次: Linux半年経ったら...」
  • link 24年12月13日
    すずき (12/15 05:15)
    「[nvJPEGとNVJPGとJetson APIその6 - Jetson Linux API JPEG encode編] 目次...」
  • link 23年4月10日
    すずき (12/15 05:13)
    「[Linux - まとめリンク] 目次: Linux関係の深いまとめリンク。目次: RISC-V目次: ROCK64/ROCK...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www2.katsuster.net
RDFファイル RSS 1.0

最終更新: 12/15 15:17