2021年のテストエンジニアのインタビューの質問の要約(回答付き)

一緒に来て

ソフトウェアライフサイクル(基本)

計画段階->要件分析->設計段階->コーディング->テスト->運用と保守

テストプロセスとは何ですか(まだ基本的です)

1)テスト要件分析段階:要件の読み取り、要件の理解、主にビジネスの学習、要件の分析、および要件レビュー会議への参加。
2)テスト計画段階:主なタスクは、テスト計画を作成し、ソフトウェア要件仕様、(要件ドキュメントからの)テスト範囲を含む全体的なプロジェクト計画、スケジュール、人的および物的リソースの割り当て、および全体的なテスト戦略の策定。リスク評価と軽減策が策定されます。
3)テスト設計段階:主にテストケースを作成するために、要件ドキュメント(プロトタイプ図)、アウトラインデザイン、詳細設計などのドキュメントを参照し、ユースケースの作成後にレビューします。
4)、テスト実行段階:環境を構築し、スモークテスト(事前テスト)を実行します。次に、正式なテストに入り、テストが終了するまでバグ管理を行います。
5)テスト評価段階:テストレポートを発行して、オンラインにできるかどうかを確認します。

プロジェクトのテストプロセス(プロジェクトの経験)

要件レビュー(開発者、製品マネージャー、テスター、プロジェクトマネージャーが実施)---要件決定(要件文書とプロトタイプバージョンの決定);

設計ドキュメントを開発します(開発者は、コードの記述を開始する前に設計ドキュメントを出力できます:開発計画、スキーマ設計、データベース設計、インターフェイスドキュメント)。

テスト計画、戦略決定、テストケースの作成-テスト計画、ユースケースレビュー。

テストバージョン(補足メンテナンスケース)を受け取った後、テストケースを実行します。

バグを送信する---開発者が変更します。

回帰テスト(新しい問題が再び見つかり、プロセスに従って実行を開始する場合があります)

レポートは、検収試験後に作成されます。

テストケースの設計方法(ユースケースを書かずに記述)

ホワイトボックステスト:ロジックカバレッジ、ループカバレッジ、基本パスカバレッジ

ブラックボックステスト:境界値分析、同値類の分割、誤った推測、原因と結果の図、状態図、テストの概要、ランダムテストシナリオ

ソフトウェアテストはいくつかの段階に分かれており、各段階のテスト戦略と要件(ここでも基本)

テストプロセスは、単体テスト、統合テスト、システムテスト、および受け入れテストの4つの主要な段階を経ます。

ユニットテスト:ソフトウェア設計の最小ユニットです(機能テスト用のモジュール)

統合テスト:テストの設計要件に従ってモジュールを組み立てることであり、主な目的はインターフェースに関連する問題を見つけることです。

システムテスト:統合テストに合格した後に実行されます。目的は、システムを完全に実行し、各サブシステムが正常に動作して設計要件を完了することができるかどうかを確認することです。

受入試験:受入基準として需要段階の「要件仕様書」を採用し、試験中の実際のユーザーの動作環境をシミュレートします。

バグの説明とサイクル(右-基本)

1.バグのタイトルは、明確に焦点を合わせて、簡潔かつ明確にする必要があります

2.問題発生の前提条件を書き留める

3.操作プロセスは、手順に従って明確に記述されている必要があります

4、実際の効果と期待される効果を書く

5.バグが発生する可能性を示すため

6.必要なスクリーンショットとログを提供し、より複雑な操作手順のビデオを提供します

7.バグレベルは、カテゴリ、致命的なバグ、重大なバグ、一般的なバグ、および建設的なコメントに分類する必要があります

8.バグが発生したソフトウェアのバージョン番号

9.バグが発生するモジュール

発見、提出、割り当て、R&D確認、R&D修理、回帰検証、合格検証、閉じる

テスト終了の基準(emmmm)

1.すべてのユースケースがテストされます。

2.カバレッジ率が基準に達しました。

3.不良率が基準に達しました。

4.その他の指標は品質基準を満たしています

テストでバグを見つけましたが、開発者はそれがバグではないと考えています。どのように解決すればよいですか(コミュニケーションスキルが低い)

