Python Requests 8 ddt資料驅動

2021-09-30 19:59:42 字數 4107 閱讀 1019

1.pip install ddt 安裝模組

2.使用場景

(1)ddt一般是針對同乙個介面,只是引數值不同,比如乙個介面需要十組乃至更多組資料,寫在指令碼裡顯然是不科學的,也不便於維護。

(2)ddt可與excel一起使用,從**讀取出批量的測試資料,作為引數依次傳入

3.案例

測試系統登入功能,使用ddt模組讀取測試資料,測試資料存放在excel維護,實現登入方法測試登入指令碼以及測試資料分離

common中的htmlreport.py和read_excel.py為測試報告和**讀取資料封裝

1.common.login_api.py

測試登入方法(返回登入結果中的msg資訊,用於測試斷言)

# coding:utf-8

import requests

class login():

def __init__(self):

self.s = requests.session()

self.headers =

self.login_url = ""

def login(self, useraccount, pwd):

data =

body =

r1 = self.s.post(self.login_url,headers=self.headers,data=body,verify=false)

return r1.json()["msg"] # 返回msg資訊,測試指令碼斷言

if __name__ == '__main__':

l = login()

l.login("suner", "123456")

2.case.test_login_api.py測試登入指令碼

# coding:utf-8

import os

import ddt

import unittest

from common.login_api import login

from common.read_excel import excelutil

cur_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) # 返回當前檔案的上上層目錄

excel_path = os.path.join(cur_path , "test_data/login_data.xlsx") # 測試資料login_data.xlsx檔案路徑

# 呼叫封裝好的讀取**方法,取出**中的資料

instance_excel = excelutil(excel_path , "sheet1")

da = instance_excel.dict_data()

# print(da)

@ddt.ddt

class testlogin(unittest.testcase):

def setup(self):

self.lo = login()

@ddt.data(*da)

def test_login(self, data): # 是在最終的測試報告中依次列印測試資料

"""測試資料:"""

useraccount = data["useraccount"]

pwd = data["pwd"]

exp = data["exp"]

res = self.lo.login(useraccount, pwd)

self.assertequal(exp, res)

if __name__ == '__main__':

unittest.main()

3.run_main.py 執行測試

import unittest

import os

import time

from common.htmlreport import htmltestrunner

# 當前指令碼所在檔案真實路徑

cur_path = os.path.dirname(os.path.realpath(__file__))

def add_case(casename="case", rule="test_*.py"):

"""第一步:載入所有測試用例"""

case_path = os.path.join(cur_path, casename) # 用例資料夾

# 資料夾不存在就建立乙個資料夾

if not os.path.exists(case_path): os.mkdir(case_path)

# 定義discover載入所有測試用例

# case_path:執行用例的目錄;pattern:匹配指令碼名稱的規則;top_level_dir:預設為none

discover = unittest.defaulttestloader.discover(case_path, pattern=rule, top_level_dir=none)

return discover

def run_case(all_case, reportname="report"):

"""第二步:執行所有的用例,並把結果寫入到html測試報告中"""

now = time.strftime("%y_%m_%d_%h_%m_%s")

report_path = os.path.join(cur_path, reportname)

if not os.path.exists(report_path): os.mkdir(report_path)

report_abspath = os.path.join(report_path, now + "result.html")

print("report path:%s" % report_abspath)

fp = open(report_abspath, "wb")

runner = htmltestrunner(stream=fp, title="自動化測試報告,測試結果如下:",

description="用例執**況")

# 呼叫add_case函式

runner.run(all_case)

fp.close()

def get_report_file(report_path):

"""第三步:獲取最新的測試報告"""

lists = os.listdir(report_path)

lists.sort(key=lambda fn: os.path.getmtime(os.path.join(report_path, fn)))

print("最新測試生成的報告:" + lists[-1])

# 找到生成最新的報告檔案

report_file = os.path.join(report_path, lists[-1])

return report_file

if __name__ == '__main__':

all_case = add_case() # 載入用例

run_case(all_case) # 執行用例

report_path = os.path.join(cur_path, "report")

report_file = get_report_file(report_path) # 生成報告

1.控制台執行結果

2.測試報告

Python Requests 學習筆記

一直想用 python 做點網路相關的東西,找了下,發現了 requests 庫,現記錄下學習筆記。requests 是什麼 requests 入門 requests 提高 首先,requests 是什麼。requests是乙個封裝了 http 操作和請求的庫,可以很方便的抓取網頁的內容,囧,這個是...

python requests傳送json格式資料

requests是常用的請求庫,不管是寫爬蟲指令碼,還是測試介面返回資料等。都是很簡單常用的工具。但是,我們寫程式的時候,最常用的介面post資料的格式是json格式。當我們需要post json格式資料的時候,怎麼辦呢,只需要新增修改兩處小地方即可。詳見如下 import requests imp...

Python Requests 學習 筆記

在做web題目的時候看到一道這樣的題,要讓我迅速提交,看到別人的writeup 發現要寫python指令碼,於是就來學一下python requests 題目連線 來自網路安全實驗室 該文件的內容來自 pyhon requests 快速入門 r requests.get 網域名稱 其他玩法 r re...