2023年の高度なテスト、インターフェイステストからインターフェイス自動化テストの概要まで、この記事で徹底解説します...


序文

jsonモジュールの使用

Dictionary はストレージ タイプ、json は形式 (まったく異なります)、json.loads
() 関数は json 文字列を辞書 (dict) に変換します、
json.dumps() 関数は辞書を json 文字列に変換します、
json .dump() と json.load() は主に json ファイル関数の読み取りと書き込みに使用されます。

インターフェース自動テストの概要

インターフェイステストとは:
フロントエンドとバックエンドは分離されていません: タオバオ Web サイト (応答データはページ上にあり、アクセス応答データは HTML) は HTML 全体を返します (インターフェイスの作成は難しく、解析が必要です)データ (HTML コード全体が返されるため)

フロントエンドとバックエンドは分離されており、フロントエンドとバックエンドは API (インターフェイス) を通じて対話し、データ自体のみが返されます (アプリはバックエンドに HTML Web ページを返す必要がない場合があります) )

(市場の主要なプロジェクトは、フロントエンドとバックエンドの分離に json 形式を使用します)
リクエストは json データ形式で返され、フロントエンドとバックエンドは API インターフェイス プロトコルを通じて対話します。

フロントエンドページ

Android または iOS アプリ、Web ページはフロントエンド表示 (データ表示とユーザー インタラクション)、
フロントエンド フレームワーク: html、js、css、vue (美しい表示)、nodejs 用に統合されています。

後部

バックエンドのデータ処理、検証、発注、その他の業務処理(C言語、C++、Java(大きなものはJavaを使用)、Go、Python)

インターフェースを介したフロントエンドとバックエンド間のデータ対話 (インターフェース)

一部の問題はフロントエンドでブロックされる可能性がありますが、バックエンドには制限や検証がなく、フロントエンドをバイパスしてパケットをキャプチャし、バックエンドを突破するリクエストを送信することで、プロジェクトに問題が発生する可能性があります。 。

インターフェースの概念

インターフェースはアプリケーション間の相互呼び出しです インターフェースは
エンティティまたはソフトウェアによって外部に提供されるサービスです
ソフトウェアインターフェース:API、WeChatの出金は銀聯のインターフェースを呼び出してデータ対話を実現します

1 つは内部インターフェイス、つまり
メソッド間の相互作用、モジュール間の相互作用です。

外部パッケージを呼び出す別の種類のインターフェイス
: Web インターフェイス: http、https、Web サーバー (現在はほとんどが Web インターフェイス)
アプリケーション プログラム インターフェイス: ソケット インターフェイス、tcp/ip プロトコルを使用
データベース インターフェイス:

一般的に使用されるインターフェース方法 (プロトコル)

webservice: http 経由の SOAP プロトコル経由で送信、リクエスト メッセージと返信メッセージは XML 形式、XML 形式 (soapui パケット キャプチャ) 古いプロジェクト (政府と銀行)

データを解析するのも面倒で速度が低下する可能性もあり、通信も厳しいです。

http プロトコル: ハイパーテキスト転送プロトコル (70 ~ 80% が http プロトコルを使用) get post delete put 4 つの主要なリクエスト メソッド

https プロトコル: アプリケーション層の新しいプロトコルではありませんが、http 通信インターフェイス部分が SSL および TLS プロトコルに置き換えられます。

インターフェイスのテスト

プロジェクト要件:
ケース: ログイン インターフェイス
シナリオ: 製品では、ユーザー名は 6 ~ 10 文字のアンダースコアでなければならないと規定されています。
テスターはフロントエンドで検証を実行し、合格しました。
バックエンド開発者は検証を実行しませんでした。
リスク: パケットを直接キャプチャしてインターフェイスを改ざんし、検証をバイパスして SQL インジェクションを通じて直接ログインする
害: 企業の損失
インターフェイスのテストは市場の主流の需要です。

インターフェーステストの目標

クライアントでは見つからないバグ (隠れたバグ) を見つけることができます (注文を送信すると、フロントエンドはブロックされ、バックエンドはブロックされません。ランダムに入力できます)

リスクはできるだけ早く露出されます (品質と正常な起動を保証するため)
インターフェイスは安定しており、フロントエンドは自由に変更できます
最も重要なことは、メモリ システムのセキュリティと安定性を高めることです。

インターフェイス自動テストの概要 (その方法) (インターフェイスはプロトコル層を実行します。UI は要素を見つけます)

