【ソフトウェアテスト業界の現状】2023年になってもソフトウェアテストを学ぶ勇気はありますか?未来が送られてきた…テスターはどこへ行けばいいのか?【自動テスト、テスト開発、性能テスト】
最初
に HTML ページを通じて MeterSphere データ ソースをアップロードした後、リクエスト メソッドを分割する必要があります。
get インターフェイスのパラメーターは、多くの場合、params の形式で渡されます。つまり、パラメーターは URL の後に追加されます。
post インターフェイスは通常、パラメータを json 文字列の形式で渡しますが、パラメータを渡すための params メソッドもあります。MeterSphere では、post は独自の jsonSchema インターフェイス関数を使用してパラメーターを定義できます。これは、キーと値のメソッドです。jsonを手書きすることもできます。ここでは jsonSchema を使用して解析します。
これら 2 種類のインターフェイスに基づいてブランチを作成します (put インターフェイスと delete インターフェイスも get インターフェイスに従います)。get インターフェイスは、get インターフェイスのパラメータの生成メソッドを使用します。ポストも同じです。
このアイデアに従って、自動スクリプト リバース ユース ケースによって生成される最初の関数の準備を開始しました。
アイデアの整理
まず、必要なユース ケース テンプレートと解析するデータ構造を決定します。以下に両方のデータ構造の例を示します。
目的を明確にした後、最初に行うことはデータ ストリームを取得することです。データ ストリームを取得した
後、インターフェイス リクエストの種類を決定します。
リクエストの種類に応じて、データ ストリームを異なるブランチに分割して送信します。パラメータを生成する対応する方法。
最後に、これらのパラメータは、必要なユースケース テンプレートに結合されます。
次の例は、MeterSphere の json 形式の例です。
{
"projectName": "",
"protocol": "HTTP",
"projectId": ",
"version": "v1.20.6-lts-1e3d1547",
"data": [
{
"id": "",
"projectId": "",
"name": "测试",
"method": "POST",
"modulePath": "/path1/path2/...",
"environmentId": null,
"schedule": null,
"status": "Underway",
"moduleId": "",
"userId": "admin",
"createTime": 1655860767171,
"updateTime": 1655860767171,
"protocol": "HTTP",
"path": "/api/v1/pub/stop",
"num": 100666,
"tags": null,
"originalState": null,
"createUser": "Administrator",
"caseTotal": "0",
"caseStatus": "-",
"casePassingRate": "-",
"deleteTime": null,
"deleteUserId": null,
"order": 3155000,
"refId": "08f6bde7-c906-459d-8a9b-95632bbeb5ee",
"versionId": "989beb9c-ebc8-45d3-8a80-967b06f2d192",
"latest": true,
"description": null,
"request": "{name:ss,canshu:111}",
"response": "respone",
"remark": null
}
],
"cases": [],
"mocks": [],
}
次の例は、最終的に解析されたユースケース スタイルです。
- api_name: callback_rooms
case_name: $ddt{case_name}
content_type: application/json
parameterize:
- - case_name
- 字段1
- 字段2
- 字段3
- - 常规用例
- oU
- 70
- 79
request:
base_url: url...
headers: null
json:
root:
字段1: $ddt{字段1}
字段2: $ddt{字段2}
字段3: $ddt{字段3}
method: POST
url: /xxx/xxx
validata:
- contains: 200
MeterSphere データを取得して分析する
# 得到MeterSphere数据并做解析
def get_ms_data(filename):
"""
get_data: 数据源
apis: 接口清单
get_params: get请求参数
api_name: 接口名称
method: 请求方式
get_apis: get接口
:return:拼接好的数据集
"""
# 所有接口的字典数据集合
apis = {}
# 获取ms文件流
with open(filename, "r", encoding="utf-8") as f:
request_params = json.load(f)
# 解析参数.判断接口是什么请求
for i in request_params["data"]:
get_data = i
path = get_data["path"]
api_name = str(path).split("/")
if len(api_name) > 1:
api_name = api_name[-2] + "_" + api_name[-1]
else:
api_name = api_name[-1]
method = get_data["method"]
get_apis = {
path: {
"api_name": api_name,
"method": method,
"content_type": "application/json"
}
}
if method.lower() in ["get", "put", "delete"]:
# 如果是get请求.调用解析get参数
try:
# 调用生成params参数
get_params = get_arguments(json.loads(get_data["request"])["arguments"])
get_apis[path].update(get_params)
apis.update(get_apis)
except Exception as e:
print_log(Exception(e))
else:
try:
# 兼容post接口中的请求参数是parasm类型
if "arguments" in get_data["request"] and "jsonSchema" not in json.loads(get_data["request"])["body"]:
# 调用生成params参数
get_params = get_arguments(json.loads(get_data["request"])["arguments"])
get_apis[path].update(get_params)
get_apis[path]["content_type"] = "application/text"
apis.update(get_apis)
else:
# 兼容post是jsonSchema对象的参数类型
if "jsonSchema" in json.loads(get_data["request"])["body"]:
try:
global NODE
NODE = True
post_params = deal_with_data(
data=json.loads(get_data["request"])["body"]["jsonSchema"],
required_list=json.loads(get_data["request"])["body"]["jsonSchema"][
"required"])
get_apis[path].update(post_params)
apis.update(get_apis)
except KeyError:
post_params = deal_with_data(
data=json.loads(get_data["request"])["body"]["jsonSchema"])
get_apis[path].update(post_params)
apis.update(get_apis)
else:
print("测试")
# 后续迭代
...
except Exception as e:
print_log(Exception(e))
raise Exception(e)
return apis
私はこの機能をマネージャーのように考え、要求を受け取った後、各人の異なる責任に応じて対応する担当者に割り当てます。次に、これらの部下の仕事に関するフィードバックを受け取り、そのフィードバックをレポートにまとめます。
執筆プロセス中、私はただこれを完成させたいと思っていました。関数を定義するときに従う必要がある単一責任の原則 (Python 職人で言及されている SRP 原則、各関数は単一の責任に従う必要があります。これにより、後のメンテナンスが容易になります) を無視します。上記関数は型判定を行うだけでなく、データの結合や指定された関数への代入も行います。特定の責任を変更したい場合。この機能は全体的なメンテナンスのために準備する必要があります。これに基づいて、関数を作成するときは、誰もが関数の責任が 1 つになるように努めます。
以下はサポート学習教材です。[ソフトウェア テスト] を行っている友人にとって、これは最も包括的で完全な準備倉庫となるはずです。この倉庫は、最も困難な旅にも同行してくれました。また、お役に立てれば幸いです。
ソフトウェアテストインタビューアプレット
何百万人もの人々が使用しているソフトウェア テストの質問バンクです。!!誰が知っているのか!!!インターネット上で最も包括的な面接テスト ミニ プログラムです。携帯電話を使用して質問に答えたり、地下鉄やバスに乗ったり、試験に参加したりすることができます。
次のインタビューの質問セクションをカバーします。
1. ソフトウェアテストの基礎理論、2. Web、アプリ、インターフェース機能テスト、3. ネットワーク、4. データベース、5. Linux
6. Web、アプリ、インターフェイスの自動化、7. パフォーマンス テスト、8. プログラミングの基本、9. 人事面接の質問、10. 公開テストの質問、11. セキュリティ テスト、12. コンピューターの基本
書類の入手方法:
このドキュメントは、[ソフトウェア テスト] に参加したい友人にとって、最も包括的で完全な準備倉庫となるはずです。この倉庫は、私が最も困難な旅を乗り越えるのにも同行してくれました。また、あなたのお役に立てれば幸いです。