最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

simple-pytest?框架使用教程

 更新時間:2024年02月27日 09:36:35   作者:小生測試  
simple-pytest框架主要參考了httprunner的yaml數(shù)據(jù)驅(qū)動部分設計思路,是基于Pytest?+?Pytest-html+?Log?+?Yaml?+?Mysql?實現(xiàn)的簡易版接口自動化框架,這篇文章主要介紹了simple-pytest?框架使用指南,需要的朋友可以參考下

一、框架介紹

簡介

simple-pytest 框架主要參考了httprunner的yaml數(shù)據(jù)驅(qū)動部分設計思路,是基于 Pytest + Pytest-html+ Log + Yaml + Mysql 實現(xiàn)的簡易版接口自動化框架。與httprunner不同的是,httprunner是個封裝好的工具包,simple-pytest 是半封裝的腳本,目的是讓用戶自己更容易學習Pytest工具,理解框架設計。

框架理念:

1、一個yaml就是一個接口,包含了接口的請求,斷言等信息。
2、腳本執(zhí)行使用pytest+python代碼做邏輯處理,更加方便喜歡寫代碼的同學
3、讓新手同學更加全面的理解pytest框架
4、為了
在學這個框架前,必備的一點常識是:
1、python基礎語法
2、pytest基礎包括用例執(zhí)行,夾具使用等

框架地址

gitee: https://gitee.com/itestxs/simple-pytest

二、實現(xiàn)功能

  • yaml數(shù)據(jù)驅(qū)動:實現(xiàn)數(shù)據(jù)驅(qū)動隔離
  • 用例標簽:在py腳本中可以通過case_tag做用例過濾
  • 全局變量池:實現(xiàn)接口之間的關(guān)聯(lián)取值
  • 多斷言:支持==,!=等多種斷言,支持jsonpath的取值方式
  • sql數(shù)據(jù)庫斷言: 直接在yaml測試用例中寫入查詢的sql即可斷言,無需編寫代碼
  • 自動生成用例代碼: 在yaml文件中填寫好測試用例, 可以轉(zhuǎn)換為py腳本。

三、目錄結(jié)構(gòu)

- config ====>> 項目配置文件redis,mysql等
- data ====>> 測試數(shù)據(jù)文件管理
- logs ====>> 日志記錄
- reports ====>> 結(jié)果報告,包括html
- test_cases ====>> 測試用例 
    ├── confset.py ====>> 測試夾具
- utils ====>> 各種工具類
    ├── assertion ====>>  斷言工具
- pytest.ini ====>> pytest配置文件
- conftest.py ====>> 全局夾具配置
- requirements.txt ====>> 相關(guān)依賴包文件
- run.py ====>> 執(zhí)行用例入口文件

四、依賴庫

requests==2.28.1
jsonpath==0.82
fastapi==0.88.0
pymysql==1.0.2
pyyaml==5.4.1
pytest==7.4.3
pytest-html==4.1.1
py==1.11.0

五、啟動方式

1、先安裝pip install requirements.txt
2、啟用utils下的shopping_mock模塊
3、運行run.py文件,然后,查看report的結(jié)果報告即可。

六、使用教程

1、快速開始

1.1、創(chuàng)建用例:

在data目錄下創(chuàng)建yaml文件

主要的字段格式如下:
title:接口名字
base_url:域名地址,不填則默認取得setting的BASE_URL,如果填寫了,則直接獲取填寫的
path:接口請求地址
method:請求方法
request_data:統(tǒng)一的請求參數(shù),比如headers
cases:測試用例集合
case_name:測試用例名字,支持多個case_name年編寫
case_tag:支持參數(shù)avl、dis、only 不填則為avl。其中avl就是可用的意思,dis不可用,only是代表只有當前用例生效。如果只傳入only,則其他用例則不被執(zhí)行,優(yōu)先級是only>dis>avl。也可以自定義打tag
json:接口的請求體,可以直接輸入字典格式(自動生成的用例不是字典格式)。請注意yaml的格式
params:接口的url請求參數(shù)。(待補充用例)
assert:斷言,status_code是斷言請求狀態(tài)碼。$.data是jsonpath的表達式,目前僅支持改表達式寫法。目前支持的斷言方式請在assert_type.py里查看包含,大于、不等于、等于一系列判斷
sql:該case關(guān)聯(lián)的sql,可以將該sql用來做前置還是以及后置
extract_sql:提起該sql的返回內(nèi)容的某個字段存在變量池中,$.id 也是jsonpath表達式
assert_sql:sql的斷言,用法同assert

