ソフトウェア テストの面接、非常に変態的ですが、すぐに内定を得る方法

面接でよくある質問のまとめ

1. 数年間テストと自動テストを行ってきましたが、Selenium の原理は何ですか?
私は 5 年間のテストと 1 年間の自動テストを行いました。

Selenium は http プロトコルを使用して Web ドライバーに接続し、クライアントは Java や Python などのさまざまなプログラミング言語を使用して実装できます。

これらすべての面接の質問を 1 つの文書にまとめました。また、これらの面接の質問を共有するためのビデオ チュートリアルもすべて記事の最後にあります。必要に応じて直接視聴することも、次の小さなカードをクリックして直接クリックすることもできます。記事の最後で情報ドキュメントを無料で入手できます

2. 自動テストにはどのようなプロジェクトが適していますか?
キーワード: 不変、繰り返し、正規

最初のポイントは、需要の変化が頻繁すぎてはいけないということです。

2つ目はプロジェクトサイクルが十分長いこと、自動化コードが書かれていなかったら会社は倒産する、自動化する必要はない、ということです。

3 番目のポイントは、スクリプトを再利用できることです。「スモーク テスト、回帰テスト」などのいくつかの典型的なシナリオでは、自動テストがよく使用されます。

4 番目のポイントは、テストされたソフトウェアが標準化されているかどうかです。たとえば、要件文書があるかどうか、標準化されたインターフェイス文書があるかどうか、プロトタイプ図があるかどうか、インターフェイス設計が比較的標準化されているかどうかなどです。

5 番目の点、手動テストは完了できません。たとえば、パフォーマンス テストを同時に 1,000 人の手で行うことはできず、自動テストのコストはそれほど高くありません。

3. Python ジェネレーターとイテレーターの違いは何ですか?
イテレータは 2 つの特定のメソッド「iter()、next()」を実装する必要があるため、

ジェネレーターは、すべての反復操作をサポートするライセンス付きイテレーターであり、さらに、通常のイテレーターにはないいくつかの機能も実装します。

たとえば、send メソッドを通じてジェネレータと対話したり、close メソッドを通じて閉じたり、throw メソッドを通じて内部例外を発生させたりすることもできます。

4. なぜ Mac を使ってコードを書くのですか?
表面的な理由は、Mac が使いやすく、見た目が良いということですが、深い理由は、現在のサーバーのほとんどが Linux システムを使用しており、Mac システムも Linux システムも実際にはオリジナルの Unix システムに基づいて開発されているためです。 ;

そして Mac は基本的に開発環境とオンラインの一貫性を維持できます。

なぜ Linux を使わないのでしょうか?

Linux でコードを書くのも良い選択ですが、Linux はインターフェース操作やエンターテイメント機能がそれほど強力ではなく、Mac はバランスが取れています。

5. 自動テスト作業はどのように実行しますか?
まず、製品のビジネス特性に応じて分類し、自動化された機能テンプレートとして使用できます。

次に、限られたレベルと人員の現状に基づいて自動テスト計画を策定します。

第三に、機能的ユースケースから適切なユースケースを選択し、自動化ユースケースに変換します。

4番目はフレームワークの選択で、それを実現するためのプログラミング言語やツールの選択ですが、私たちのチームはコーディング能力が高いので、それを実現するためにPython言語を選択します。

5 番目は、自動テストのスクリプト開発です。

6 番目に、プロジェクトに従って自動実行計画を作成します。

7番目に、テストレポートの分析、自動テスト結果のレポート、および後の段階でのフォローアップメンテナンスです。

6. クロージャ関数とは何ですか?
完成したクロージャには、次の 3 つの特性が含まれている必要があります: 関数は関数内でネストされている必要があります。外側の関数の戻り値は内側の関数の関数名です。メモリでネストされた関数の関数には非グローバル関数への参照があります。変数;

簡単に言えば、クロージャー関数です。2 番目の関数は単純な関数を返すだけでなく、閉じられたスコープ内に留まります。

7. 自動テスト フレームワークを紹介してください。
前の会社で API インターフェイスの自動テスト フレームワークを構築しました。Python のユニットテスト フレームワークとリクエスト モジュールを組み合わせて使用​​し、データ駆動型思考 (ddt) と階層化された設計概念を使用してテスト ケースの自動実行を実現しました。

私のフレームワークは主に次の主要モジュールに分かれています。

モジュール 1: ケース (K カラー デス) フォルダー、インターフェイス要件に従ってカプセル化されたモジュール (登録、ログイン、リチャージ)、およびテスト ケースを保存するクラス

モジュール 2: configs (Configus) フォルダー、構成ファイル、ストレージ プロジェクトの共通構成: ファイル名、ロガー、データベース、URL アドレス

モジュール 3: データ (Detas): テスト ケースの Excel ドキュメント データを保存します。

多くの場合、テスト ケースの自動化コードは同じですが、データは異なります。データとコードは分離され、ddt によって駆動されます。この分離はデータ駆動型の考え方です。