1.問題を欠陥管理ライブラリに送信して記録します。

2.判断の根拠と基準を取得するには:

3.要件仕様書、製品説明書、設計書などに従って、実際の結果が計画と矛盾していないかどうかを確認し、欠陥が確認されているかどうかの直接的な根拠を提供します。

4.文書の根拠がない場合は、類似のソフトウェアの一般的な特性に従って矛盾があるかどうかを説明することにより、それが欠陥であるかどうかを確認できます。

5.設計者、開発者、顧客担当者などの関係者と話し合い、それが欠陥であるかどうかを確認します。

最後に、それをリーダーに投げて、結果を待ちます〜

バグの原因と一般的なステータスコードをすばやく区別する(12345)

ブラザー、一緒にパケットを見てみましょう。最初にパケットをキャプチャしてリクエストパケットを確認し、インターフェイスドキュメントを見て、リクエストパケットに問題があるかどうかを確認します。問題がある場合は、フロントから送信されるデータエンドが間違っています。リクエストパケットに問題がない場合は、返されたパケットを確認してください。返されたデータが間違っている、つまりバックエンド開発の問題である場合、ステータスコードは次のようになります。

ステータスコード  理由フレーズ
1XX情報(情報ステータスコード) 受信したリクエストは処理中です  
2XX成功(成功ステータスコード) リクエストは正常に処理されます  
3XXリダイレクション(リダイレクションステータスコード) リクエストを完了するには、追加のアクションが必要です
4XXクライアントエラー(クライアントエラーステータスコード) サーバーはリクエストを処理できませんでした
5XXサーバーエラー(サーバーエラーステータスコード) サーバーによるリクエストの処理中にエラーが発生しました  

 httpとhttpsの違い(暗号化された送信)

httpプロトコルとhttpsプロトコルの違い:送信情報セキュリティの違い、接続方法の違い、ポートの違い、証明書の適用方法の違い、送信情報のセキュリティの違い

1. httpプロトコル:ハイパーテキスト転送プロトコルであり、情報はクリアテキストで送信されます。攻撃者がWebブラウザとWebサーバー間の送信メッセージを傍受した場合、攻撃者はその中の情報を直接読み取ることができます。

2. HTTPSプロトコル:これは安全なssl暗号化送信プロトコルであり、データ送信のセキュリティを確保するためにブラウザとサーバー間の通信を暗号化します。

2.さまざまな接続方法

1. httpプロトコル:http接続は非常にシンプルでステートレスです。

2. HTTPSプロトコル:SSL + HTTPプロトコルで構築されたネットワークプロトコルで、暗号化された送信とID認証を実行できます。

3.さまざまなポート
httpプロトコル:使用されるポートは80、httpsプロトコル:使用されるポートは443です。

第四に、証明書の申請方法が異なります

httpプロトコル:無料のhttpsプロトコルを申請する:証明書を申請するには、caにアクセスする必要があります。通常、無料の証明書はほとんどなく、料金を支払う必要があります。

 getとpostの違い(次の記事で詳しく説明しますが、実際にはputに質問することをお勧めします)

a。GETリクエストのURLで送信されるパラメータの長さは制限されていますが、POSTでは制限されていません。

b。パラメータはURLに直接公開されるため、GETはPOSTよりも安全性が低く、機密情報の送信には使用できません。

c。GETパラメータはURLを介して渡され、POSTはリクエスト本文に配置されます。

d。GETリクエストパラメータはブラウザの履歴に完全に保持されますが、POSTパラメータは保持されません。

e。GETリクエストはURLエンコードのみが可能ですが、POSTは複数のエンコード方式をサポートしています。

f。GETリクエストはブラウザによってアクティブにキャッシュされますが、POSTは手動で設定されない限りキャッシュされません。

g。GETによって生成されたURLアドレスはブックマークできますが、POSTはできません。

h。ブラウザがロールバックしても、GETは無害ですが、POSTはリクエストを再度送信します。 

アルファテストとベータの違い(Basic ++)

アルファテストは、システム開発が完了に近づいているときのアプリケーションシステムのテストです。テスト後も、マイナーな設計変更があります。このようなテストは通常​​、プログラムやテスターではなく、エンドユーザーやその他の担当者によって行われます。1人以上のユーザーが開発環境でテストしました。

