1. 程式人生 > 其它 >Python 自動化測試(三): pytest 引數化測試用例構建

Python 自動化測試(三): pytest 引數化測試用例構建


在之前的文章中主要分享了 pytest 的實用特性,接下來講 Pytest 引數化用例的構建。
如果待測試的輸入與輸出是一組資料,可以把測試資料組織起來用不同的測試資料呼叫相同的測試方法。引數化顧名思義就是把不同的引數,寫到一個集合裡,然後程式會自動取值執行用例,直到集合為空便結束。pytest 中可以使用 @pytest.mark.parametrize 來引數化。
parametrize( ) 方法原始碼:

  • 主要引數說明
  • argsnames :引數名,是個字串,如中間用逗號分隔則表示為多個引數名
  • argsvalues :引數值,引數組成的列表,列表中有幾個元素,就會生成幾條用例
  • 使用方法
  • 使用 @pytest.mark.paramtrize() 裝飾測試方法
  • parametrize('data', param) 中的 “data” 是自定義的引數名,param 是引入的引數列表
  • 將自定義的引數名 data 作為引數傳給測試用例 test_func
  • 然後就可以在測試用例內部使用 data 的引數了
    建立測試用例,傳入三組引數,每組兩個元素,判斷每組引數裡面表示式和值是否相等,程式碼如下:
    執行結果:
    整個執行過程中,pytest 將引數列表 [("3+5",8),("2+5",7),("75",30)] 中的三組資料取出來,每組資料生成一條測試用例,並且將每組資料中的兩個元素分別賦值到方法中,作為測試方法的引數由測試用例使用。
    同一個測試用例還可以同時新增多個 @pytest.mark.parametrize 裝飾器, 多個 parametrize 的所有元素互相組合(類似笛卡兒乘積),生成大量測試用例。
    場景:比如登入場景,使用者名稱輸入情況有 n 種,密碼的輸入情況有 m 種,希望驗證使用者名稱和密碼,就會涉及到 n
    m 種組合的測試用例,如果把這些資料一一的列出來,工作量也是非常大的。pytest 提供了一種引數化的方式,將多組測試資料自動組合,生成大量的測試用例。示例程式碼如下:
    執行結果:
    分析如上執行結果,測試方法 test_foo( ) 添加了兩個 @pytest.mark.parametrize() 裝飾器,兩個裝飾器分別提供兩個引數值的列表,2 * 3 = 6 種結合,pytest 便會生成 6 條測試用例。在測試中通常使用這種方法是所有變數、所有取值的完全組合,可以實現全面的測試。
    下面講結合 @pytest.fixture 與 @pytest.mark.parametrize 實現引數化。
    如果測試資料需要在 fixture 方法中使用,同時也需要在測試用例中使用,可以在使用 parametrize 的時候新增一個引數 indirect=True,pytest 可以實現將引數傳入到 fixture 方法中,也可以在當前的測試用例中使用。
    parametrize 原始碼:
    indirect 引數設定為 True,pytest 會把 argnames 當作函式去執行,將 argvalues 作為引數傳入到 argnames 這個函式裡。建立“test_param.py”檔案,程式碼如下:
    執行結果:
    上面的結果可以看出,當 indirect=True 時,會將 login_r 作為引數,test_user_data 被當作引數傳入到 login_r 方法中,生成多條測試用例。通過 return 將結果返回,當呼叫 login_r 可以獲取到 login_r 這個方法的返回資料。
    【相關閱讀】
  • Python 測試開發實戰進階,挑戰阿里P6+,年薪50W+!
  • 乾貨 | 一文搞定 pytest 自動化測試框架(一)
  • 乾貨 | 一文搞定 pytest 自動化測試框架(二)
  • 乾貨 | 一文搞定 Linux 常用高頻命令

原文連結

⬇️ 點選“下方連結”,提升測試核心競爭力!https://qrcode.ceba.ceshiren.com/link?name=article&project_id=qrcode&from=bokeyuan&timestamp=1650529558

>>更多技術文章分享和免費資料領取