ソフトウェアテストのよくある質問と回答

1. 自己紹介

それは人によって異なり、個人的な仕事の経験、プロジェクトの責任、個人的な趣味などを明確に紹介します。

2. ソフトウェアのライフサイクル

定義: 作成から廃止までのソフトウェアのライフサイクル。

ライフ サイクルには、問題の定義と計画 (開発者と需要側の間の話し合い)、要件分析、ソフトウェア設計、ソフトウェア コーディング、ソフトウェア テスト (単体テスト、統合テスト、システム テスト、受け入れテスト)、および運用と保守のフェーズが含まれます。 。(業界コンセプト)

3. テストプロセス

まず要件レビューを行い、プロジェクト要件レビューに参加し、プロジェクト要件レビュー段階で質問し、修正を実施し、修正完了後に再評価を行います。再評価後、草案を完成させ、プロジェクト計画を結合し、実施内容を結合し、テスト計画を策定して完了し、テストの作業内容を定義し、策定完了後、要求に応じてテストケースを作成しますドラフト:ユースケースが網羅されているかどうかを評価するためのトリアージ。開発およびテスト中にスモーク テストが実行され、スモーク テストに合格した後、書面化されたユースケースに従って、回帰テスト、バグ受け入れテスト、シナリオ テストなどのシステム テストが実行されます。最後にテストレポートを出力します。

4. インターフェースのユースケース設計

  1. 前提条件が満たされているかどうか

    一部の API では、データを正常に取得するには前提条件を満たす必要があります。通常、ログイン トークンが必要です。

    逆のユースケース: 前提条件が満たされるかどうかについて 0n 個のユースケースを設計します (n 個の条件と仮定します)。

  2. デフォルト値パラメータを引き継ぐかどうか

    前向きのユースケース: パラメータをデフォルト値で入力したり渡したりせず、必要なパラメータに正しい既存の「通常の」値を入力し、他のパラメータを入力しない場合は 1 つのユースケースを設計します。

  3. ビジネスルール、機能要件

    ここで、実際の状況に応じて、インターフェースパラメータの記述と組み合わせて、n 個の順方向ユースケースと逆方向ユースケースを設計する必要がある場合があります。

  4. パラメータは必須ですか?

    逆の使用例: 必須パラメーターごとに、空のパラメーター値を使用して逆の使用例を設計します。

  5. パラメータ間に関係があるかどうか

    一部のパラメータは相互に制限的な関係にあります。

    逆のユースケース: 実際の状況に応じて、0n のユースケースを設計する必要がある場合があります。

  6. パラメータのデータ型の制限

    逆の使用例: パラメータ値の型と一致しない各パラメータの逆の使用例を設計します。

  7. パラメータのデータ型自体のデータ範囲値の制限

    前向きのユースケース:

    すべてのパラメーターについて、各パラメーターのパラメーター値がデータ範囲内の最大値であるポジティブなユースケースを設計します。

    逆の使用例:

    各パラメーター (n と仮定) について、各パラメーターのパラメーター値がデータ範囲の最大値を超える n 個の逆ユース ケースを設計します。

    各パラメーター (n と仮定) について、各パラメーターのパラメーター値がデータ範囲の最小値より小さい n 個の逆ユース ケースを設計します。

    上記の側面を考慮すると、基本的には次の側面をカバーできます。

    メインプロセステストケース: 通常のメインプロセス機能の検証。

    分岐フロー テスト ケース: 通常の分岐フロー機能の検証。

    異常フロー テスト ケース: 異常フォールト トレランス チェック

8. インターフェースのテスト方法

1. まず通常のインターフェイスの呼び出しを考え、インターフェイスの定義に従って、アドレス、メソッド、パラメータなどの正しいインターフェイス情報を渡し、返されたデータが正しいかどうか、およびデータベースのデータが正しいかどうかを確認します。送信されたリクエストデータは上書きされ、有効である必要がありますクラスによって返された応答結果と境界値をチェックする必要があります。コード、メッセージ、ステータス、その他の情報など、データの保存を確認するための情報、追加でのデータベースの確認など、 NULL 値、長さ型の例外などの値、インターフェイスが正しく処理できるか、返された結果が正しく処理できるか ビジネス上の制約を考慮して、間違ったパラメータ名を入力したり、もう 1 つ入力したり、 1 つ減ります。 3. インターフェイスの書き込みデータのセキュリティ テストに注意してください。パスワードが暗号化されているかどうか、返されたデータに機密情報が含まれているかどうか、インターフェイスが送信データに対して機密情報の比較を実行するかどうかです。 4. パフォーマンス テストに注意してください。インターフェースの要求ステータスをチェックするために、インターフェースを同時に要求し、インターフェースの応答時間、ユーザーの許容範囲内でインターフェースをプレッシャーテストして最大のボトルネック点を特定するかどうか