ベータテストは、開発とテストが基本的に完了したときに実行され、最終的なリリースの前に最終的なバグと問題を見つける必要があります。このようなテストは通常​​、プログラマーやテスターではなく、エンドユーザーやその他の担当者によって行われます。むしろ、ユーザーの実際の環境で1人以上のユーザーによって実行されます。 

 一般的に使用されるテストツール(学ぶことができます〜)

(フィドル、jmeter、postman、roadrunner、selenium、appium、jenkins、git、svn、zen、xssプラットフォーム、mysql、monkeyなど)

フィドル:一般的に使用されるパケットキャプチャツール。使用方法はjmeterプロキシサーバーと同じです(詳細は以下を参照) 。

jmeter:比較的強力な圧力測定ツール。説明するコラムを書きました。興味がある場合は、https://blog.csdn.net/weixin_46658581/category_11228583.html?spm=1001.2014.3001.5482をご覧ください。

postman:最も単純なインターフェーステストツールです。個人的には非常に一般的だと思います...jmeterをお勧めします-.-

サル:いくつかのポイントシリーズ https://blog.csdn.net/weixin_46658581/category_11265713.html?spm=1001.2014.3001.5482

ツールは1つか2つの文で明確ではありません、私は後で分析するために編集列を徐々に改善します~~~

インターフェイステストに関するよくある質問(emmmの基本)

1.検証に合格することは、率直に言って、通常の結果を返すかどうかにかかわらず、正しいパラメーターを渡すことです。

2.パラメーターの組み合わせ、パラメーターは渡す必要がある場合と渡す必要がない場合、パラメーターのタイプと長さ、および渡す際のビジネス上の制限の可能性があるため、ユースケースを設計するときは、これらの状況を調整して組み合わせて、すべてが確実に行われるようにする必要があります。状況をカバーすることができます。到着

3.インターフェイスのセキュリティは、いくつかの状況に分けられます。

1)確認をバイパスするには、たとえば、注文を送信するとき、商品価格パラメーターが渡され、商品価格が変更されるとき、バックエンドに確認があるかどうかによって異なります。または、お支払いの際に鞄を持って注文金額を変更しますが、変更した金額でお支払いいただければ、申し訳ありません。

2)認証をバイパスする、つまり、機能は特別な権限を持つユーザーのみが操作できるので、通常のユーザーをパスすると、それも操作できますか?

3)パラメータが暗号化されているかどうかに関係なく、これは一部のアカウントのセキュリティに関連しています。たとえば、一部のWebサイトにログインすると、ログイン情報が暗号化されます。情報を暗号化しないと、公開されます。 、これは非常に有害です。

4)パスワードセキュリティルール。パスワードを設定する際の複雑さを確認してください。

依存関係インターフェイスのテスト:アップストリームおよびダウンストリームインターフェイスの依存関係(++ + 1)

ログイン後にトークンを返すなど、依存データを処理するためにグローバル変数を使用します。他のインターフェイスにはこのトークンが必要です。次に、グローバル変数を使用してトークンパラメーターを渡します。

サードパーティのデータに依存するインターフェースをテストする方法の最も正しい答えはモックです。もちろん、それは簡単に行うことができます。

1.前のインターフェースの戻り値を取得します

2.戻り値を環境変数またはグローバル変数に設定します

3.次のインターフェースのパラメーター形式を設定します

ログインに依存するインターフェースはどうですか?

ログインインターフェイスがトークンに依存している場合は、最初にログインして、トークンをyaml、json、またはini構成ファイルに保存します。
後続のすべてのリクエストでこのデータを取得してグローバルに使用できます。Cookieのパラメーターである場合は、自動的にセッションに関連付けることができます。

インターフェイスのテストケースの例:ログイン

パラメータが必要かどうか、パラメータ間に関連付けがあるかどうか、およびパラメータ値の範囲のビジネスルール

phoneNumberとpasswordのパラメーターが正しく、ログインが成功しました

phoneNumberパラメータが正しく、パスワードタイプが文字列ではなく、ログインが失敗する

