聊一聊Python isinstance內(nèi)置函數(shù)
isinstance() 是Python的一個內(nèi)置函數(shù),用于檢查一個對象是否是一個已知的類型或子類的實例。這個函數(shù)非常有用,特別是在處理多種類型的輸入或者需要確保某個對象符合特定類型要求的場景下。其基本語法如下:
isinstance(object, classinfo)
object:要檢查的對象。
classinfo:可以是一個類型或者一個類型元組,用來指定要檢查的類型或其子類。
基本用法示例
檢查單一類型:
x = 5
if isinstance(x, int):
print("x 是整數(shù)")
else:
print("x 不是整數(shù)")
檢查多個類型:
y = 5.0
if isinstance(y, (int, float)):
print("y 是整數(shù)或浮點數(shù)")
else:
print("y 不是整數(shù)或浮點數(shù)")
檢查繼承關(guān)系:
假設(shè)有一個類層次結(jié)構(gòu),Animal是基類,Dog和Cat是它的子類。
class Animal: pass
class Dog(Animal): pass
class Cat(Animal): pass
my_pet = Dog()
if isinstance(my_pet, Animal):
print("my_pet 是 Animal 的實例或子類實例")
注意事項
當使用元組作為classinfo參數(shù)時,isinstance()會檢查對象是否為元組中任意一個類的實例。
對于用戶自定義類,如果該類繼承了其他類,isinstance()也會考慮繼承關(guān)系。
使用isinstance()可以有效地處理Python的動態(tài)類型特性,提高代碼的靈活性和健壯性。
在接口自動化測試中,isinstance()函數(shù)可以幫助確保傳入的數(shù)據(jù)類型符合預(yù)期,從而避免因類型錯誤導致的測試失敗。以下是10個使用isinstance()的場景及其代碼示例,這些場景覆蓋了驗證響應(yīng)數(shù)據(jù)類型、處理請求參數(shù)、處理時間格式等方面:
1. 驗證響應(yīng)狀態(tài)碼為整數(shù)
確保從API響應(yīng)中提取的狀態(tài)碼是一個整數(shù)。
response_status = 200
assert isinstance(response_status, int), "狀態(tài)碼應(yīng)為整數(shù)"
2. 檢查響應(yīng)體是否為字典
確保API響應(yīng)的主體部分是JSON格式,即Python中的字典。
response_body = {'message': '成功'}
assert isinstance(response_body, dict), "響應(yīng)體應(yīng)為字典類型"
3. 確認請求參數(shù)為字符串
在構(gòu)建請求參數(shù)時,確保所有參數(shù)都是字符串。
param = "exampleParam"
assert isinstance(param, str), "請求參數(shù)應(yīng)為字符串類型"
4. 驗證日期時間格式為字符串
檢查API返回的日期時間字段是否為字符串格式。
date_str = "2023-04-28T12:00:00Z"
assert isinstance(date_str, str), "日期時間應(yīng)為字符串類型"
5. 檢查數(shù)值型字段
確認某個字段是整數(shù)或浮點數(shù)類型。
amount = 100.50
assert isinstance(amount, (int, float)), "金額應(yīng)為整數(shù)或浮點數(shù)類型"
6. 確認列表類型數(shù)據(jù)
驗證返回結(jié)果中的數(shù)組字段。
items_list = ["item1", "item2"]
assert isinstance(items_list, list), "數(shù)據(jù)應(yīng)為列表類型"
7. 字典中鍵值對的類型檢查
檢查字典中特定鍵的值是否符合預(yù)期類型。
data = {'price': 99.99}
assert isinstance(data.get('price'), float), "價格應(yīng)為浮點數(shù)類型"
8. 驗證布爾值
確認某些標志或狀態(tài)為布爾類型。
isActive = True
assert isinstance(isActive, bool), "激活狀態(tài)應(yīng)為布爾類型"
9. 檢查NoneType
確認某些字段是否為空或未提供。
optionalField = None
assert isinstance(optionalField, type(None)), "此字段可接受為None"
10. 自定義類型驗證
假設(shè)有個自定義的User類,檢查API響應(yīng)中用戶信息是否為該類的實例。
class User:
def __init__(self, name, age):
self.name = name
self.age = age
user_instance = User("Alice", 30)
assert isinstance(user_instance, User), "返回的用戶信息應(yīng)為User類的實例"
這些場景展示了如何在接口自動化測試中使用isinstance()函數(shù)來增強測試的健壯性和準確性,確保數(shù)據(jù)類型的一致性。