yaml 模板用例如下:

title: "查詢商品"
base_url: $config{BASE_URL}
path: /items
method: GET
request_data:
  headers:
    Content-Type: application/json
    token: $global{token}
cases:
  - case_name: "搜索-正常"
    # case_tag 支持參數(shù)avl、dis、only 不填則為avl,如果只傳入only,則所有case 只會返回only的數(shù)據(jù),也可以自定義打tag
    case_tag: avl
    assert:
      - eq: [ status_code, 200 ]
      - ne: [ $.data, "" ]
    sql: select * from projectInfo where project="bm-scm"
    extract_sql:
      id: $.id
    assert_sql:
      - eq: [ $.id, 1 ]
  - case_name: "搜索-超出范圍"
    case_tag: avl
    params: "page=2&limit=10"
    assert:
      - eq: [ status_code, 200 ]
      - eq: [ $.data, [] ]
# login.yaml
title: "登錄"
path: /login
method: POST
request_data:
  headers:
    Content-Type: application/json
cases:
  - case_name: "登錄-正常"
    # case_tag 支持參數(shù)avl、dis、only 不填則為avl,如果只傳入only,則所有case 只會返回only的數(shù)據(jù),也可以自定義打tag
    case_tag: avl
    json: {"username": "user1", "password": "password1"}
    extract:
      token: $.token
    assert:
      - eq: [status_code, 200]
      - ne: [$.token, ""]
  - case_name: "登錄-用戶名為空"
    case_tag: avl
    json: { "username": "", "password": "password1" }
    assert:
      - eq: [status_code, 401]
      - eq: [$.detail, "Invalid username or password"]

1.2、生成py文件

在utils目錄下的yaml_to_py文件main修改,yaml_to_pys批量轉(zhuǎn)換整個data文件夾下的yaml文件,yaml_to_py轉(zhuǎn)換指定的yaml文件,參數(shù),cover代表是否覆蓋,傳入true,則會覆蓋你現(xiàn)有的。

if __name__ == '__main__':
    yaml_to_pys()
    # yaml_to_py("login.yaml")

case_datas 為自動獲取測試用例集,可以通過get_case_data(case_tag=“tag”)中的case_tag去過濾特定標簽用例。

1.3、運行腳本

1.3.1 單個腳本運行

每個執(zhí)行py腳本都可直接右擊執(zhí)行

1.3.2 全部運行

點擊運行run文件,可以通過testenv 參數(shù)指定獲取哪個環(huán)境的配置。

1.4 報告查看

如果是單個配置,則直接在當前test_cases目錄下就可以看到,如果是run腳本執(zhí)行,則報告統(tǒng)一放在reports
目前的報告格式是pytest-html。如果要用allure,則可以自己修改使用。

2、功能介紹

2.1、單個接口http請求與斷言

    response = HttpRequest.simple_request(case_data)
    Assert(response, case_data.get("assert")).assert_util
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pytest
from utils.assertion.assert_util import Assert
from utils.http_request import HttpRequest
from utils.read_file_data import ReadFileData
class TestLogin():
    case_datas = ReadFileData("login.yaml").get_case_data()  # get_case_data("tag") 自定義tag輸入
    @pytest.mark.parametrize('case_data', case_datas, ids=generate_ids(case_datas))
    def test_login(self, case_data):
        response = HttpRequest.simple_request(case_data)
        Assert(response, case_data.get("assert")).assert_util
if __name__ == '__main__':
    pytest.main(["test_login.py"])

2.2、長鏈路業(yè)務http請求與斷言

該功能是添加購車然后付款的流程。 彼此之間有接口依賴問題,通常解決依賴問題有兩種

  • 第一種:使用框架自帶的merge_cases_data函數(shù)