phoneNumberパラメーターが正しく、passwordパラメーターが欠落しており、ログインが失敗する

パスワードパラメータが正しく、phoneNumberが11桁を超え、ログインが失敗する

パスワードパラメータが正しく、phoneNumberが文字列ではなく、ログインが失敗する

パスワードパラメータが正しく、phoneNumberパラメータが欠落しており、ログインが失敗する

ユーザーが登録されていない場合は、ログイン失敗 パスワードエラーが返され、ログイン失敗が返されます。
パラメータは意図的に空の文字列またはnullで渡され、処理されたかどうかを確認できます。

インタビューでの一般的な使用例の設計:紙コップをテストする方法=。=(植木鉢、テーブルの場合もあります)

機能性:ウォーターカップ内の水は漏れがありません;水を飲むことができます

安全性:カップに毒やバクテリアはありません

信頼性:カップがさまざまな高さから落下するダメージの大きさ

携帯性:カップがさまざまな場所、温度などで正常に使用できるかどうか。

互換性:カップがジュース、普通の水、アルコール、ガソリンなどを入れることができるかどうか。

使いやすさ:カップが熱くなっているか、滑り止め対策が施されているか、飲みやすいかどうか

ユーザードキュメント:ユーザーマニュアルには、カップの使用法、制限、使用条件などの詳細な説明がありますか?

疲労試験:カップに水(ケース1)を24時間入れて漏れ時間と状況を確認し、ガソリン(ケース2)を24時間入れて漏れ時間と状況を確認します。

圧力テスト:針を使用し、針に重さを加え続けて、針がどのくらいの圧力を浸透するかを確認します

APPテストのどの側面(はい、はい、または基本) 

アクセス許可テスト、インストール、操作、アンインストールテスト、UIテスト、機能テスト、パフォーマンステスト、中断テスト、互換性テスト、セキュリティテスト、回帰テスト、アップグレード更新テスト、ユーザーエクスペリエンステスト

Fiddlerはパケットをキャプチャするために使用されます(はい、私は幸運にも段階的に尋ねられました)

web:フィドラーツールを開いた後、ブラウザーに移動してWebページを開くと、フィドラーは自動的にパケットをキャプチャし、要求応答データをキャプチャします。ローカルプロキシとして自動的に設定され、httpsプロトコルのパケットを取得するように設定することもできます。【プロ〜ブラウザF12でわかる】

携帯電話:携帯電話のネットワーク設定で、プロキシサーバーを設定します。フィドラーをプロキシサーバーとして使用し(フィドラー自体はリモート接続をサポートするように設定する必要があります)、携帯電話はフィドラーツールに接続されているため、携帯電話のプロキシサーバー設定ページでコンピューターのIPアドレスを入力する必要がありますこれにより、フィドラーツールとフィドラーポート番号8888が開き、携帯電話がフィドラーに接続し、フィドラーを介してインターネットにアクセスできるようになります。

パフォーマンステストとは=。=(千語emmm)

システムに一定のプレッシャーがかかっている場合は、CPU、メモリ、ディスク、ネットワーク帯域幅、TPS、応答時間、同時ユーザー数などのさまざまな指標を確認し、システムのパフォーマンスが以下の組み合わせをシミュレートして実行されているかどうかをテストします。実稼働環境のビジネス上の圧力と使用シナリオ。実稼働パフォーマンスの要件を満たすことは、指定された動作条件下でシステムの機能を検証することです。

負荷テストとは何ですか(反論する力はありません)

負荷テストは、主に特定の負荷の下でのソフトウェアシステムのパフォーマンスを調べます。これは、ユーザーの観点から、特定の条件下でのソフトウェアシステムのパフォーマンスを観察することです。望ましい結果は、ユーザーのパフォーマンスインデックス要件が満たされることです。パフォーマンス指標は通常、応答時間、同時実行性などに反映されます。

テスト環境構築(トラブルと単純なbbが怖い)

1. tomcat、MySQLインストールパッケージ、JDK(Java Development Environment Toolkit)をwinscpを介してLinuxにアップロードします。

2. tar -zxvf decompression packageコマンドを使用して、jdk、tomcat、およびmysqlを解凍してインストールし、jdk環境変数を構成します。