テスト ケースのデータは Excel とデータベースに保存され、データの一部がユース ケースを表すため、コードが簡素化され、メンテナンスが容易になります。

モジュール 4: libs (ペルシャへ) フォルダー、サードパーティのライブラリ フォルダー、ddt および HTML レポート。

ddt: データが辞書の場合は ddt ライブラリを変更し、辞書内のタイトルに対応する値を取得してテスト ケース名に追加します。HTML レポートは、より美しく詳細なレポートを使用します。

モジュール 5: logs (Old Gus) フォルダー、ログ ファイルを保存します。

モジュール 6: レポート (Rui 実行時間) フォルダー。生成されたレポートが保存されます。

モジュール 7: scripts (Siguai Perth) フォルダー。カプセル化されたクラスとモジュールが保存され、一般的なツール モジュールがカプセル化されます。

定数: (Konsten die) py ファイルはストレージ ディレクトリ パス ファイルです。OS ライブラリを使用して、見つかったファイル ディレクトリを保存します。

handle_config.py: (Bean Bean.Confly) ファイルは、構成ファイルに対する読み取りおよび書き込み操作をカプセル化します。

from configparser import ConfigParser (Kang Fei Ge. Pai Er Shi) のメソッドを使用して設定ファイルを読み書きします

handle_context.py: (Bean.Contex) py ファイルはパラメータ化されたパッケージです。

reモジュールと通常のルールを使用して、パラメータ化されたsearch(翻訳:アストリンジェント)メソッドの検索とsub(翻訳:サボ)メソッドの置換操作を実現します

handle_excel.py: (Bean.Sail) py ファイルは Excel ファイルのパッケージです。

openpyxl モジュールを使用して、Excel ファイル ペアの処理、ファイルの読み取りと書き込み、テスト データ (ユース ケース データ) の保存 (ユース ケース データ) を実行します。これには、すべてのテスト ケースの取得、指定された行への実行結果の書き込みが含まれます。

ステップ 1. Excel ファイルを開きます。load_workbook (翻訳: 私のものは使用できません) を使用してファイル名を渡します。デフォルトは最初のフォームを取得するためにアクティブであり、それ以外の場合は指定されたフォームを取得します。

テーブルヘッダーの情報を取得し、iter_rows (アイテ木材細切り豚肉) メソッドを使用し、祖先の祖先をネストし、最小行番号を省略します。

zip 関数は、テーブル ヘッダーのタプルをユース ケースの各行のタプルと結合し、辞書を辞書に変換し、それをリスト one_list = [] に追加します。

handle_log.py: (bean.啷) py ファイルは、ロギングモジュールを使用してロガーを作成し、プロジェクトにログ情報を記録します。ロギングをインポートします。

1. ログ コレクターを定義します。.getLogger メソッド、コレクター ケースの名前を使用します。

2. ログ コレクターのログ レベルを指定するには、ログ オブジェクト (Saite. Laiou) の .setLevel メソッドを使用します。

3. ログ出力チャネルを定義します。

ロギングで .StreamHandler (Muhandu をタップ) を使用して、コンソールに出力します (古いルート)。

ファイルに出力します。ロギングで .FileHandler (event.Bean) メソッドを使用します (古いルート) (ファイル名を指定します。デフォルトの a が追加されます)。

4. ログ出力チャネルのログ レベルを指定するには、object.setLevel(Serter.Leo) メソッドを使用します。

5. ログ表示のフォーマット、ロギング時のフォーマッタ(Fermet)機能を定義(Old Root)

6. ドッキング、ログ コレクターを出力チャネルに接続、コレクターの addHandler (press、Bean) 関数

handle_mysql.py: (Bean.Mansekou) py ファイルは MySQL データベース パッケージです。

pymysql ライブラリを使用して mysql データベースに接続し、データベース操作をパッケージ化します。主に SQL ステートメントを実行し、データ検証を実行します。pymysql をインポートします。

import random (翻訳: 柔らかい木)、Python のランダム モジュールは乱数を生成するために使用されます。

1. リンクを確立するには、pymysql ライブラリの connect (Keniket) を使用します。

2. カーソルカーソル(焼き色)を作成します。

3.SQL文を実行する必要がある

4.SQL文を実行し、カーソルで実行(Execute)を使用します。

5. リンク オブジェクトのコミットを使用して手動で送信します (1 回のみ購入可能)

6. 実行結果を取得し、カーソルで fetchone を使用します

7. リンクを閉じ、リソースのクローズを解放します (Kelou Division)

最初にカーソルを閉じますcursor.close()

次に、カーソル オブジェクトを閉じます conn.close()

handle_request.py: (Bean.Ruikuaide) py ファイルは、リクエスト リクエスト ライブラリのカプセル化です。

インターフェースへのリクエストを開始するためのリクエスト (Ruikuaide) ライブラリを使用したカプセル化、リクエストのインポート