test_data = merge_cases_data(add_carts_data, order_pays_data) # 將多個用例合并。merge_cases_data 是依賴接口合并,有兩個默認規(guī)則,如果兩個接口用例數(shù)一樣多的,如[x,y],[A,B]那用例合并后結(jié)果就是[x,A] ,[y,B],如果兩個接口用例數(shù)不一樣,如[x] [A,B]那結(jié)果就是[x,A],[x,B],如[x,y] [A]那結(jié)果就是[x,A],[y,A]。

  • 第二種:自己編寫代碼邏輯。

每個yaml就是一個接口。獲取每個yaml的接口數(shù)據(jù),然后獲取用例后if else邏輯。如果接口之前有變量依賴,請借助全局變量去取。

import pytest
from utils.assertion.assert_util import Assert
from utils.http_request import HttpRequest
from utils.merge_cases import merge_cases_data, generate_ids
from utils.read_file_data import ReadFileData
class TestAddPay():
    add_carts_data = ReadFileData("add_carts.yaml").get_case_data()  # get_case_data("tag") 自定義tag輸入
    order_pays_data = ReadFileData("order_pays.yaml").get_case_data()
    test_data = merge_cases_data(add_carts_data, order_pays_data) # 將多個用例合并
    print("testdata",test_data)
    @pytest.mark.parametrize('add_carts_data,order_pays_data', test_data, ids=generate_ids(test_data,"merge"))
    def test_add_pay(self, add_carts_data, order_pays_data):
        add_carts_response = HttpRequest.simple_request(add_carts_data)
        # print(add_carts_response.json())
        Assert(add_carts_response, add_carts_data.get("assert")).assert_util
        order_pays_response = HttpRequest.simple_request(order_pays_data)
        # print(order_pays_response.json())
        Assert(order_pays_response, order_pays_data.get("assert")).assert_util
if __name__ == '__main__':
    pytest.main(["test_add_pay.py"])

2.3、數(shù)據(jù)庫斷言

需要提前在config配置settings的MYSQL_CONFIG參數(shù)

data = SqlRequest.sql_request(case_data)
Assert(data, case_data.get("assert_sql")).sql_assert_util

如果要講數(shù)據(jù)庫字段提取出來,則寫在

GlobalVars.update_global_vars(key=“data”, value=data) # 將參數(shù)手動添加到公共變量中

import json
import pytest
from utils.assertion.assert_util import Assert
from utils.global_vars import GlobalVars
from utils.http_request import HttpRequest
from utils.read_file_data import ReadFileData
from utils.sql_reqeust import SqlRequest
class TestSearch():
   case_datas = ReadFileData("search_items.yaml").get_case_data()  # get_case_data("tag") 自定義tag輸入
   print(case_datas)
   @pytest.mark.parametrize('case_data', case_datas, ids=generate_ids(case_datas))
   def test_search_items(self, case_data):
       response = HttpRequest.simple_request(case_data)
       print(response.json())
       Assert(response, case_data.get("assert")).assert_util
       # demo1-數(shù)據(jù)庫斷言寫法
       # from utils.mysql_manager import db # 注意一定要在測試用例中引用,要不然會連接不上數(shù)據(jù)庫
       # data = db.select_db('select * from projectInfo where project="bm-scm"')
       # print("data",data)
       # GlobalVars.update_global_vars(key="data", value=data) # 將參數(shù)手動添加到公共變量中
       # assert data["id"] == 1
       # demo2-數(shù)據(jù)庫斷言寫法
       data = SqlRequest.sql_request(case_data)
       print("data", data)
       GlobalVars.update_global_vars(key="data", value=data) # 將參數(shù)手動添加到公共變量中
       Assert(data, case_data.get("assert_sql")).sql_assert_util
if __name__ == '__main__':
   pytest.main(["test_search_items.py"])

2.4、變量設置

主要的變量有兩種,一個是全局變量,主要是接口數(shù)據(jù)庫字段等值的傳參使用。一個是配置變量,拿去配置里的信息。

2.4.1、全局變量

使用用法:使用$global{}關(guān)鍵字獲取

$global{token}

以上例子是獲取全局變量中token的變量
注意:全局變量如果命名重復會導致值被替換,請使用不同的變量名。

2.4.2 系統(tǒng)配置變量

