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...