handle_user.py: (Bean.責任者) py ファイルは

上記のパッケージ: データベース操作、リクエスト インターフェース リクエスト パッケージ、構成ファイル パッケージ クラスを使用してユーザーを作成します。

run.py: エントリ ファイル。テストを収集して実行します。

テストケースをロードするメソッドを自動的に識別する: Discover (翻訳: Diskava) メソッド

最初にテストケースをロードします

Unittest のdefaultTestLoader で Discover (Diskava) メソッドを使用します (翻訳: fao をドロップします。Tester. Louze)

1 つ目は、. を使用して現在の py ファイルが配置されているパスを表し、test で始まる py ファイル モジュールを自動的にロードします。

2 つ目は、絶対パスでロードし、トランスコーディングに r を使用することです。

実行のユースケース

1. アクチュエーター オブジェクトを作成する必要があります。unittest で TextTestRunner を使用します (翻訳: Tester. Tester. Soft there)

one_runner = ユニットテスト.TextTestRunner()

2. スイートを実行する

one_runner.run(ワンスイート)

Web オートメーション テスト フレームワークを使用し、PO モードとキーワード駆動思考を採用し、Python の pytest フレームワークを Selenium モジュールと Allure プラグインと組み合わせて使用​​して、テスト ケースの自動実行を実現できます。

8. pytestとunittestの違いは何ですか?
まず、unittest は pytest の公式ライブラリであり、互換性と安定性に優れていますが、pytest をインストールすると、Python のバージョンとの互換性の問題が発生する可能性があります。

単体テストでのユース ケースの記述では、ユース ケースはクラスの形式で記述され、このテストケースを継承する必要があります。

pytest では関数とクラスがサポートされており、pytest にはグローバル共有のフロントとバックをサポートするファイル conftest.py があります。

ユースケースの収集に関しては、unittest ではテストローダーとテストスイートを使用して積極的にユースケースを収集およびロードします。pytest ではユースケースを自動的に識別できます。

ユースケースの分類とスクリーニングに関しては、unittestでは既存のユースケースをフィルタリングして処理するのが面倒ですが、pytestではマークを付けることで簡単にユースケースのスクリーニングを実現できます。

実行失敗のメカニズムについては、unittest では公式ライブラリが失敗再実行メカニズムを提供していませんが、pytest では失敗再実行メカニズムが組み込まれています。

実行中のプロセスでは、unittest にはサポートされているプラ​​グインはありませんが、pytest には 700 以上のプラグインがあり、サポートされているプラ​​グインは非常に豊富です。

9. リスト内包表記とは何ですか?
導出は、Python でデータを生成するための高度な使用法です。Python にはリスト導出だけでなく、辞書導出、セット導出、およびジェネレーター式もあります。

構文は同じで、for ループを通じてデータを作成する簡単な方法です。

10.POモードとは何ですか?
PO モード: 正式名: ページ オブジェクト モデル (翻訳: 一致のみ。Aobo pick t. Maodou) POM と呼ばれ、ページと UI インターフェイスの場合はページ オブジェクトと呼ばれます。

PO のアイデアは、主に 2004 年に Marktin Flowwer によって公開された記事に由来しており、最初は彼は PO ではなく、ウィンドウ ドライバーと呼ばれていましたが、その後、セレンがこのアイデアに倣ったため、PO に変更されました。

主な目的: 特定のページをプログラミング言語のオブジェクトに変換し、ページ特性をオブジェクト属性に変換し、ページ操作をオブジェクト メソッドに変換します。

自動テストでは、主にページ操作とテスト ロジックを分離するために使用されます。

11. 最もよく知られている Selenium 操作は何ですか?
基本的には、Selenium が提供する主な操作として、8 つの主要な要素の配置方法、3 つの主要な待機方法、ユーザーのクリックや入力などの一般的な操作、

アクションチェーン ファイルのアップロード、JS 操作、その他の複雑な操作など、ウィンドウ切り替え操作や iframe 切り替え操作もあります。

Selenium がオンサイトのカプセル化方法を提供していない場合は、W3C 組織が提供する Webdriver 標準を参照して、それ自体をキャプチャします。

12. Selenium でログイン ボタンをクリックする他の方法はありますか?
また、2 つの方法もあります: たとえば、物理キーボードを使用して操作し、キャリッジ リターン コマンドを発行する方法と、ログイン ボタンがフォーム内にある場合は、ユーザー入力ボックスを見つけて入力後に直接送信することもできます。 3D

13. PO モードのカプセル化原理は何ですか?
Selenium では、公式 Wiki で 6 つの原則が提供されており、実際のテスト プロセスで理解できます。

最初の原則は、パブリック メソッドがページによって提供されるサービスを表すということです。たとえば、ログイン メソッドをロゴ メソッドに、検索メソッドを機能メソッドに、登録操作をレジスタ メソッドにカプセル化できます。