五、バグのライフサイクル

  • 新規(New)→進行中(修復中)→Fixed(修正中)→Closed(クローズ)

    | 受け入れに失敗しました

    Reopen(再起動)→ In Progress(修復)→ Fix(修正)→ Closed(クローズ)

  • Cannot Reproduction : 再現できない - Pass : 修復できない/必要がない - Delay : 延期

    ————————————————————————— バグの重大度 ————————————————————— ——— ———————

    P0:ブロック - テストできず、クラッシュなど製品が使用できません

    P1: クリティカル - 重要な機能が実装されていない、かろうじて使用できるが、機能が大幅に制限されている

    P2: Major - main 機能が完全には実現されていないため、一部のプロセスの進行に影響しますが、メイン プロセスには影響しません。

    P3: 通常 - 影響が小さい一般的な問題

    P4: マイナー - 微妙な問題、一般的な最適化、提案

6、継続的インテグレーション

1. 統一されたコードベース

2. 自動ビルド

3. 自動テスト

4. 誰もが毎日コードベーストランクにコードを送信します

5. コードを送信するたびに、継続的統合サーバー上でビルドがトリガーされます。

6. 高速ビルドを保証

7. 本番環境を模擬した自動テスト

8. 誰でも簡単に最新の実行可能アプリケーションを入手可能

9. 何が起こっているかは誰もが知っている

10. 自動展開

7. テスト計画を作成する

テスト計画には、テストの目的、テスト範囲、テスト環境、テストの種類の説明、テストツール、テンプレートの分割、関連するテストリーダー、テスト時間、時間の配置、テスト関連のリスクなどが含まれます。モジュールの分割は主にテスターの意見に基づいています。習熟度は分かれており、作業負荷の評価はこれまでのテスト経験に基づいて評価し、今回のプロジェクトと組み合わせる必要があります。

8. 性能試験プロセス

1. パフォーマンス要件を分析し、完​​全なパフォーマンス指標を定義し、同時にパフォーマンス シナリオを設計します。

2. パフォーマンステスト環境の構築

3. シナリオに基づいたテストスクリプトの実装

4. 性能試験に基づいた試験データの作成

5. テストを実行してデータを収集する

6. 性能診断と分析

7. パフォーマンス チューニング (問題を抱えている人を見つけてください)、ステップ 5 ~ 6 に戻ります。

8. レポートの出力

まず、ローカル リソースの不足が原因なのか、シーンの設計が原因なのかを確認します。問題がなければ、キューの原因がネットワーク伝送の問題かどうか、サーバーに MQ メッセージ キューがあるかどうかを確認します。そうであれば、帯域幅の問題ではありません。 。

計算:

QPS (TPS) = 同時実行数/平均応答時間 または 同時実行数 = QPS平均応答時間 メモリ計算式 Memtotal - Memfree - キャッシュ - バッファ数)/Memtotal   100 (=(B2-F2-K2-N2)/B2*100)

jmeter を開きます: cd /Users/dingyu/Documents/apache-jmeter-5.4.2/bin

9、Linux の一般的なコマンド

