<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Pytest之參數(shù)化

          共 3342字,需瀏覽 7分鐘

           ·

          2020-09-03 14:47

          VOL 154

          02

          2020-09

          今天距2021年120天

          這是ITester軟件測試小棧第154次推文

          點擊上方藍(lán)字“ITester軟件測試小棧“關(guān)注我,每周一、五早上?08:30準(zhǔn)時推送,每月不定期贈送技術(shù)書籍。


          微信公眾號后臺回復(fù)“資源、測試工具包”領(lǐng)取測試資源,回復(fù)“微信群”一起進(jìn)群打怪。


          本文3090字,閱讀約需8分鐘






          在上一篇Pytest系列文章:Pytest之自定義mark,主要介紹pytest自定義配置及用例運行實戰(zhàn)。以下主要介紹pytest參數(shù)化講解及實戰(zhàn)。


          熟悉unittest單元測試框架的小伙伴知道,使用ddt進(jìn)行數(shù)據(jù)驅(qū)動測試,那么身為功能更加強大且更加靈活的Pytest框架怎么可能沒有數(shù)據(jù)驅(qū)動的概念呢?Pytest使用@pytest.mark.parametrize裝飾器來實現(xiàn)數(shù)據(jù)驅(qū)動測試的,也就是常說的參數(shù)化。


          parametrize語法


          parametrize(self,argnames,?argvalues,?indirect=False,?ids=None,?scope=None)


          argnames:參數(shù)名。


          argvalues參數(shù)對應(yīng)值,類型必須為list。果只有一個參數(shù),里面則是值的列表:

          如:@pytest.mark.parametrize("username", ["yy", "yy2", "yy3"])。如果有多個參數(shù),則需要用元組來存放值,一個元組對應(yīng)一組參數(shù)的值,如:@pytest.mark.parametrize("name,pwd", [("yy1", "123"), ("yy2", "123"), ("yy3", "123")])。


          indirect:如果設(shè)置成True,則把傳進(jìn)來的參數(shù)當(dāng)函數(shù)執(zhí)行,而不是一個參數(shù)。


          ids:用例的ID,傳一個字符串列表,用來標(biāo)識每一個測試用例,自定義測試數(shù)據(jù)結(jié)果,增加可讀性。



          參數(shù)講解


          1

          單個數(shù)據(jù)


          import?pytest
          data?=?["小紅",?"小明"]
          @pytest.mark.parametrize("name",data)
          def?test_demo(name):
          ????print("測試數(shù)據(jù)為{}".format(name))


          運行結(jié)果為:



          2

          一組數(shù)據(jù)


          01表嵌套字典

          import?pytest
          data_1?=?[
          ????{"username":?"admin1",?"password":?"123456"},
          ????{"username":?"admin2",?"password":?"12345678"},
          ]
          @pytest.mark.parametrize("data",?data_1)
          def?test_login(data):
          ????print("賬號:{},密碼:{}".format(data["username"],data["password"]))


          運行結(jié)果為:


          02?列表嵌套列表

          import?pytest
          data_1?=?[
          ????["admin1",?"123456"],
          ????["admin2",?"12345678"],
          ]
          @pytest.mark.parametrize("username,password",?data_1)
          def?test_login(username,password):
          ????print("賬號:{},密碼:{}".format(username,?password))


          運行結(jié)果為:



          03?列表嵌套元組

          import?pytest
          data_1?=?[
          ????("admin1",?"123456"),
          ????("admin2",?"12345678"),
          ]
          @pytest.mark.parametrize("username,password",?data_1)
          def?test_login(username,password):
          ????print("賬號:{},密碼:{}".format(username,?password))

          運行結(jié)果為:




          場景運用



          1

          裝飾函數(shù)


          import?pytest
          @pytest.mark.parametrize("username,password",[("admin01","123456"),("admin02","12345678")])
          def?test_demo(username,password):
          ????print("用戶名:{},密碼:{}".format(username,password))


          運行結(jié)果為:




          2

          裝飾類

          import?pytest
          @pytest.mark.parametrize("username,password",[("admin01","123456"),("admin02","12345678")])
          class?TestDemo:
          ????def?test_demo(self,username,password):
          ????????print("用戶名:{},密碼:{}".format(username,password))


          運行結(jié)果為:


          注意:裝飾測試類時,類內(nèi)所有的方法必須接收測試數(shù)據(jù),否則會報錯;裝飾測試函數(shù)時比較靈活,如果函數(shù)不使用數(shù)據(jù)就可以不裝飾。



          3

          多個參數(shù)化裝飾器


          使用多個參數(shù)化裝飾器,數(shù)據(jù)會進(jìn)行交叉組合的方式傳遞給測試函數(shù),進(jìn)而生成n*n個測試用例(笛卡爾積)。

          test_demo.py

          import?pytest
          username?=?["admin1",?"admin2",?"admin3"]
          password?=?["123456",?"1234567",?"12345678"]
          @pytest.mark.parametrize("uname",username)
          @pytest.mark.parametrize("pwd",password)
          def?test_demo(uname,pwd):
          ????print("用戶名:{},密碼:{}".format(uname,?pwd))


          運行結(jié)果如下:



          4

          增加可讀性


          parametrize參數(shù)中的ids,可以標(biāo)識每一個測試用例,自定義測試數(shù)據(jù)結(jié)果的顯示,增加可讀性。

          test_demo.py

          import?pytest
          data_1?=?[
          ????(1,?2,?3),
          ????(4,?5,?9)
          ]
          ids?=?["a:{}?+?b:{}?=?expect:{}".format(a,?b,?expect)?for?a,?b,?expect?in?data_1]
          def?add(a,?b):
          ????return?a?+?b
          @pytest.mark.parametrize('a,?b,?expect',?data_1,?ids=ids)
          def?test_parametrize_1(a,?b,?expect):
          ????print('\n測試函數(shù)1測試數(shù)據(jù)為\n{}-{}'.format(a,?b))
          ????assert?add(a,?b)?==?expect


          命令行輸入:pytest -v




          以上

          That‘s all
          更多系列文章
          敬請期待

          ITester軟件測試小棧
          往期內(nèi)容寵幸


          1.Pytest之基本介紹

          2.Pytest之?dāng)嘌?/a>


          3.Pytest之fixture


          4.Pytest之自定義mark

          5.Pytest之收集用例及命令行參數(shù)


          6.Pytest之skip、skipif、xfail


          7.Python接口自動化之requests請求封裝


          8.Python接口自動化之pymysql數(shù)據(jù)庫操作


          9.Python接口自動化之logging日志


          10.Python接口自動化之logging封裝及實戰(zhàn)

          想獲取更多最新干貨內(nèi)容
          快來星標(biāo) 置頂 關(guān)注
          每周一、三、五 08:30見

          << ?滑動查看下一張圖片 ?>>


          ?后臺?回復(fù)"資源"取干貨
          回復(fù)"微信群"一起打怪升級

          測試交流Q群:727998947

          點亮一下在看,你更好看


          瀏覽 74
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本亚洲天堂 | 自拍在线韩国 | 亚洲美国日本中文字幕 | 伊人婷婷狠狠 | 黄色电影在线播放网址 |