2 番目の原則は、ページの内部を公開しないようにすることです。たとえば、HTML ページにもページ構造があります。

3 番目の原則は、アサーションは通常 PO では行われず、ページ ロジックとテスト ロジックは分離されるということです。

4 番目の原則は、PO のメソッドは通常、自分自身または他のページ オブジェクトを返します。これらのページ オブジェクトは要素属性になることもあります。

5 番目の原則は、ページ全体の動作を PO 全体でカプセル化する必要はなく、使用されるロジックをすべてカプセル化できるということです。

6 番目の原則は、統一された操作の場合、結果が異なる場合は、ログインに成功した場合はジャンプし、ログインに失敗した場合はエラーを報告するなど、異なる方法で表現できることです。

ログインに別の認証状況がある場合は、ログイン成功、ログインエラー、ログイン無効の 3 つの個別のメソッドにカプセル化できます。

14. Python の小さい整数プールについて聞いたことがありますか?
小さい整数プールとは、Python プログラムの実行中に、Python インタプリタがマイナス 5 から 256 までの整数オブジェクトを自動的に作成し、それをキャッシュに保存することを意味します。これを小さい整数プールと呼びます。

これらの整数がプログラム内の変数にコピーされると、Python インタープリターはこのオブジェクトを作成するためにメモリの再割り当てを続けますが、作成されたキャッシュ内のオブジェクトを直接参照します。

小さい整数プールの設計の本来の目的は、プログラムの動作効率を最適化することです。同じ整数が必要な場合、この整数プールから直接使用できるため、このオブジェクトの頻繁な作成と破棄を回避でき、改善されます。効率性とメモリの節約。

15. XPath セレクターと CSS セレクターの違いは何ですか?
CSSの記述方法はシンプルになり、xpathは比較的複雑になりますが、主流のブラウザではCSSの解析効率が高く、検索速度も速くなります。

XPath はより多くの機能をサポートし、柔軟な操作方法がより強力になり、複雑な要素の配置については、XPath がより簡潔になります。

CSS はテキストの位置決めをサポートしませんが、XPath はテキストの位置決めをサポートします。

16. 認証が必要なインターフェースにはどのように対処しますか?
まず、インターフェイスが認証にどのような方法を使用するか (cookie_session か token か) を確認します。

cookie_session の方法の場合は、requests モジュールの session クラスを直接使用して、リクエストを直接送信するためのオブジェクトを作成できます。これにより、cookie 情報が自動的に記録されます。

トークンの場合は、まずトークンがどのように返されるかを分析し、次に対応するトークンの値を抽出します。この値は、リクエストの送信時に要件に従って渡す必要があります。

17. UI オートメーションにおける一般的な待機方法は何ですか?
UI 自動テストで待機する主な方法は 3 つあります。

1 つ目の強制待機は通常は使用されませんが、主に異なるシステムが相互作用する場所で使用されます。

2 つ目は暗黙的な待機です。この種の待機はよりスマートで、グローバルに構成できますが、要素の配置にはインテリジェンスが使用されます。

3 番目の表示待機: これは Selenium のより柔軟な待機方法であり、その実現原理は実際に while ループを通じて実行する必要がある操作を試行することです。

19. find_element() と find_elements() の違いは何ですか?
find_element() : 最初に見つかった要素を返します。見つからない場合は、エラーが直接報告されます。

find_elements() : 適格な要素をすべて返してリストに入れます。見つからなかった場合、エラーは報告されず、空のリストが返されます。

20.XPATHとは何ですか?
Xpath は XML パス言語 (XML パス言語) であり、各 Web ページ内の要素の場所をクエリするために使用できます。自動テスト プロセス中に、Web ページと APP ページの要素を正確に見つけることができます。

クローラーフィールドでは、ページ構造を柔軟に解析できます。

21. リクエストモジュールがリクエストを送信するとき、パラメータを渡すにはどうすればよいですか?
まず、インターフェイスのリクエスト パラメーターの型を確認する必要があります。インターフェイスにクエリ文字列パラメーターが必要な場合は params を使用して確認し、インターフェイスに json 型パラメーターが必要な場合は json を使用して直接確認します。

ファイルをアップロードする場合は、ファイルのパラメータを通じて渡すことができます。

フォーム タイプの場合は、データを使用して渡すことができます。デフォルトでは、データはフォーム タイプ パラメータを渡すために使用されます。

データを使用してパラメータを渡すときに、リクエスト ヘッダーのコンテンツ タイプを通じてリクエスト パラメータのタイプを指定することもできます。

22. Selenium はどのようにファイルのアップロードを自動化しますか?
input 要素のファイルアップロードであれば、selenium の send_keys メソッドを介して渡すことができますが、このメソッドには比較的大きな制限があり、js を介して呼び出されるコンポーネントに遭遇した場合、いくつかの問題が発生します。

現時点では、autoit、pywinauto、pyautogui などのサードパーティ ライブラリなど、システムと対話する何らかの方法を通じてアップロード操作を完了する必要があります。