配置變量獲取的是config里的setting值,啟動的時候,會自動獲取當前環(huán)境的配置

$config{BASE_URL}

2.5 前后置處理

目前前后置處理由用戶自己處理,較為常用的用法是,使用pytest的夾具功能

2.6 環(huán)境配置切換

使用testenv參數(shù)即可切換生產(chǎn)以及測試環(huán)境的配置。默認不填的情況下,使用的是測試環(huán)境的配置。配置讀取的是settings里的信息

2.7 文件讀取

read_file_data提供函數(shù),支持讀取json、yaml、csv、txt等文件

2.8 通知

在config settings下配置project、feishu_key信息,運行run腳本,即可發(fā)送飛書通知,注意只有運行run腳本才可以發(fā)送飛書通知

[圖片]

到此這篇關(guān)于simple-pytest 框架使用指南的文章就介紹到這了,更多相關(guān)simple-pytest 使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺析python常用數(shù)據(jù)文件處理方法

    淺析python常用數(shù)據(jù)文件處理方法

    這篇文章主要介紹了python常用數(shù)據(jù)文件處理方法,雖說python運行速度慢,但其編程速度,第三方包的豐富度是真的高,涉及到文件批處理還是會選擇python,感興趣的朋友跟隨小編一起看看吧
    2021-10-10
  • Python使用技巧之實現(xiàn)Excel轉(zhuǎn)為PDF

    Python使用技巧之實現(xiàn)Excel轉(zhuǎn)為PDF

    這篇文章主要為大家詳細介紹了使用第三方Python庫Spire.XLS?for?Python?實現(xiàn)Excel轉(zhuǎn)PDF的簡單方法,文中的示例代碼講解詳細,需要的可以參考下
    2023-11-11
  • python序列類型的實現(xiàn)示例

    python序列類型的實現(xiàn)示例

    Python序列類型分為不可變序列和可變序列,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-12-12
  • 使用matlab 判斷兩個矩陣是否相等的實例

    使用matlab 判斷兩個矩陣是否相等的實例

    這篇文章主要介紹了使用matlab 判斷兩個矩陣是否相等的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 如何在Python?中獲取單成員集合中的唯一元素

    如何在Python?中獲取單成員集合中的唯一元素

    這篇文章主要介紹了如何在Python?中獲取單成員集合中的唯一元素,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • 解決Keras的自定義lambda層去reshape張量時model保存出錯問題

    解決Keras的自定義lambda層去reshape張量時model保存出錯問題

    這篇文章主要介紹了解決Keras的自定義lambda層去reshape張量時model保存出錯問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python四大模塊文件管理介紹

    Python四大模塊文件管理介紹

    我們可以使用python來操作文件,比如讀取文件內(nèi)容、寫入新的內(nèi)容等,本文主要介紹了Python IO文件管理的具體使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Python音頻處理庫pydub的使用示例詳解

    Python音頻處理庫pydub的使用示例詳解

    pydub是一個輕量級的音頻處理庫,安裝方便,使用簡單,這篇文章主要為大家詳細介紹了pydub的具體使用,文中的示例代碼講解詳細,需要的小伙伴可以參考下
    2023-11-11
  • 使用Python獲取當前工作目錄和執(zhí)行命令的位置

    使用Python獲取當前工作目錄和執(zhí)行命令的位置

    這篇文章主要介紹了使用Python獲取當前工作目錄和執(zhí)行命令的位置,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 詳解python常用命令行選項與環(huán)境變量

    詳解python常用命令行選項與環(huán)境變量

    這篇文章主要介紹了python常用命令行選項與環(huán)境變量,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02

最新評論

辛集市| 镇原县| 江川县| 福州市| 平远县| 博乐市| 青神县| 班玛县| 泗阳县| 茌平县| 六枝特区| 弋阳县| 弥渡县| 中超| 富裕县| 新化县| 黑水县| 荣昌县| 年辖:市辖区| 璧山县| 阜南县| 莱西市| 襄城县| 临邑县| 盘锦市| 清水县| 华池县| 瓮安县| 微山县| 瓦房店市| 嵊州市| 高台县| 松潘县| 上虞市| 满城县| 丰城市| 五台县| 驻马店市| 临泉县| 房产| 桂阳县|