プロジェクト ビジネス (プロジェクト ビジネスを理解する)、
インターフェイス ドキュメント (API ドキュメント)、
インターフェイス ユース ケース、
自動化スクリプト (インターフェイス ドキュメントとインターフェイス ユース ケースに基づく)、
pytest フレームワーク (キー)、
デバッグ実行 (キー)、
魅力レポート、
結果分析;
継続的統合;

fiddler (パケット キャプチャ ツールの使用)

fidder を使用するためのヒント (パケットのキャプチャ、パケット キャプチャ データの表示):
https をキャプチャするには、証明書を設定する必要があります: (無料、オープンソース、多くの対応するメッセージをキャプチャでき、アプリも使用できます)

fidder は、無料で柔軟、操作が簡単、強力な http プロキシ ツールで、現在最も一般的に使用されている http パケット キャプチャ ツールの 1 つです。

すべての http/https パケットのキャプチャ、セッションのフィルタリング、リクエストの詳細の分析、クライアントリクエストの偽造、サーバー応答の改ざん、リダイレクト、ネットワーク速度制限、ブレークポイントのデバッグ、その他の機能を実行できます。

fiddler の仕組み:
フォワード プロキシ (フォワード プロキシ サーバー、ブラウザ経由で送信されたリクエストは以前はサーバーに直接送信されていました)、fiddler 転送 (プロキシ サーバー)、ブラウザのリクエストは fidder プロキシ サーバーに送信され、fidder プロキシ サーバーはサーバー、サーバー データは fidder プロキシ サーバーに転送され、プロキシ サーバーはそれをブラウザに送信します。

フォワード プロキシ:
ブラウザのリクエストと応答を転送し、パケット キャプチャ ツールはクライアントに対して透過的です

リバース プロキシ:
nginx - ロード バランシング - パフォーマンス 1 つのサーバー
Tomcat データベース (現在、ユーザー レベルが非常に大きく、1 つの Tomcat では処理できないため、ヘルパーが必要です。3 つの Tomcat がトラフィックを共有します (nginx - ロードを調整および追加する方法)バランス))
ブラウザが送信 リクエストが来たとき、誰にリクエストが送信されるかわからない リクエストの量が非常に多い 1台のTomcatが耐えられないことを防ぐために、nginxを介してリクエストをさまざまなTomcatに分散するそれ。

インターフェーステストデータフォーマット

自動テスト データ ソースのインターフェイス (テスト ケースはどこから来たのか) テスト ケースは通常どこに保存されますか?

Excel テスト ケース; yaml 形式のユース ケース; CSV

自動化スクリプトのデータ型:
フォーム形式:
[urlencoded 形式]: フォーム形式、または x-www-form-urlencoded 形式とも呼ばれます (タイプ タイプはフォーム フォーム、データ送信フォーム フォームです)

フォーム形式はキーと値のペアで構成されます。キーと値の間には = を使用し、複数の値の間には & を使用します。例: name=zhengsan&age=16

json形式(str文字列:キーと値のペア型の文字列) 
jsonにはオブジェクトと配列の2つの構造があり、データ型は文字列、数値、論理値、null値の4つあり、オブジェクトは波
括弧{}で表され、オブジェクトは属性によって表されます。キーと値のペアで構成される属性で構成されます。キーと値はコロンで区切られます。プロパティはカンマで区切られます。キーは二重引用符で囲む必要があります。

配列を表すには角括弧 [] を使用します。配列は個々の値で構成されます
。JSON は柔軟であり、JSON はネストできます。

暗号化トークン (トークン暗号化 + ファイルアップロードインターフェース)

ファイル アップロード インターフェイスのリクエスト ヘッダーには Cookie: token= トークン取得インターフェイスを通じて取得する必要があります (セッション ID またはトークンを Cookie に含めることができます。開発およびインターフェイスのドキュメントを参照してください)。判断できない場合は、fiddler を使用して次のことを行うことができます。パッケージを手に取って確認してください。

import requests, json
import hashlib                  # 这是加密库