23. リストを逆にする方法は何通りありますか?
1 つ目は、逆の順序でスライスすることで反転できることです。その場合、ステップ サイズは -1 になります。

2番目の方法はリストを使用する方法で、リストにはリバース(訳注:Ruiwaier 4)と呼ばれる方法があり、これにより反転を実現できます。

24. Python のクラス メソッド、インスタンス メソッド、静的メソッドの違いは何ですか?
クラスメソッドはクラスのメソッドです。定義するときは @classmethod を追加して変更する必要があります。仮パラメータは cls で、クラスとインスタンスの両方を呼び出すことができます。

インスタンス メソッドはインスタンス オブジェクト メソッドであり、インスタンス オブジェクトのみを呼び出すことができ、クラスを呼び出すことはできません。また、仮パラメータは self でオブジェクト自体を参照します。

静的メソッドは任意の関数ですが、たまたまこのクラスに配置されているだけです。その上に @staticmethod を追加して変更する必要がありますが、オブジェクトから直接呼び出すことができます。静的メソッドはこれとは何の関係もありませんクラス;

25. Python のデコレータとは何ですか?
デコレータ (デコレータとも呼ばれる) は、Python の高レベル構文です。デコレータはクラスまたは関数によって実装できます。通常、@ 記号はデコレータを表すために使用されます。

機能: 関数またはクラスをキャストする機能を拡張するために使用されます。

26. Python のディープ コピーとシャロー コピーの違いは何ですか?
深いコピーと浅いコピーは、通常、データのネストの場合に議論されますが、ネストされたデータが変数型データの場合、データをコピーするときにこの深いコピーと浅いコピーを考慮する必要があります。

浅いコピー (リストのネストされたリストなど)、リストに付属するコピー メソッドは浅いコピーです。

copy メソッドを呼び出してリストをコピーすると、このリストのみがコピーされ、リスト内で参照される他のデータ (ネストされたリストなど) はコピーされず、直接参照されます。

浅いコピーの不完全なコピーにより、元のリストで参照されているデータが送信されて変更されると、コピーされたデータにも影響が及びます

ディープ コピーを作成するには、コピー モジュールで deepcopy メソッドを使用する必要があります。ディープコピー メソッドを呼び出してリストをコピーすると、リストがコピーされるだけでなく、リスト内で参照されている他のデータ (ネストされたリストなど) もコピーされます。コピーすることもできます。

27. PEP8の仕様は何ですか?
PEP8 仕様は Python8 拡張提案とも呼ばれ、主に Python コードの記述スタイルを目的としたガイドラインです。

例: 最初にモジュール内で、モジュール内の関数またはクラスが 2 行で区切られ、次にクラス内のメソッドが 1 行で区切られ、コード行のインデントは通常タブ キーと 4 つのスペースで表されます。

次に、PEP8 の 1 行のコードの仕様は、最大値が 79 文字である必要があることを示しています。

この仕様にはまだ多くの要件があるため、1 つずつ例を示しません。

28. Python 関数のオーバーロード メカニズムとは何ですか?
関数のオーバーロードは主に 2 つの問題を解決するために行われます。1 つ目は変数パラメーターの型、2 つ目は変数パラメーターの数です。

Python では、パラメーターで型を宣言する必要はなく、関数は任意の型のパラメーターを受け入れることができます。関数の機能が同じであれば、関数はそれを処理できます。

Python では、変数パラメーターの数を処理するために 1 つの * と 2 つの ** が使用されるため、Python では関数のオーバーロードを処理する必要はありません。

29. Python の一般的な変数パラメータのタイプと不変パラメータのタイプは何ですか?
不変のデータ型には、整数、浮動小数点、負の値、ブール値、文字列が含まれます。

変数パラメータのタイプには、辞書、リスト、セット、タプルが含まれます。

30. プロジェクトのどの段階でインターフェース自動化テストが行​​われますか?
まず、私のプロジェクトは新しいプロジェクトであり、私はインターフェースのテストを担当し、他の5人は機能テストを担当していますが、新しいプロジェクトなので、プロジェクトの開発段階からインターフェースの自動化に関わり始めました。 ;

私たちは自動化のユースケースを作成しました. yapi プラットフォームを使用してインターフェイスを管理しました, これはインターフェイスドキュメントを提供するのと同じです. 介入時間が比較的早かったため、このプロセス中に自動化で数百のバグが見つかりました。

これにより、後の機能テスト担当者が大幅に時間を節約できると同時に、頻繁なオンラインのペースに確実に追いつくことができます。

31. Python のインターンの仕組みについて学んだことがありますか?
Python プログラムを実行するとき、数字、文字、アンダースコアで構成される文字列、つまり純粋な単語と文字で構成される文字列を格納するために、空のメモリ領域が特別に割り当てられます。

この空のメモリは文字列常駐プールと呼ばれ、大きな整数プールとも呼ばれます。

