本文章主要會講解接口測試中用例設計的動態參數化形式,除此之外下方有系列文章的傳送門,還在持續更新中,感興趣的小伙伴也可以前往查看,話不多說,讓我們一起看看吧~
系列文章:
系列文章1:【Python自動化測試1】遇見Python之美
系列文章2:【Python自動化測試2】Python安裝配置及PyCharm基本使用
系列文章3:【Python自動化測試3】初識數據類型與基礎語法
系列文章4:【Python自動化測試4】字符串知識總結
系列文章5:【Python自動化測試5】列表與元組知識總結
系列文章6:【Python自動化測試6】字典與集合知識總結
系列文章7:【Python自動化測試7】數據運算符知識合集
系列文章8:【Python自動化測試8】流程控制語句講解
系列文章9:【Python自動化測試9】函數知識合集
系列文章10:【Python自動化測試10】文件基礎操作
系列文章11:【Python自動化測試11】模塊、包與路徑知識合集
系列文章12:【Python自動化測試12】異常處理機制知識合集
系列文章13:【Python自動化測試13】類、對象、屬性與方法知識合集
系列文章14:【Python自動化測試14】Python自動化測試基礎與進階練習題
系列文章15:【Python自動化測試15】unittest測試框架的核心概念與作用
系列文章16:【Python自動化測試16】測試用例數據分離
系列文章17:【Python自動化測試17】openpyxl二次封裝與數據驅動
系列文章18:【Python自動化測試18】配置文件解析與實際應用
系列文章19:【Python自動化測試19】日志系統logging講解
系列文章20:【Python自動化測試20】接口自動化測試框架模型搭建
系列文章21:【Python自動化測試21】接口自動化測試實戰一_接口概念、項目簡介及測試流程問答
系列文章22:【Python自動化測試22】接口自動化測試實戰二_接口框架修改及用例優化
舉個例子,我們在設計一個注冊接口測試用例的時候,會碰到一個明顯的瓶頸,該手機號是未進行注冊的,在第一次執行自動化測試用例時能夠成功的完成注冊,但在第二次再次執行測試用例時會發現,手機號已存在,那麼二次執行該測試用例就會執行失敗,而面對這種情況,有以下幾個解決思路:
""" 解決思路: 1、每一次通過手動的方式打開excel刪除後重新輸入一個新的手機號 2、在數據庫中查詢該手機號,如果該手機號已存在,那麼在數據庫進行手機號刪除 3、在現有的手機號上的最末尾數+1 4、隨機生成一個手機號 思路分析: 1、第一種方式雖然能夠解決,但每一次執行時都需要人工手動的去替換,不便於維護 2、雖然能查詢並刪除手機號,但往往真實的項目不會輕易的做數據庫刪除操作,並且一個已注冊手機號會有表關聯,且大多數情況下測試無權限進行刪除 3、這也是一個解決方式,我們可以在第11位數字上,每次都+1,弊端是終究會碰到可能會和其他手機號相沖突的號碼從而執行失敗,但效率遠高於1和2 4、最後的方式也是動態參數化,在需要替換的數據上做標記,當循環遍歷到這個標記時使用隨機生成的號碼替換這個標記,以在執行用例時能夠順利通過 """
動態參數化就是為了解決這一類的問題,讓手機號持續性的隨機變更,讓每一次的執行都不會因為手機號的重復而導致用例失敗(使用動態參數化仍然可能會隨機到已注冊的號碼,但概率極低),而隨機生成某一個手機號碼就需要用到數據偽造。
在自動化測試領域中數據偽造並非是什麼破壞系統安全的事情,而是希望能夠自動化生成測試用例的數據且數據符合一定的規則,例如手機號,電子郵箱等等。數據偽造安可以用在自動化注冊模塊,也可以用於登錄或其他文本輸入框來檢測一定的輸入規則等。
在Python中進行數據偽造庫 – faker
庫,通過pip
先進行安裝後即可:
import faker
# 初始化faker對象,指定生成規則區域為中國
fk = faker.Faker(locale="zh_CN")
result = fk.phone_number()
print(f"手機號:{
result}")
# 隨機生成一個地址
company = fk.company()
print(f"地址:{
company}")
# 隨機生成一個公司
address = fk.address()
print(f"公司:{
address}")
# 隨機生成一個城市
city = fk.city()
print(f"城市:{
city}")
除了標准的偽造庫能夠提供偽造外,我們也可以使用自己期望的方式來制定一個規則:
def generate_new_phone():
phone = "1" + random.choice(["3", "5", "7", "8", "9"])
for i in range(9):
num = random.randint(0, 9)
phone += str(num)
return phone
print(f"函數式手機號:{
generate_new_phone()}")
簡易的封裝偽造庫函數,如果你是在框架中寫數據偽造的代碼,那麼可以放在common
中,從common
中在導入以此來生成一些數據:
import faker
def generate_new_phone():
fk = faker.Faker(locale="zh_CN")
result = fk.phone_number()
return result
# 改動後的片段代碼(如對片段代碼有疑問,請參考前置文章):
@ddt
class TestLogin(unittest.TestCase):
@list_data(data)
def test_login_success(self, case_data):
json_data = case_data["json"]
if "#new_phone#" in json_data:
new_phone = data_forgery.generate_new_phone()
json_data = json_data.replace("#new_phone", new_phone)
好啦~以上就是本次文章分享的全部內容啦,你學會了嗎?希望能給大家帶來幫助哦!