```プレーンテキスト

  • alt+ctrl 終了して Linux を操作し、Windows を操作できます
  • ディレクトリを切り替えるコマンド:
  • pwd 現在のディレクトリを表示します
  • cd フォルダをフォルダに入れる
  • cd .. 1 レベルバックアップします
  • cd - 最後のディレクトリに戻ります
  • cd / ルートディレクトリにプッシュ
  • ファイルリストを表示
  • ls は現在のディレクトリ内のすべての情報をリストします。
  • ls -a は隠しファイルを含むすべてのファイルを表示します
  • ls -l ファイルの詳細を表示
  • ll は ls -l の略です
  • クリアなクリアコンテンツ
  • ディレクトリ操作
  • mkdir aa bb フォルダ名 作成ディレクトリ
  • rmdir aa (ディレクトリの削除) ディレクトリの削除は複数のディレクトリを削除できます
  • ドキュメントを参照する
  • cd /etc と入力します
  • ファイルを開いてすべての内容を表示するには、cat ファイル名
  • もっと見る コンテンツを表示します。ページ単位で表示できます
  • Enterキーと組み合わせると、ちょっとだけ見えてきます
  • スペースバーを押すとページビュー
  • q ビューを終了します
  • 閲覧コンテンツが少なくなる
  • Enter + 下矢印、少し表示
  • q ビューを終了します
  • 尻尾は見るものを選ぶことができる
  • tail -10 プロフィール 最後の 10 行を表示
  • 終了 Ctrl+C
  • ファイル操作
  • xx.txt をタッチ xx.txt ファイルを作成
  • rm xx.txt ファイルを削除するには、n をキャンセルするために y を削除してもよいかどうかを尋ねる必要があります。
  • rm -f xx.txt 何も尋ねずにファイルを削除します
  • rm -r aa 再帰的に削除して尋ねます
  • rm -rf aa 確認せずに再帰的に削除します
  • cp aa.txt bb.txt コピー
  • cp aa.txt /usr/local/bb.txt のように、コピーしたディレクトリを指定できます。
  • mv aa.txt cc.txt カット
  • ※ mv aa.txt /usr/local/dd.txt のようにカットディレクトリを指定できます
  • 圧縮と解凍
  • tar コマンドは /bin ディレクトリにあります。ユーザーが指定したファイルまたはディレクトリを圧縮せずに 1 つのファイルにパックできます。一般に、Linux での一般的な圧縮方法は、tar を使用して多数のファイルを 1 つのファイルにパックし、その後gzip で圧縮します。 コマンドは xxx.tar.gz (または xxx.tgz) ファイルに圧縮されます。
  • tar -c ファイルへの圧縮を指定します -v プロセス情報を表示します -f ファイル名を指定します tar -cvf xxx.tar ./* -z gzip 圧縮を指定します tar -zcvf iii.tar.gz ./* -x unpacks tar の通常の解凍ファイル tar -xvd uuu.tar.gz 解凍指定パス tar -xvf uuu.tar.gz -C /usr/local
  • vi と vim でテキストを編集する
  • vim は vi のアップグレード バージョンで、ファイルの編集だけでなくファイルの表示もできます。3 つのモード: コマンド ライン、挿入、ボトムライン モード。コマンド ライン モードに切り替える: Esc キーを押す; 挿入モードに切り替える: i、o、a キーを押す; i は現在位置の前に I を挿入、現在行の先頭に a を挿入、現在位置の後に A を挿入、o を挿入現在行の末尾 行の後に行を挿入 O 現在行の前に行を挿入 編集終了: esc (エスケープキー) 終了して
    保存: :wq(shift+:) 保存せずに終了: :q! ショートカットキー: dd非編集状態で行を削除/検索ホットキー
  • 出力をリダイレクトする ifconfig view ip

出力をリダイレクトし、元のコンテンツを上書きします。

出力をリダイレクトして関数を追加します。例: cat b.txt > a.txt 出力を a.txt にダイレクト cat c.txt >> a.txt 出力を追加し、ifconfig > ifconfig.txt ifconfig >> ifconfig.txt

  • grep 検索コマンド grep hello aaa.txt 通常の検索 grep hello aaa.txt --color ハイライト検索
  • ps -ef 現在のプロセスを表示します
  • パイプライン シンボル | パイプラインは Linux コマンドの重要な概念であり、その機能は、あるコマンドの出力を別のコマンドの入力として使用することです。cat hello.txt |詳細 ps -ef|grep bash ls --help |詳細ページ クエリ ヘルプ情報 ps -ef |grep 2251 検索プロセス番号 ifconfig |詳細 catindex.html |詳細
  • && コマンド実行制御: コマンド間の && 接続を使用して、ロジックとの機能を実現します。&& の左側のコマンドが true を返した場合 (コマンド戻り値 $? == 0) のみ、&& の右側のコマンドが実行されます。mkdir はは、&& cd ははは
  • ネットワーク通信コマンド ifconfig IP 情報の表示 ping サーバーが ping されているかどうかを確認します Netstat ネットワーク ポートを確認します netstat -an|grep 3306 mysql ポートを検索します bash プロセスのポートを確認します ステップ 1: bash プロセスのプロセス番号を確認します pid=ps -ef|grep bash
    ステップ 2: プロセス番号に従ってポート netstat -an|grep pid を検索します。

Linux 2日目のメモ

システムコマンド

  • 日付表示日付
  • date -s "1991-11-11 11:11:11" 日付を設定します
  • kill プロセス番号 プロセスを強制終了する
  • kill -9 プロセスを強制的に強制終了するプロセス番号
  • du 現在のファイル サイズを表示する
  • du -h 最適化ビュー
  • who 現在システムにログインしているユーザー名を表示します
  • おっと、現在のユーザーを表示します
  • hostname は現在のホスト名を表示します
  • vim /etc/sysconf/network ホスト名を変更する
  • uname show システム情報ファイル show
  • tail テール情報を表示します
  • tail -10 install.log にはファイルの最後の 10 行が表示されます
  • tail -c 10 install.log は最後の 10 文字を表示します
  • head -10 install.log はファイルの最初の 10 行を表示します
  • head -c 10 install.log は、ファイル システム監視の最初の 10 文字を表示します。
  • 空きメモリ
  • -b: メモリ使用量をバイト単位で表示; -k: メモリ使用量を KB 単位で表示; -m: メモリ使用量を MB 単位で表示; -s: メモリ使用量を継続的に観察; free -b free - k free -m free -s 10 free - s -m 10 10 秒ごとにメモリ情報を表示し、合計メモリ サイズを m 単位で計算します。 free 残り used used サイズ (%70 未満である必要があります)
  • uptime メモリと CPU の稼働時間 uptime コマンドは、システムの合計実行時間とシステムの平均負荷を出力できます。uptime コマンドによって表示される情報は、現在時刻、システムの稼働時間、現在ログインしているユーザーの数、および過去 1 分、5 分、および 15 分間のシステムの平均負荷です。15:31:30 //システムの現在時刻は 127 日後の 3:00 です //ホストの実行時間。時間が長いほど、マシンはより安定します。1 user //ユーザー接続数は、ユーザー数ではなく接続の総数ですload Average: 0.00, 0.00, 0.00 // システム平均負荷、過去 1、5、および 1 年間のシステム平均負荷の統計15 分 システムの平均負荷は、特定の時間を指します。 間隔中の実行キュー内のプロセスの平均数です。CPU コアあたりの現在アクティブなプロセスの数が 3 つ以下の場合、システムのパフォーマンスは良好です。CPU コアあたりのタスク数が 5 を超える場合、このマシンのパフォーマンスに重大な問題があります。
  • 最上位プロセスでは、システム全体の動作をリアルタイムで動的に把握することができ、複数の情報監視システムの性能情報と稼働情報を統合する実用的なツールです。top コマンドが提供する対話型インターフェイスを介して、ホットキーで管理できます。アプリケーションが占有しているCPUとメモリのサイズを分析できます
  • mpstat CPU の詳細情報を表示します。 mpstat mpstat は、MultiProcessor Statistics の略で、リアルタイム システム監視ツールです。そのレポートと CPU の一部の統計情報は、すべての CPU の平均ステータス情報を表示するだけでなく、特定の CPU の情報も表示できます。
  • df コマンドはディスク容量を表示します df コマンドは、ディスク パーティション上の利用可能なディスク容量を表示するために使用されます。デフォルトの表示単位はKBです。このコマンドを使用すると、ハードディスクが占有している容量や残りの容量などの情報を取得できます。システムの再起動およびシャットダウンのコマンド
  • シャットダウン シャットダウン
  • 再起動、再起動
  • 停止シャットダウンコマンド
  • Linux 許可コマンド 許可拒否は一般的に使用されます 777 755 chmod 755 a.txt chmod u=rwx,g=rx,o=rx a.txt chmod 000 a.txt
  • ファイアウォール
  • ファイアウォール サービス iptables stop を一時的に閉じます。
  • ファイアウォール サービス iptables start を一時的に開きます
  • ファイアウォール ステータス サービスの iptables ステータスを表示する
  • ファイアウォールを永続的にオフにする chkconfig iptables off
  • ファイアウォール chkconfig iptables を永続的に開きます
  • どちらを使用しますか? システム ファイル vi /etc/sysconfig/iptables を変更し、開いているポートを指定する行をコピーします。
  • ファイアウォールサービスを再起動します iptables restart

10. 自動テスト依頼機能

getMethod() 获得请求方式
getHeader()获取请求头信息
getRequestURI() 获得请求资源
getParameter()获得参数的值

11、Pythonの共通関数

```Plain Text
staticmethod() 函数返回函数的静态方法。该方法不强制要求传递参数
print()函数:打印字符串;
raw_input()函数:从用户键盘捕获字符;
len()函数:计算字符长度;
format()函数:实现格式化输出;
type()函数:查询对象的类型;
int()函数、float()函数、str()函数等:类型的转化函数;
id()函数:获取对象的内存地址;
help()函数:Python的帮助函数;
s.islower()函数:判断字符小写;
s.sppace()函数:判断是否为空格;
str.replace()函数:替换字符;
import()函数:引进库;
math.sin()函数:sin()函数;
math.pow()函数:计算次方函数;
os.getcwd()函数:获取当前工作目录;
listdir()函数:显示当前目录下的文件;
time.sleep()函数:停止一段时间;
random.randint()函数:产生随机数;
range()函数:返回一个列表,打印从1到100;
file.read()函数:读取文件返回字符串;
file.readlines()函数:读取文件返回列表;
file.readline()函数:读取一行文件并返回字符串;
split()函数:用什么来间隔字符串;
isalnum()函数:判断是否为有效数字或字符;
isalpha()函数:判断是否全为字符;
isdigit()函数:判断是否全为数字;
lower()函数:将数据改成小写;
upper()函数:将数据改成大写;
startswith(s)函数:判断字符串是否以s开始的;
endwith(s)函数:判断字符串是否以s结尾的;
file.write()函数:写入函数;
file.writeline()函数:写入文件;
abs()函数:得到某数的绝对值;
file.sort()函数:对书数据排序;
tuple()函数:创建一个元组;
find()函数:查找 返回的是索引;
dict()函数:创建字典;
clear()函数:清楚字典中的所有项;
copy()函数:复制一个字典,会修改所有的字典;
get()函数:查询字典中的元素。
```


12. 自動テストのための testNG アノテーションの使用

@BeforeSuite	在该套件的所有测试都运行在注释的方法之前,仅运行一次
@AfterSuite	在该套件的所有测试都运行在注释方法之后,仅运行一次
@BeforeClass	在调用当前类的第一个测试方法之前运行,注释方法仅运行一次
@AfterClass	在调用当前类的第一个测试方法之后运行,注释方法仅运行一次
@BeforeTest	注释的方法将在属于test标签内的类的所有测试方法运行之前运行
@AfterTest	注释的方法将在属于test标签内的类的所有测试方法运行之后运行
@BeforeGroups	配置方法将在之前运行组列表。 此方法保证在调用属于这些组中的任何一个的第一个测试方法之前不久运行
@AfterGroups	此配置方法将在之后运行组列表。该方法保证在调用属于任何这些组的最后一个测试方法之后不久运行
@BeforeMethod	注释方法将在每个测试方法之前运行
@AfterMethod	注释方法将在每个测试方法之后运行
@DataProvider	标记一种方法来提供测试方法的数据。 注释方法必须返回一个Object [] [],其中每个Object []可以被分配给测试方法的参数列表。 要从该DataProvider接收数据的@Test方法需要使用与此注释名称相等的dataProvider名称
@Factory	将一个方法标记为工厂,返回TestNG将被用作测试类的对象。 该方法必须返回Object []
@Listeners	定义测试类上的侦听器
@Parameters	描述如何将参数传递给@Test方法
@Test	将类或方法标记为测试的一部分,此标记若放在类上,则该类所有公共方法都将被作为测试方法
@Test(priority = 0) 可进行循环控制,数字越小执行顺序越高
Suite > Test > Class > Groups > Method

13、HTTPS と HTTP の違い:

1. https プロトコルは CA に証明書を申請する必要がありますが、一般に無料の証明書は少なく、一定の料金が必要です。2. HTTP はハイパーテキスト転送プロトコルであり、情報はプレーン テキストで送信されます。https は安全な SSL 暗号化転送プロトコルです。3. httpとhttpsでは接続方法もポートも全く異なり、前者は80、後者は443です。4. http接続は非常にシンプルでステートレスであり、HTTPSプロトコルはSSL+HTTPプロトコルで構築され、暗号化通信と本人認証が可能なネットワークプロトコルであり、httpプロトコルよりも安全です。

14、TCP スリーウェイ ハンドシェイク

最初のハンドシェイクはブラウザによって開始され、リクエストを送信したいことをサーバーに伝えます。2 番目のハンドシェイクはサーバーによって開始され、リクエストを受け入れる準備ができていることをブラウザに伝えます。すぐに送信してください。3 番目のハンドシェイクは、によって送信されます。ブラウザにサーバーに伝え、すぐに送信します。受け入れる準備ができています

15. tcp と Udp の違い

1. udp のセキュリティは tcp よりも高く、脆弱性は少ない 2. udp の送信は tcp よりも優れている 3. udp は 1 対多の接続または多対多の接続に属する多数の接続、および tcp は 1 対 1 の接続に属します

十六、クッキーとセッションの違い

1. セッションはサーバー側にあり、Cookie はクライアント側 (ブラウザー) にあります。 2. セッションは、デフォルトで (メモリではなく) サーバー上のファイルに保存されます。 3. セッションの動作は、セッション ID であり、セッション ID は Cookie に保存されます。つまり、ブラウザが Cookie を無効にすると、セッションも無効になります (ただし、URL で session_id を渡すなど、他の方法で無効にすることもできます)。セッションは、ファイル、データベース、またはメモリに配置できます。5. この場合、ユーザー認証には通常セッションが使用されます。

十七、POSTとGETの違い

  1. Get はサーバーからデータを取得すること、post はサーバーにデータを送信することです。

  2. GET リクエストでは URL にパラメータが含まれ、URL の後にリクエスト情報が配置されますが、POST リクエストではパラメータがリクエストボディに渡され、リクエスト情報がメッセージボディに配置されます。

  3. get によって送信されるデータの量は少量であり、2KB を超えることはできません。郵便で送信されるデータの量は比較的多く、通常はデフォルトで無制限になっています。ただし、理論上、最大量は IIS4 では 80 KB、IIS5 では 100 KB です。

  4. get のセキュリティは非常に低いです。Get はデータを送信するように設計されており、通常はアドレス バーに表示されます。Post のセキュリティはより高く、Post によって送信されるデータはよりプライベートであるため、アドレス バーには表示されません。暗号化がない場合、両方のセキュリティ レベルは同じであり、どのリスナーもすべてのデータをリッスンできます。

  5. GET リクエストはキャッシュできます。GET リクエストはブラウザの閲覧履歴に保存されます。GET でリクエストされた URL はブラウザのブックマークとして保存できます。投稿リクエストにはこれらの機能はありません。

  6. HTTP の最下層は TCP/IP であり、GET と POST の最下層も TCP/IP です。つまり、GET/POST は両方とも TCP リンクです。GET と POST は同じことを実行できます。GET にはリクエスト本文を追加し、POST には URL パラメータを追加する必要がありますが、これは技術的には完全に実現可能です。7. GET は TCP データ パケットを生成します。GET リクエストの場合、ブラウザは http ヘッダーとデータを一緒に送信し、サーバーは 200 (戻りデータ) で応答します。POST は 2 つの TCP データ パケットを生成します。POST の場合、ブラウザは最初にヘッダー、サーバーは 100 continue で応答、ブラウザはデータを再度送信、サーバーは 200 ok (データを返す) で応答、すべてのブラウザが POST でパケットを 2 回送信するわけではなく、Firefox は 1 回だけ送信します

18、ステータスコード

1. 暫定応答を示し、要求者に操作の続行を要求します。 100 (継続) 要求者は要求を続行する必要があります。サーバーはこのコードを返し、リクエストの最初の部分を受信し、残りの部分を待っていることを示します。101 (プロトコルの切り替え) 要求者はサーバーにプロトコルの切り替えを要求し、サーバーはそれを確認し、切り替える準備が整いました。

2. リクエストが正常に処理されたことを示すステータス コード: 200 (リクエスト成功)、サーバーはリクエストを正常に処理しました。通常、これはサーバーが要求された Web ページを提供したことを意味します。201 (作成) リクエストは成功し、サーバーは新しいリソースを作成しました。202 (Accepted) サーバーはリクエストを受け入れましたが、まだ処理していません。203 (非認証情報) サーバーはリクエストを正常に処理しましたが、返された情報は別のソースからのものである可能性があります。204 (コンテンツなし) サーバーはリクエストを正常に処理しましたが、コンテンツを返しませんでした。205 (コンテンツのリセット) サーバーはリクエストを正常に処理しましたが、コンテンツを返しませんでした。206 (部分的なコンテンツ) サーバーは GET リクエストの一部を正常に処理しました。

3. リクエストを完了するにはさらにアクションが必要であることを示します。通常、次のステータス コードはリダイレクトに使用されます。 300 (複数選択) サーバーはリクエストに応じてさまざまなアクションを実行できます。301 (Moved Permanently) 要求された Web ページは新しい場所に永久に移動されました。サーバーがこの応答を (GET または HEAD 要求に応答して) 返すと、要求者を新しい場所に自動的に転送します。** 302 (一時的に移動) サーバーは現在、別の場所にある Web ページからのリクエストに応答していますが、リクエスターは今後のリクエストに対して元の場所を引き続き使用する必要があります。303 (他の場所の表示) リクエスターが応答を取得するために異なる場所に対して個別の GET リクエストを使用する必要がある場合、サーバーはこのコードを返します。304 (未変更) 要求されたページは、最後の要求以降変更されていません。サーバーがこの応答を返すとき、Web ページのコンテンツは返されません。305 (プロキシの使用) 要求者は、要求された Web ページにアクセスするためにプロキシのみを使用できます。サーバーがこの応答を返した場合は、リクエスターがプロキシを使用する必要があることも示します。307 (一時的なリダイレクト) サーバーは現在、別の場所にある Web ページからのリクエストに応答していますが、リクエスターは今後のリクエストに対して元の場所を引き続き使用する必要があります。

4. これらのステータス コードは、リクエストが失敗し、サーバーが処理できない可能性があることを示します。 400 (不正なリクエスト) サーバーはリクエストの構文を理解していません。401 (不正) リクエストには認証が必要です。サーバーは、ログインが必要な Web ページに対してこの応答を返す場合があります。403 (禁止) サーバーはリクエストを拒否しました。404 (見つかりません) サーバーは要求された Web ページを見つけることができませんでした。** 405 (メソッドが無効です) リクエストで指定されたメソッドは無効です。406 (Not Accepted) 要求されたコンテンツ属性を持つ要求された Web ページに応答できません。407 (プロキシ承認が必要) このステータス コードは 401 (未承認) に似ていますが、要求者がプロキシの使用を承認される必要があることを指定します。408 (リクエストがタイムアウトしました) リクエストの待機中にサーバーがタイムアウトしました。409 (競合) リクエストの完了中にサーバーで競合が発生しました。サーバーは、応答に競合に関する情報を含める必要があります。410 (削除済み) 要求されたリソースが完全に削除されている場合、サーバーはこの応答を返します。411 (有効な長さが必要) サーバーは、Valid Content-Length ヘッダー フィールドのない要求を受け入れません。412 (前提条件が満たされていません) サーバーは、リクエスト内でリクエスタによって設定された前提条件の 1 つを満たしていません。413 (リクエスト エンティティが大きすぎます) リクエスト エンティティが大きすぎてサーバーの処理能力を超えているため、サーバーはリクエストを処理できません。414 (要求された URI が長すぎます) 要求された URI (通常は URL) が長すぎてサーバーが処理できません。415 (サポートされていないメディア タイプ) 要求された形式は、要求されたページでサポートされていません。416 (要求された範囲が要件を満たしていません) このステータス コードは、ページが要求された範囲を提供できない場合にサーバーから返されます。417 (期待が満たされていません) サーバーは、「期待」リクエスト ヘッダー フィールドを満たしていません。

5. 一般に、これはサーバーの問題です。 500 (内部サーバー エラー) サーバーでエラーが発生したため、要求を完了できませんでした。** 501 (未実装) サーバーはリクエストを満たすことができません。たとえば、サーバーがリクエスト メソッドを認識しない場合、このコードが返される可能性があります。502 (不正なゲートウェイ) ゲートウェイまたはプロキシとして機能するサーバーが、上流サーバーから無効な応答を受信しました。503 (サービスを利用できません) サーバーは現在利用できません (過負荷またはメンテナンスのためのダウンのため)。通常、これは一時的な状態にすぎません。504 (ゲートウェイ タイムアウト) サーバーはゲートウェイまたはプロキシとして機能していますが、上流サーバーからの要求を時間内に受信しませんでした。505 (HTTP バージョンがサポートされていません) サーバーは、リクエストで使用されている HTTP プロトコルのバージョンをサポートしていません。

19. データベースの知識

#插入数据
insert into test (id,email,ip,state) values(2,'[email protected]','127.0.0.1','0');
#删除数据 
delete from test where id = 1;
#修改数据
update test set id='1',email='[email protected]' where id=1;
#查数据
select * from test;  #取所有数据
select * from test limit 0,2;  #取前两条数据 
select * from test email like '%qq%' #查含有qq字符 _表示一个 %表示多个
select * from test order by id asc;#降序desc
select * from test id not in('2','3');#id不含2,3或者去掉not表示含有
select * from test timer between 1 and 10;#数据在1,10之间

#---------------------------表连接知识------------------------------
#等值连接又叫内链接 inner join 只返回两个表中连接字段相等的行
select * from A inner join B on A.id = B.id; #写法1
select * from A,B where A.id = B.id; #写法2
select a.id,a.title from A a inner join B b on a.id=b.id and a.id=1;#写法3 表的临时名称
select a.id as ID,a.title as 标题 from A inner join B on A.id=B.id;#添加as字句

#左连接又叫外连接 left join 返回左表中所有记录和右表中连接字段相等的记录
select * from A left join B on A.id = B.id;

select * from A left join (B,C,D) on (B.i1=A.i1 and C.i2=A.i2 and D.i3 = A.i3);#复杂连接

#右连接又叫外连接 right join 返回右表中所有记录和左表中连接字段相等的记录
select * from A right join B on A.id = B.id;

#完整外部链接 full join 返回左右表中所有数据
select * from A full join B on A.id = B.id;

#交叉连接 没有where字句 返回卡迪尔积
select * from A cross join B;


CREATE TABLE 语句用于创建数据库中的表。
.查询数据库中所有表名称:

  select table_name from information_schema.tables where table_schema='数据库名称';(包含视图)

  select table_name from information_schema.tables where table_schema='数据库名称' and table_type = 'BASE TABLE' AND table_schema = DATABASE ();(不包含视图)

2.查询每张表中所有字段名:

  select COLUMN_NAME from INFORMATION_SCHEMA.Columns where table_name='表名称' and table_schema='数据库名称';

oracle:

1.查询数据库中所有表名称:

  select t.table_name from user_tables t;

2.查询每张表中所有字段名:

  SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = '表名称';

20、ログイン インターフェイスのテスト ポイント

正常:全て必須 異常:データ異常:携帯電話番号・パスワード:異常長、11桁以上、11桁未満 異常種類:データ以外(文字、文字、漢字) 必須か否か 繰り返しパラメータ異常: 複数のパラメータ、少数のパラメータ、パラメータなし、間違ったパラメータのビジネス例外、操作は成功しました。間違ったユーザー名またはパスワード

21. Pythonのリストとタプルの違い、リストと辞書の違い

1. リストは変更できますが、タプルは変更できません。リストは動的配列に相当し、タプルは静的配列です。2. リストは角括弧で宣言され、タプルは括弧で宣言されます。タプルの要素は 1 つだけです 場合によってはその後に記号を追加する必要があります; 3. 辞書の生成は遅いですが、検索は速く、リストによって生成されたブロックの検索は遅いです; 4. リストは順序付けされています、辞書は順序付けされていません; 5. リストはインデックスを介してアクセスされ、辞書はキーを使用してアクセスされます。

22、例としてログインしました。PO デザインモードのプロセスについて話しましょう

1. 最初のステップは、主にドライブの取得を実現するベースページ基本タイプを実装することです。互換性テストはドライブを通じて実行できます。 2. オブジェクト層を実装し、入力などのログイン ページの要素の配置をカプセル化します。ボックスに入力し、ボタン要素の配置方法を決定します 3. ユーザー名の入力、パスワードの入力、確認ボタンのクリックなど、カプセル化と配置の方法に従って関連操作を実行します 4. カプセル化されたボタン要素に従ってページと操作クラス、対応する自動テストを実現します; po デザイン パターンとは: ページ オブジェクト、たとえば、コードの重複を減らし、コードを読みやすくし、保守しやすくします。これには主に、オブジェクト層 (主に特定の要素を配置する方法をカプセル化)、操作層 (要素の特定の操作をいくつかカプセル化)、ビジネス層 (1 つ以上の操作を特定のサービスに組み合わせて特定の機能テストを実行する) の 3 つの層が含まれます。

23、pytestとunittestの違い

||unittest|pytest| |-|-|-| |ユースケースの記述方法|1) テスト ファイルは、unittest パッケージをインポートする必要があります 2) テスト クラスは、unittest.TestCase を継承する必要があります 3) テスト クラスには、unittest.main が必要です() メソッド 4) テスト メソッドは test_| で始まる必要があります。1) テスト ファイルの名前は test で始まるか test で終わる必要があります。2) テスト クラスの名前は Test で始まる必要があります。3) テスト メソッドの名前は、 test_で開始|テストスーツをロードしていくつかのユースケースを実行|@pytest.markメソッドを通じてクラスとメソッドをマークし、pytest mainはマークされたクラスとメソッドのみを実行するパラメータ -m を追加||ユースケースの前後|提供setUp/tearDown、すべてのユースケースのみ|pytestのフィクスチャは明らかにより柔軟です。メソッド関数は任意にカスタマイズできます。デコレータ @pytest.fixture() が追加されている限り、装飾されたメソッドを使用できます||パラメータ化|パラメータ化|@pytest.mark.parametrize デコレータを使用| |アサーション形式 |アサート多数アサーション形式 (assertEqual、assertIn、assertTrue、assertFalse)|assert の式は 1 つだけで、これを使用すると便利です| |テスト レポートを生成|HTMLTestRunner を使用|pytest-HTML、allure プラグイン||失敗の再実行|なし|pytest- rerunfailures プラグインは失敗の再実行をサポートします|

一般的に、単体テストのユースケースの形式は複雑で、互換性がなく、プラグインも少なく、二次開発が便利です。pytest はより便利で高速で、ユース ケースの形式がシンプルで、unittest ユース ケースのコードを変更することなく、unittest スタイルのテスト ケースを実行でき、互換性が優れています。pytest プラグインは、エラー発生時にユースケースを再実行するために使用できる flask プラグインや、デバイスの並列実行に使用できる xdist プラグインなど、豊富です。もっと効率的。

二十四、ポーデザインパターン

Python のリストとタプルの違い、およびリストと辞書の違い: 1. リストは変更できますが、タプルは変更できません。リストは動的配列に相当しますが、タプルは静的配列です。2. リストは宣言されています。角括弧付き。タプルは括弧で宣言され、タプルの要素が 1 つだけの場合は、その後に記号を付ける必要があります。はい、辞書は順序付けされていません。5. リストはインデックスを介してアクセスされ、辞書はキーを使用してアクセスします。

例としてログインしました。PO 設計モード 1 のプロセスについて説明します。最初のステップは、主にドライブの取得を実現するベースページ基本タイプを実装することであり、互換性テストはドライブ 2 を通じて実行できます。オブジェクト レイヤーを実装し、入力ボックスなどのログイン ページの要素の配置をカプセル化し、ボタン要素の配置方法を決定します。 3. カプセル化と配置方法に従って、ユーザー名の入力、入力などの関連操作を実行します。パスワードを入力し、確認ボタンをクリックします; 4. カプセル化されたページと操作クラスに従って、対応する po デザイン パターンとは: pageobject を実現すると、たとえば、コードの重複が減り、コードが読みやすくなり、保守が容易になります。これには主に、オブジェクト層 (主に特定の要素を配置する方法をカプセル化)、操作層 (要素の特定の操作をいくつかカプセル化)、ビジネス層 (1 つ以上の操作を特定のサービスに組み合わせて特定の機能テストを実行する) の 3 つの層が含まれます。

25. システムテストには次の側面が含まれます

  • ソフトウェアの外観インターフェイステスト(UIテストと呼ばれます):主に、ソフトウェアインターフェイスの機能モジュールのレイアウトが合理的であるか、全体のスタイルが一貫しているか、インターフェイスのテキストが正しいか、ネーミングが統一されているか、ページが美しいかどうかをテストします。 、文字、色、絵の組み合わせが完璧かどうかなど。テストの難易度: 比較的簡単です。

  • ソフトウェア機能テスト: 主に、ソフトウェアがユーザーに提示するすべての機能点が正常に使用および操作できるかどうか、および要件文書の要件を満たしているかどうかをテストします。テストの難易度: 中程度。

  • ソフトウェア パフォーマンス テスト: さまざまな環境や圧力下でソフトウェアが正常に動作できるかどうかをテストします。最も重要な指標の 1 つはシステムの応答時間です。たとえば、複数の人が同時に Web ページにアクセスしたときに、Web ページが正常に動作できるかどうか指定時間内に開封する等。テストの難易度: 高。

  • ソフトウェア セキュリティ テスト: 不正な侵入を防ぐソフトウェアの能力をテストします。テストの難易度: 高。

  • ソフトウェアユーザビリティテスト:比較的主観的なソフトウェアの操作性をテストし、ユーザーの視点でソフトウェア製品が使いやすいかどうかを体験します。テストの難易度: 比較的簡単です。

  • ソフトウェア互換性テスト: ソフトウェアと他のソフトウェアとの互換性をテストします。ジュニア ソフトウェア テスターとして主に考慮するのは、解像度の互換性を含む、ソフトウェアとブラウザーの間の互換性です。テストの難易度: 比較的簡単です。

おすすめ

転載: blog.csdn.net/DY_CSDN/article/details/130016848