いわゆるインターン メカニズムとは、プログラムの実行中に新しい文字列が作成されると、まずその文字列に従って、その文字列が常駐プール内に作成されたかどうかが常駐プール内でチェックされることを意味します。

存在する場合は直接使用し、存在しない場合は再作成し、作成後に純粋な単語文字であれば常駐プールに追加するという仕組みにより、頻繁な作成と破棄を回避できます。

このオブジェクトにより、プログラムの動作効率が向上します。

32. Python における *args と **kwargs の役割は何ですか?
これらはすべて不定長であるため、関数内のパラメータが固定されていないという問題を解決できます *args は位置パラメータをタプルに変換できます; **kwargs はキーワードパラメータを辞書に変換できます。

33. プロセス、スレッド、コラボレーション、どのように理解していますか?
プロセスはオペレーティング システムのリソース割り当ての基本単位であり、スレッドはオペレーティング システムのスケジューリングの基本単位です。コラボレーションはマイクロスレッドとも呼ばれ、コラボレーションはスレッドより小さい実行単位です。

プロセスとスレッドはオペレーティング システムに従ってスケジュールでき、同時または並列で実行できます。コラボレーションはスレッド内で行われ、同時のみで並列ではありません。

34. Python のマルチスレッドの欠点は何ですか?
Python の公式ドキュメントによると、Cpython インタープリターのグローバル インタープリター ロックの存在により、1 つのスレッドのみが複数のスレッドを同時に実行できます。

これは、Python のマルチスレッドは同時に実行することしかできず、真の並列処理を実現する方法がない、つまりマルチコア CPU のリソースを利用できないことを意味します。

35. Python は MySQL データベースをどのように操作しますか?
使用できるライブラリがいくつかあります: pymysql または mysql_clinet に接続でき、カーソル オブジェクトが確立された後、SQL ステートメントを直接実行できます。

36. Python の名前付けの祖先は何ですか?
名前付きタプルは、コレクションパッケージからインポートできるPythonが提供するnamedtupleというクラスであり、タプルクラスを継承しているため、タプルの性質を持っています。

同時に、属性にアクセスすることで取得できるようになり、タプル要素の可読性が大幅に向上し、辞書のような型に変換することもできるため非常に便利です。

37. 関数のパラメータを定義する方法は何通りありますか?
必須パラメータ、デフォルトパラメータ、可変長パラメータ

38. クラス内のメソッドを定義するためのフォームはいくつありますか?
インスタンスメソッド、静的メソッド、クラスメソッド

クラス メソッドとインスタンス メソッドはクラスまたはインスタンスに関連付けられており、それらのパラメーターは常にインスタンスまたはクラスです。

しかし、静的メソッドは通常の関数ですが、静的メソッドをこのクラスに放り込んだだけであり、そのパラメータには、それがクラスでなければならない、または誰である必要があるかは指定されていません。

39. 単体テストフレームワークのいくつかの概念とコンポーネント?
コンセプトは全部で5つあります。

TestCase: テスト ケースを作成するために使用されます。作成するすべてのテスト ケースは、テストケース クラスを継承する必要があります。

TestSuite: テストケース、つまりテストスイートをロードするためのコンテナです。

TesttLoader: テスト ケースを収集し、テスト スイートにロードするために使用されます。

TestTestRunner: テスト ケースを実行し、テキスト形式でレポートを生成するために使用されます。HTML 形式でレポートを生成するには、HtmlTestRunner に置き換えることができます。

フィクスチャ: はい、これはフィクスチャです。ユースケースまたはユースケースの事前作業と事後作業は、これで実行できます。

40. Pythonの魔法のメソッドをご存知ですか?
Python クラスに組み込まれている二重アンダースコアと終了メソッドはマジック関数と呼ばれ、特定の状況下で分割されることを学びました。

例: オブジェクトの作成時に自動的に呼び出されるクラス初期化 init は、オブジェクトの初期化に使用されます。

Python の多くの機能は、マジック メソッドを通じて実装されます。

41. Python で匿名関数を定義するにはどうすればよいですか?
Python での匿名関数の定義は非常に簡単で、ラムダ式で定義するだけです。

ラムダ式の基本的な構文は次のとおりです。ラムダ空間に関数のパラメータを追加し、コロンの後に関数の戻り値が続きます。

42. Pythonのキューモジュールキューとプロセスキューキューの違いは何ですか?
キューモジュール内のキューは、同じプロセス内でのみ通信でき、マルチスレッドのデータ対話のみを実現できますが、マルチプロセスのデータ対話は実現できません。

これにより、プロセス モジュールのキューをプロセス間で使用できるようになり、複数プロセスのデータ対話が可能になります。

43. 同期リクエストと非同期リクエストの違いは何ですか?
同期リクエストとは、スレッド内でリクエストを開始した後、返された結果を受け取るまで次のリクエストを開始できないことを意味します。