3. tomcateで指定されたwebappsディレクトリにwarパッケージ(webプログラム)を置き、サーバーを起動します。(startup.shのパスを入力し、Enterキーを押して実行します)

一般的なLinuxコマンド

一般的な操作コマンド

shutdown -h now 立刻关机 
shutdown -h 5   5分钟后关
poweroff        立刻关机
shutdown -r now 立刻重启
shutdown -r 5   5分钟后重启
reboot 立刻重启
cd / 切换到根目录cd 
/usr 切换到根目录下的usr目录
cd …/ 切换到上一级目录 或  cd … cd ~ 切换到home目录
cd - 切换到上次访问的目录
ls 查看当前目录下的所有目录和文件
ls -a查看当前目录下的所有目录和文件(包括隐藏的文件)
ls -l 列表查看当前目录下的所有目录和文件(列表查看,显示更多信息)
ls / 查看指定目录下的所有目录和文件
查找命令
grep    命令是一种强大的文本搜索工具
find    命令在目录结构中搜索文件,并对搜索结果执行指定的作。
locate  让使用者可以很快速的搜寻某个路径。
whereis 命令是定位可执行文件、源代码文件、帮助文件在文件系统中的位置。
which   命令的作用是在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。
命令格式
crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
参数说明:
-u user:用来设定某个用户的crontab服务
file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。
-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l:显示某个用户的crontab文件内容。如果不指定用户,则表示显示当前用户的crontab文件内容。
-r:删除定时任务配置,从/var/spool/cron目录中删除某个用的crontab
文件,如果不指定用户,则默认删除当前用户的crontab文件。
命令:pwd 查看当前目录路径
命令:ps -ef 查看所有正在运行的进程
命令:kill pid 或者 kill -9 pid(强制杀死进程) pid:进程号
ifconfig:查看网卡信息
命令:ifconfig 或 ifconfig | more
ping:查看与某台机器的连接情况
命令:ping ip
netstat -an:查看当前系统端口
命令:netstat -an
搜索指定端口
命令:netstat -an | grep 8080

ディレクトリ操作[追加、削除、変更、チェック]