def get_md5_data(psw):              # MD5加密--password  String md5(‘zr’+111111 +‘hg’)
    password = f"zr{
      
      psw}hg"
    md5 = hashlib.md5()            #1:创建一个md5对象         
    md5.update(password.encode("utf-8"))  #2:完成加密,updata方法加密   对象.方法(需要加密的对象.encode("utf-8")),加密时候最好设置编码
    # 对字符串进行编码后再进行一个加密
    # md5(b"zr111111hg")                      #也可以传二进制数据直接进行编码:如下
    # import hashlib
    # md5 = hashlib.md5()
    # md5.update(b'zr11111111hg')
    # print(md5.hexdigest())

    # 方法二:一行也可以写
    # print(hashlib.md5(b'zr11111111hg')).hexdigest()---这样写也可以,(传bytes类型。可以这么写)

    # 3要输出结果,return
    return md5.hexdigest()

# 1:获取接口需要的token
HOST = "http://121.41.14.39:2001"

def get_token(inname, inpsw):
    token_url = f"{
      
      HOST}/token/token"  # url
    header = {
    
    "Content-Type": "application/x-www-form-urlencoded"}      # 请求头,封装成字典

    # password  String md5(‘zr’+111111 +‘hg’)----password需要md5加密
    # 打开md5加密网页(百度查询)  把“zr111111hg”加密码提取出来:5c4fcc5add5d087de1e8534189c687f7
    # md5加密网站;http://tools.jb51.net/password/CreateMD5Password/
    payload = {
    
    "mobile": inname, "password": get_md5_data(inpsw)}
    reps = requests.post(token_url, data=payload, headers=header)
    return reps.json()["data"]  # 这里的data就是我们要的token


# 2:文件上传接口
# post方法,文件上传接口,先抓个包
# Content-Type: multipart/form-data; boundary=WebKitFormBoundaryLpsjAVSe95yonybu--文件上传有个随机参数boundary,算法可以做
#         做文件接口一般不带这个type,也不带头,除非真的校验,要去找对应的算法---麻烦(传type会有问题)

# 文件body---
# ------WebKitFormBoundaryLpsjAVSe95yonybu
# Content-Disposition: form-data; name="file"; filename="QQ图片20201009011422.png"
# Content-Type: image/png
# name="file"---你传给那个变量,文件名
# filename="QQ图片20201009011422.png"---文件对象
# Content-Type: image/png 文件类型
# 文件不要写绝对路径(写相对路径)---不然代码移植很麻烦
def file_doUpload():
    file_url = f"{
      
      HOST}/user/doUpload"

    # {变量:(文件名,文件对象,文件的类型)} ----文件对象需要open打开,open函数返回文件对象---文件对象有三个部分
    # 文件的打开不能用read,会乱码,只能用rb模式打开,二进制模式打开,读出是bytes字节的
    # 传文件的话一般这样做的需要--文件变量(文件对象)--组装好
    payload = {
    
    "file": ("QQ图片20201009011422.png", open("../data/QQ图片20201009011422.png", "rb"), "jpg/png/gif")}
    reps = requests.post(file_url, files=payload)
    print(reps.json())

file_doUpload()
以下は、私がまとめた 2023 年の最も包括的なソフトウェア テスト エンジニア学習ナレッジ アーキテクチャ システム図です。

1. Python プログラミングの入門から習熟まで

画像の説明を追加してください

2. インターフェース自動化プロジェクトの実践

画像の説明を追加してください

3. Web自動化プロジェクトの実戦

画像の説明を追加してください

4. アプリ自動化プロジェクトの実践

画像の説明を追加してください

5. 一流メーカーの履歴書

画像の説明を追加してください

6. DevOps システムのテストと開発

画像の説明を追加してください

7. 一般的に使用される自動テストツール

画像の説明を追加してください

8. JMeter パフォーマンス テスト

画像の説明を追加してください

9. まとめ(最後にちょっとしたサプライズ)

闘争は人生を航海する船であり、勤勉は前進する風です。出発点が何であれ、夢を持ち、それに向かってしっかりと追求する限り、あらゆる努力はより良い自分を生み出します。自分の能力を信じて、勇敢に前進し、あなたの闘いが人生の星を照らしましょう!

闘いの道では、挫折や失敗は単なる気性であり、決して諦めないことが最大の勇気です。勤勉と知恵を駆使して心に火を灯し、常に卓越性を追求してください。自分の可能性を信じ、闘い続けることによってのみ、自分自身の栄光への扉を開くことができます。

自然な成功などというものはなく、継続的な努力だけが存在します。困難に打ちのめされず、自分の粘り強さと才能を信じてください。勇敢に前に進み、夢を追い、すべての困難は達成への触媒です、私たちの汗で輝かしい章を書きましょう!

おすすめ

転載: blog.csdn.net/m0_60054525/article/details/131961509