非同期リクエストとは、リクエストを開始した後、戻り結果を待っている間、同じスレッドで他のリクエストを開始し続けることができることを意味します。

44. Python で with 操作ファイルが手動で閉じられないのはなぜですか? 原理は何ですか?
Python の with キーワード。オブジェクトのコンテキスト マネージャーを開始するために使用されます。

彼の原則は次のとおりです。with を使用して open を通じてファイルを開くと、ファイル オブジェクトのコンテキスト マネージャーがトリガーされ、with のコードの実行が終了すると、コンテキスト マネージャーの exit メソッドが自動的に呼び出されます。

このメソッドでは、close を呼び出してファイルを閉じるため、ファイルを手動で閉じる必要はありません。

45. Python のガベージ コレクション メカニズムとは何ですか?
一般的に使用されている Python インタープリター CPython は、主に 3 つのガベージ コレクション メカニズムを使用して、この無効なデータの回復とメモリの解放を完了します。つまり、参照カウント、マークのクリア、世代別コレクションです。

ガベージ コレクションの戦略はこの参照カウントに基づいており、マーク クリーンアップと世代別コレクションは補助的な手段にすぎません。

46.curlとwgetの違いは何ですか?
curl は、非常に強力なパラメータ受け渡しシステムを備えた、より強力なネットワーク アクセス ツールで、HTTP プロトコルだけでなく、FTP などの多くのプロトコルもサポートしています。

単純にリクエストを送信したい場合は、wget を使用できます。ネットワークをフルタイムでテストしたい場合は、curl を使用する方が簡単です。

47. エンコードとデコードとは何ですか?
エンコードは、特定のルールに従ってある形式または形式から別の形式または形式に変換するプロセスであり、デコードはその逆です。

たとえば、プログラミングにおける文字列の場合、UTF-8 形式でバイナリ形式にエンコードする必要があることがよくあります。その後、デコード プロセスでは、このバイナリ形式を文字列形式に変換します。

ソフトウェアテストの面接メモ

また、テスト理論、Linux の基本、MySQL の基本、Web テスト、インターフェイス テスト、アプリ テスト、Python の基本、Selenium 関連、パフォーマンス テスト、LordRunner 関連などを含む、最新のソフトウェア テスト システム学習チュートリアルをまとめました。

1. ソフトウェアテストの基礎

ソフトウェアテストの手順は何ですか?
テストスクリプトをどのように記録するか?
テスト方法をどのように検討する必要がありますか?
テスト作業負荷をどのように見積もるか?
テスト設計の問題 テスト
プロセスでエラーが発生した場合、解決策は何ですか?
テスト実行の問題
テストの評価 目標
テストを改善する方法
C/S モードの長所と短所
B/S モードの長所と短所
...

3c82f41158444bcda15c822e5f8601ba.png

2、Linux  

grep と find の違いは何ですか? grep の使用法は何ですか?
IP アドレスを確認しますか?
マルチレベルのディレクトリを作成および削除しますか?
現在のユーザーのホーム ディレクトリで haha​​.txt ファイルを検索しますか?
Linux コマンドですか?
ログ ファイルを動的に表示しますか? ?
システムのハードディスク容量コマンドを表示しますか?
現在のマシンのすべてのポートを表示しますか? リッスンしますか?

85b07614953a449583a02dee5352f86c.png

3. パイソン  

Python ソース コード ファイル内のコードの行数を数え、コメント、空白行、および出力を削除しますか?
Python は cmd を呼び出し、結果を返しますか?
バブル ソート
1、2、3、4 3 つはいくつ異なりますか?繰り返しのない桁の数値?
Python を使用して 10000 以内の対称な数値を出力してください (対称的な数値の特徴: 数値は左右対称です。1、2、11、121、1221 など)
。 0 0-N の K の出現回数を返すには、-9 の K が必要です。101
~ 200 の間に素数がいくつあるかを求め、すべての素数を出力します。
三角形を入力する関数です。入力後、出力は三角形を形成できます。三角形のタイプは、テスト ケースを設計するために等価クラス分割メソッドを使用してください

4d29dda5375c46b49727deb0f22a4b1b.png

4. データベース

どのMysqlエンジンを使用していますか? 各エンジンの違いは何ですか?
クエリコマンドを最適化する方法は?
データベースの最適化?
Mysqlデータベースの操作?
データベースを最適化します? データベースのパフォーマンスを向上させます?
データの整合性とは何ですか?
.... 。

8d0e3f2061714bb783e83dba438289bb.png

5. パケットキャプチャとネットワークプロトコル

パケットキャプチャツールの使い方は?
https パッケージを取得するにはどうすればよいですか? 携帯電話のパッケージを入手するにはどうすればよいですか?
リクエスト方法にはどのようなものがありますか?
get リクエストと post リクエストの違いは何ですか? http と https の違いは何ですか?

afb3982076954fcb94b86a2b1e6d2d33.png

6. インターフェーステスト