【增】 mkdir
mkdir aaa      在当前目录下创建一个名为aaa的目录
mkdir /usr/aaa 在指定目录下创建一个名为aaa的目录
【删】rm
删除文件:
rm 文件    删除当前目录下的文件
rm -f 文件 删除当前目录的的文件(不询问)
删除目录:
rm -r aaa  递归删除当前目录下的aaa目录
rm -rf aaa 递归删除当前目录下的aaa目录(不询问)
全部删除:
rm -rf *   将当前目录下的所有目录和文件全部删除
rm -rf /* 【慎用!慎用!慎用!】将根目录下的所有文件全部删除
注意:rm不仅可以删除目录,也可以删除其他文件或压缩包,为了方便大家的记忆,无论删除任何目录或文件,都直接使用 rm -rf 目录/文件/压缩包
【改】mv 和 cp
重命名目录
命令:mv 当前目录 新目录
例如:mv aaa bbb 将目录aaa改为bbb
剪切目录
命令:mv 目录名称 目录的新位置(将/usr/tmp目录下的aaa目录剪切到/usr目录下面 mv/usr/tmp/aaa/usr)
拷贝目录
命令:cp -r 目录名称 目录拷贝的目标位置 -r代表递归
(将/usr/tmp目录下的aaa目录复制到 /usr目录下面 cp /usr/tmp/aaa /usr)
【查】find
命令:find 目录 参数 文件名称
示例:find /usr/tmp -name ‘a*’ 查找/usr/tmp目录下的所有以a开头的目录或文件

ファイル操作[追加、削除、変更、チェック]

【增】touch
touch 文件名(示例:在当前目录创建一个名为aa.txt的文件 touch aa.txt)
【删】 rm
rm -rf 文件名
【改】 vi或vim
vi编辑器的3种模式
基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:
1、command mode 命令行模式下的常用命令:
【1】控制光标移动: ↑,↓,j
【2】删除当前行: dd
【3】查找:/字符
【4】进入编辑模式: i o a
【5】进入底行模式: :

2、Insert mode编辑模式
编辑模式下常用命令:
【1】ESC 退出编辑模式到命令行模式;

3、last line mode底行模式下常用命令:
【1】退出编辑: :q
【2】强制退出: :q!
【3】保存并退出: :wq

【查】文件的查看命令:cat/more/less/tail
cat:看最后一屏 cat sudo.conf(使用cat查看/etc/sudo.conf文件,只能显示最后一屏内容)

more:百分比显示more sudo.conf(使用more查看/etc/sudo.conf文件,可以显示百分比,回车可以向下一行,空格可以向下一页,q可以退出查看)

less:翻页查看less sudo.conf(使用less查看/etc/sudo.conf文件,可以使用键盘上的PgUp和PgDn向上 和向下翻页,q结束查看)

tail:指定行数或者动态查看tail -10 sudo.conf(使用tail -10 查看/etc/sudo.conf文件的后10行,Ctrl+C结束)


打包和压缩
Windows的压缩文件的扩展名 .zip/.rar
linux中的打包文件:aa.tar
linux中的压缩文件:bb.gz
linux中打包并压缩的文件:.tar.gz
Linux中的打包文件一般是以.tar结尾的,压缩的命令一般是以.gz结尾的。
命令:tar -zcvf 打包压缩后的文件名 要打包的文件,其中:z:调用gzip压缩命令进行压缩
c:打包文件
v:显示运行过程
f:指定文件名
示例:打包并压缩/usr/tmp 下的所有文件 压缩后的压缩包指定名称为xxx.tar
tar -zcvf ab.tar aa.txt bb.txt
或:tar -zcvf ab.tar *
解压
命令:tar [-zxvf] 压缩文件
其中:x:代表解压
示例:将/usr/tmp 下的ab.tar解压到当前目录下
tar -zxvf ab.tar
示例:将/usr/tmp 下的ab.tar解压到根目录/usr下
tar -zxvf ab.tar -C /usr------C代表指定解压的位置

一般的に使用されるmysqlコマンド

【增】insert
insert into 表名 values(值1,值2,…);
insert into 表名(字段1,字段2…) values(值1,值2,…);(较常用)
insert into 表名(字段1,字段2…) values(值1,值2,…),(值1,值2,…),(值1,值2,…);

【删】delete
delete from 表名 where 条件 

【改(更新)】update
update 表名 set字段1 = 值1, 字段2 = 值2 where 条件

重要*【查】select
select * from 表名               查询表中的所有数据 
select 字段 from 表名            指定数据查询 
select 字段 from 表名 where 条件  根据条件查询出来的数据 

where 条件后面跟的条件 
关系:>,<,>=,<=,!=
逻辑:or, and
区间:id between 4 and 6 ;闭区间,包含边界

【排序】
select 字段 from 表 order by 字段 排序关键词(desc | asc)
排序关键词 desc 降序 asc 升序(默认)
通过字段来排序 :select * from star orser by money desc, age asc;
多字段排序 :select 字段 from 表 order by 字段1 desc |asc,…字段n desc| asc;

【常用的统计函数】 sum,avg,count,max,min

マルチテーブル共同クエリ


1.内连接
隐式内连接 select username,name from user,goods where user,gid=gods,gid;
显示内连接 select username,from user inner join goods on user.gid=goods.gid;
          select * from user left join goods on user.gid=goods.gid;
2.外链接 左/右连接
select * from user where gid in(select gid from goods);
select * from user right jOin goods on user.gid=goods.gid;

3.数据联合查询
select * from user left join goods on user.gid=goods.gid union select * from user right join goods on user.gid=goods.gid;

4.两个表同时更新
update user u, goods g set u.gid=12,g.price=1 where u.id=2 and u.gid=g.gid;

説明する

使用する必要がありますか

選択する

返す列または式

はい

データを取得するテーブル

テーブルからデータを選択する場合にのみ使用されます

どこ

行レベルのフィルタリング

いいえ

グループ化

グループ化の説明

グループごとに集計を計算する場合にのみ使用されます

持っている

グループレベルのフィルタリング

いいえ

注文する

出力ソート順

いいえ

制限

取得する行数

いいえ

 猿

命令:adb shell monkey +命令参数
所有的参数都需要放在monkey和设置的次数之间;参数的顺序可以调整,若带了-p ,-p必须放在monkey之后,参数必须在-p和次数之间

2.monkey基础命令
adb shell monkey -p 包名 -v -s seed值 压测次数

参数-p:
此命令用于指定要测试的包,若不指定则在整个系统中执行

a)指定一个包执行10次:adb shell monkey -p 包名 10

如下出现事件执行次数和所耗时间,则算是执行成功;

b)指定多个包执行10次:adb shell monkey -p 包名 –p 包名 10

参数 -v:
用于指定反馈日志的详细程度级别(共3个级别)

1.Level 0: adb shell monkey -p 包名 -v 10

默认级别,仅提供启动、测试完成和最终结果等少量信息

2.Level 1: adb shell monkey -p 包名 -v -v 10

提供较为详细的日志,包括每个发送到Activity的事件信息

3.Level 2: adb shell monkey -p 包名 -v -v -v 10

提供最详细的日志,包括了测试中选中/未选中的Activity信息

参数 -s:
用于指定伪随机数生成器的seed值

命令:adb shell monkey -p 包名 –s seed值 执行次数

作用:如果seed值相同,则两次Monkey测试所产生的事件序列也相同的。

示例:

测试1:adb shell monkey -p com.qq –s 15888 100

测试2:adb shell monkey -p com.qq –s 15888 100

说明:

两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。(也就是说,重复执行上次的随机操作)

操作序列虽然是随机生成的,但是只要我们指定了相同的Seed值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的;

运行:
>>不间断操作500次              adb shell monkey -p 包名 -v 500  

>>每个操作间隔500ms,共执行100次             adb shell  monkey -p 包名  -v-v --throttle  500 100

>>每个操作间隔100ms,共执行1000次 ,其中点击事件占比50%,轨迹50%                 adb shell monkey  -p  包名  -v-v --pct-touch  50  --pct-trackball 50 --throttle 100 1000

>>日志重定向到桌面文件夹                               adb shell monkey  -p  包名  -v-v --pct-touch  50  --pct-trackball 50 --throttle 100 1000>C:\Users\xyp\Desktop\Android脚本\1.log

>>每个操作间隔500ms、崩溃、超时、许可错误继续执行                       adb shell  monkey -p  包名   --throttle  500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v-v-v  1000000>C:\Users\xyp\Desktop\Android脚本\1.log

停止monkey测试           
重新打开一个cmd窗口>>进入adb shell>>ps | grep monkey查找monkey进程>>kill  进程号结束monkey

日志分析
1. 查找出差步骤:
a)找到monkey里哪个地方出错

查看Monkey执行的是哪一个Activity,在switch后面找,两个swtich之间如果出现了崩溃或其他异常,可以在该Activity中查找问题的所在。

b)查看Monkey里面出错前的一些事件动作,手动执行该动作

>>Sleeping for XX milliseconds这是执行Monkey测试时,throttle设定的间隔时间,每出现一次,就代表一个事件

>>Sending XX 就是代表一个操作,如下图的两个操作 应该就是一个点击事件。

c)若以上步骤还不能找出,则可以使用之前一样的seed,再执行monkey命令一遍,便于复现

2.测试结果分析:
>>程序无响应,ANR问题:在日志中搜索“ANR”

>>崩溃问题:在日志中搜索“CRASH”

>>其他问题:在日志中搜索”Exception”

monkey说明
--throttle   时间间隔

--ignore-crashes    忽略崩溃

--ignore-timeouts  忽略超时

--ignore-security-exceptions   忽略许可错误

--ignore-native-crashes  忽略本地崩溃

--monitor-native-crashes   监控本地崩溃

--pct-touch  触摸、点击

--pct-motion 调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)

--pct-trackball  调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)

--pct-nav 调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)

--pct-majornav 调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)

--pct-syskeys 调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)

--pct-appswitch 调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法

--pct-flip 调整“键盘翻转”事件的百分比。

--pct-anyevent 调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等

注意:各事件类型的百分比总数不能超过100%

もっと記事を読んでください~~~ 

おすすめ

転載: blog.csdn.net/weixin_46658581/article/details/119678292