成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Tep0.6.0更新聊聊Pytest變量接口用例3個級別復用

開發 開發工具
tep是一款測試工具,在pytest測試框架基礎上集成了第三方包,提供項目腳手架,幫助以寫Python代碼方式,快速實現自動化項目落地。fixture是pytest核心技術,本文聊聊如何使用fixture完成變量、接口、用例3個級別復用。

[[374238]]

本文轉載自微信公眾號「PythonMind」,作者dongfanger。轉載本文請聯系PythonMind公眾號。   

 tep是一款測試工具,在pytest測試框架基礎上集成了第三方包,提供項目腳手架,幫助以寫Python代碼方式,快速實現自動化項目落地。fixture是pytest核心技術,本文聊聊如何使用fixture完成變量、接口、用例3個級別復用。

技術原理

fixture是一種特殊函數,實現了依賴注入,pytest規定,只要在conftest.py模塊中定義了fixture,作為參數傳給測試函數test(fixture_name)就可以使用,無需import。tep在conftest.py上封裝了一層fixtures,類似于Django初始化數據加載的fixtures,定義了env_vars環境變量,預置了登錄接口等。整體思路如下圖所示:

  • 實線:表示fixture流轉,從tep.fixture預置fixture,到fixtures,到conftest.py,到tests。
  • 虛線:表示動態變量流轉,參考JMeter vars.put()和vars.get(),實現用例級別復用。
  • 藍色線:表示靜態變量流轉,參考JMeter自定義用戶變量,實現變量級別復用。

tep.fixture

tep.fixture第一塊內容是預置fixture的實現代碼,如url、faker_ch等,對使用者隱藏。第二塊內容是類TepVar,預置了1個Python字典vars_和2個存取方法put()、get(),劃分了一塊key-value形式存儲區域。

fixtures

fixtures是一個包,里面包括多個fixture_*.py格式的Python模塊,定義的全部都是fixture,只對外提供fixture,不提供function。

自動注冊

conftest.py是pytest的特殊文件,文件名固定,tep在其中實現了自動注冊功能,它會自動查找fixtures目錄下,所有以fixture_開頭,以.py結尾的Python模塊進行導入,無需手動添加。注冊后,tests才能夠找到fixtures中定義的fixture,否則報錯fixture not found。

tests

tests存放所有測試用例,tep建議每個Python模塊中只定義1個test()函數,用例分離,獨立運行。

參考了HttpRunner每個yaml文件1條用例的做法。復雜場景可以定義多個測試test()函數或Test類,pytest都支持。

使用示例

變量級別復用

