前面文章有寫道通過fixture中params參數完成參數化,但是該方式會應用到所有測試用例,如果只想在單個測試用例上使用,則需要用到@pytest.mark.parametrize這個裝飾器完成
我們想要實現對一個登陸程序的參數化操作。代碼如下:
# 登錄程序源碼 login_info = {'zhangsan':'123456','lisi':'000000'} def login(username,password): if username in login_info: if password == login_info[username]: return '登錄成功' else: return '密碼輸入錯誤' else: return '用戶名輸入錯誤'
# 測試代碼
# @pytest.mark.parametrize該裝飾器所接收參數是通過列表的方式接收,每一組參數為一個元組,如果數據較多的情況下,可以將數據放到文件中讀取
@pytest.mark.parametrize("username,password,expect", [ ('zhangsan','123456','登錄成功'), ('zhangsi', '123456', '用戶名輸入錯誤'), ('zhangsan', '000000', '密碼輸入錯誤'), ]) def test_login(username,password,expect): assert login(username,password) == expect

如果想要參數的自由組合,則可以通過多個參數化裝飾器完成
# 程序源碼 def login(username,password): print('用戶名為:%s\t密碼為:%s'%(username,password)) # 測試代碼 @pytest.mark.parametrize("username",['zhangsan','lisi','wangwu']) @pytest.mark.parametrize("password",['123456','000000','abcdef']) def testlogin(username,password): login(username,password)