インターフェースとは何か
モジュールリクエストが http から https に変更された場合、テスト計画はどのように策定・変更すればよいか
よく使われる HTTP プロトコルデバッグエージェント I とは何ですか HTTPS プロトコルをキャプチャするための設定手順の詳細
説明TCP/IPプロトコルの階層構造と、各層の重要なプロトコル
jmeter、インターフェイスの応答結果は次のとおりです。インターフェイス
によって生成されたゴミデータをどのようにクリーンアップするか、
3番目の処理をどうするか-パーティーインターフェース、
テストデータはどこに置くの?
データドリブンとは何ですか? パラメータ化する方法は?
……

192c573a99754dd1a76b9a64b563b5d4.png

7、インターフェースの自動化

なぜインターフェースを自動化するのですか? 
あなたはインターフェース自動化のユースケースを何件書きましたか?
たとえば、インターフェイスのリクエスト パラメータを暗号化する必要があります。どのような暗号化方式を使用し、どのように暗号化しますか? クエリを実行して結果が暗号文で返された場合、その暗号文をどのようにテストしますか 
?

67fbc0acd74346a88d0b4ddea23bbaa0.png

8. UIの自動化とアプリのテスト

UI 自動化をテストするにはどうすればよいですか?
自動テスト環境のセットアップは何ですか? 
Seleniun ライブラリではどのような関数が使用されていますか?
要素を配置するための 8 つの方法とは何ですか?
CSSの配置方法は?
adb の役割は何ですか? 
アプリの安定性はどのように機能しますか? Monkey は p (アプリの安定性テスト) をどのように使用しますか?
アプリの弱いネットワーク テストはどのように機能しますか?

d8c5f03dd09747d9baace68c9ace64d6.png

60cccc09eeb14b8b80542ada7a598767.png

9、Pytest フレームワークと Unittest フレームワーク

Unittest フレームワークのコンポーネントは何ですか? 
Unittet st フレームワークの使用方法? 
pytest フレームワークはどのようにテスト レポートを生成しますか?
bytes はどのようにして複数のファイルまたはディレクトリ全体を実行しますか? pytest 
フレームワークは最後に失敗したテスト ケースをどのように実行しますか?

d46ee47614e446e4883dc5627805052b.png

d3cb4f9f23884541a12340ccafe279f8.png

10. 性能試験

パフォーマンス テストの目的は何だと思いますか? パフォーマンス テストをうまく行うための鍵は何ですか?
サーバー側のパフォーマンス分析はどのような角度から実行されますか?
ストレス テスト、ネガティブ テスト、パフォーマンス テストをどのように理解すればよいですか?
判断方法メモリリークの有無と懸念される指標
ソフトウェアにおけるメモリリークの原因と検査方法を説明(開発言語と組み合わせて記述可能)
バリュー転送とは何か、アドレス転送とは何か、および、 2 つの違いは何ですか?
システムのボトルネックは何ですか?
...

7fd51d29aa264bdeaef4f9a23ab30bd8.png

  
11. 人事 

テストのキャリアアップはどのようなものですか? テストを行うメリットは何だと思いますか?
なぜあなたを認めなければならないのでしょうか?
あなたの個人的なベストポイントを教えてください。
テストエンジニアにはどのような資質やスキルが必要なのでしょうか?
なぜこのラインをテストすることにしたのですか?
あなたを採用したら、その部門にどのような貢献ができますか?
...

c0eafbcdb42742cbfbee4e75c2ff530.png

この文書全体は合計 216 ページあります。すべてをお見せするのは明らかに非現実的です。読書体験に影響を与えないように、内容の一部のみを示します。ご了承いただければ幸いです。できることを願っています。面接前に復習して良い仕事を見つけるのに役立ちます。また、インターネットで情報を検索して学習する時間を節約することもできます。

ビデオチュートリアルを視聴できる場所:

[ソフトウェア テスト] 300 の面接質問を使用して、ログインを支援し、1 日 1 回磨き、仕事に直接入力して、お気に入りのオファーを獲得できるようにします_哔哩哔哩_bilibili [ソフトウェア テスト] 300 の面接の質問を使用して、ログインを支援しますログインして、1 日 1 回ブラシをかけて、仕事に直接参加して、以下を含むお気に入りのオファーのビデオを合計 200 個入手しましょう: 面接の説明 1—Meituan Zhenti 1—与えられたシナリオで、テスト ケース設計のアイデアについて話します。ソフトウェアテスト資料と学習ルートの完全なセット、インタビューの説明 2—— Meituan Zhenti 2 - セッション検証とトークン検証の違いなどについて話しましょう。UP マスターからのさらにエキサイティングなビデオについては、UP アカウントをフォローしてください。https://www.bilibili.com/video/BV1SY4y1p7k6/?vd_source=74d0257ec7066cc4f9013524f0bb7013#reply175533904208

 

 

おすすめ

転載: blog.csdn.net/HUA1211/article/details/132104075