函數局部變量

  1. import jmespath 
  2. from loguru import logger 
  3.  
  4. from tep.client import request 
  5.  
  6.  
  7. def test_post(faker_ch, url, login): 
  8.     # description 
  9.     logger.info("test post"
  10.     # data 
  11.     fake = faker_ch 
  12.     # request 
  13.     response = request( 
  14.         "post"
  15.         url=url("/api/users"), 
  16.         headers=login.jwt_headers, 
  17.         json={ 
  18.             "name": fake.name() 
  19.         } 
  20.     ) 
  21.     # assert 
  22.     assert response.status_code < 400 
  23.     # extract 
  24.     user_id = jmespath.search("id", response.json()) 

函數內部變量,作用域是整條測試用例,可以在多個接口之間進行復用,比如參數化和關聯:

全局環境變量

  1. """ Can only be modified by the administrator. Only fixtures are provided. 
  2. ""
  3.  
  4. from tep.dao import mysql_engine 
  5. from tep.fixture import * 
  6.  
  7.  
  8. @pytest.fixture(scope="session"
  9. def env_vars(config): 
  10.     class Clazz(TepVars): 
  11.         env = config["env"
  12.  
  13.         """Variables define start""" 
  14.         # Environment and variables 
  15.         mapping = { 
  16.             "qa": { 
  17.                 "domain""https://qa.com"
  18.                 "mysql_engine": mysql_engine("127.0.0.1",  # host 
  19.                                              "2306",  # port 
  20.                                              "root",  # username 
  21.                                              "123456",  # password 
  22.                                              "qa"),  # db_name 
  23.             }, 
  24.             "release": { 
  25.                 "domain""https://release.com"
  26.                 "mysql_engine": mysql_engine("127.0.0.1"
  27.                                              "2306"
  28.                                              "root"
  29.                                              "123456"
  30.                                              "release"), 
  31.             } 
  32.             # Add your environment and variables 
  33.         } 
  34.         # Define properties for auto display 
  35.         domain = mapping[env]["domain"
  36.         mysql_engine = mapping[env]["mysql_engine"
  37.         """Variables define end""" 
  38.  
  39.     return Clazz() 
  40.  
  41.  
  42. @pytest.fixture 
  43. def project_level(): 
  44.     pass 

使用:

  1. def test(env_vars, env_vars_your_name): 
  2.     print(env_vars.common_var) 
  3.     print(env_vars_your_name.my_var) 

全局環境變量由fixtures提供:

核心數據是env_vars.Clazz類里面的mapping、domain、mysql_engine等屬性:

這么做的目的是為了在PyCharm中敲代碼,輸入.后能自動帶出來,提高編碼效率。fixture_admin.py建議由管理員維護項目級別的公共變量,fixture_your_name.py由團隊成員定義自己的環境變量,避免沖突。它們還有一個區別是fixture_admin.py的env_vars繼承了tep.fixture.TepVar,支持env_vars.put()和env_vars.get()。

變量都由fixture提供。

接口級別復用

tep預置登錄接口fixture_login.py已經實現了接口級別復用,其他接口可以參照實現:

  1. from tep.client import request 
  2. from tep.fixture import * 
  3.  
  4.  
  5. def _jwt_headers(token): 
  6.     return {"Content-Type""application/json""authorization": f"Bearer {token}"
  7.  
  8.  
  9. @pytest.fixture(scope="session"
  10. def login(url): 
  11.     # Code your login 
  12.     logger.info("Administrator login"
  13.     response = request( 
  14.         "post"
  15.         url=url("/api/users/login"), 
  16.         headers={"Content-Type""application/json"}, 
  17.         json={ 
  18.             "username""admin"
  19.             "password""123456"
  20.         } 
  21.     ) 
  22.     assert response.status_code < 400 
  23.     response_token = jmespath.search("token", response.json()) 
  24.  
  25.     class Clazz: 
  26.         token = response_token 
  27.         jwt_headers = _jwt_headers(response_token) 
  28.  
  29.     return Clazz 

使用:

  1. from loguru import logger 
  2.  
  3.  
  4. def test_login(login): 
  5.     logger.info(login.token) 

用例級別復用

a_test.py,定義1條測試用例test_a(),使用faker_ch生成隨機name,通過env_vars.put()方法寫入TepVar.vars_中:

  1. def test_a(faker_ch, env_vars): 
  2.     name = faker_ch.name() 
  3.     env_vars.put("name"name

reuse_a_test.py,定義另外1條測試用例test(),import test_a后手動調用執行,從TepVar.vars_中讀取name:

  1. from tests.sample.case_reuse.a_test import test_a 
  2.  
  3.  
  4. def test(faker_ch, env_vars): 
  5.     test_a(faker_ch, env_vars) 
  6.     print(env_vars.get("name")) 

注意test_a()函數參數引用的所有fixture,需要在test()函數參數中重新申明一遍,比如示例中的(faker_ch, env_vars)。

tep是借助conftest.py和fixture,用類變量來做的,參考了JMeter BeanShell的vars。

也可以外接redis。

tep0.6.0更新

tep用戶手冊是根據0.5.3版本寫的,現在更新了0.6.0版本,一是支持本文提到的3個級別復用,微調了fixtures,二是把項目腳手架代碼盡量封裝到tep中,減少后續升級成本。涉及到4個文件:conftest.py、fixture_admin.py、fixture_login.py、fixture_your_name.py。

更新tep

  1. pip install tep==0.6.0 
  • 如果還沒有用過tep,使用這條命令安裝后,執行tep startproject project_name就可以創建0.6.0版本的項目腳手架,包含了預置代碼結構和sample測試用例。
  • 如果已經安裝了tep,也需要執行這條命令升級0.6.0版本。

老項目升級(可選)

老項目升級也很簡單,先在項目根目錄執行命令:

  1. tep -U 

它會自動替換conftest.py,考慮到老項目fixtures已經有真實數據了,這里給出了version0.6.0文件包,命令執行后在項目根目錄生成:

把老項目的真實數據提取出來,手動替換一下就可以了:

小結

本文介紹了如何使用pytest測試框架實現變量、接口、用例3個級別復用,給出了在tep中的使用示例,然后提供了安裝升級tep0.6.0的方法。這套思路借鑒了JMeter和HttpRunner的部分設計思想,以及我使用過的接口測試平臺經驗,在pytest上實踐了一下。tep只是測試工具,本質上還是寫pytest,感興趣可以試一下哦。

參考資料:源碼 https://github.com/dongfanger/tep

 

責任編輯:武曉燕 來源: PythonMind
相關推薦

2011-06-08 17:30:18

用例級別缺陷等級

2011-05-16 15:18:18

測試用例

2017-11-08 12:51:12

2021-02-07 23:58:10

單例模式對象

2022-06-10 13:03:44

接口重試while

2021-11-18 08:20:22

接口索引SQL

2019-10-31 14:10:35

大數據人工智能工具

2023-10-11 08:09:53

事務隔離級別

2021-01-14 10:00:57

Restful接口

2018-08-21 05:03:04

NV overlay網絡虛擬化網絡

2022-11-15 10:01:27

2023-02-08 10:28:55

物聯網智慧農業

2021-04-19 10:45:52

Webpack熱更新前端

2022-04-13 21:07:30

Vue 3函數重載

2020-11-25 18:15:10

AI

2022-09-12 06:33:15

Select多路復用

2023-07-26 07:13:55

函數接口Java 8

2021-05-25 07:46:43

CSSCSS 變量Web應用

2022-04-21 15:35:24

工業物聯網數據泄露能源

2010-06-09 18:38:28

UML用例圖
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩国产一区二区三区 | 国产97色 | 欧美日韩一区二区视频在线观看 | 久久久久久免费毛片精品 | 成人免费视频一区 | 亚洲国产成人精品女人久久久 | 国产一区二区三区四区在线观看 | 国产乱人伦| 欧美成人在线影院 | 亚洲国产精品美女 | 欧美日韩精品一区 | 91在线免费视频 | 一区二区高清 | 一区二区三区欧美 | 精品国产精品一区二区夜夜嗨 | 国产91丝袜在线播放 | 日韩高清一区 | 成人国产在线观看 | 精品国产区 | 一级片视频免费 | 亚洲电影在线播放 | 精品美女视频在线观看免费软件 | 国产在线精品一区二区 | 国产激情在线 | 国产高清精品一区二区三区 | www,黄色,com| 成人在线免费视频观看 | 天天草天天爱 | 国产精品久久在线观看 | av看看 | 久久久久国产一区二区三区 | 日韩在线资源 | 精品一区二区三区在线播放 | 亚洲第一av| 羞羞的视频免费观看 | 日韩精品一区二区三区在线播放 | 男人天堂免费在线 | 青娱乐av| 81精品国产乱码久久久久久 | 羞羞视频在线观看 | 在线一区视频 |