1. 程式人生 > >python 介面測試框架測試報告 (二)

python 介面測試框架測試報告 (二)

這個版本的優化

  • 測試報告基於excel
  • 測試通過後用email的方式通知

核心程式碼

import unittest
import time
from controller import config
from model.common import Goals as go
from controller import con_api_xml
from controller import check
import BaseExcelReport as be
import xlsxwriter
import sendMail as sd
from controller.getEmail import read_email
gm = con_api_xml.ret_xml() # 讀取xml
hb = con_api_xml.ret_http_base(gm) #讀取http引數
data = {"info":[]}
# 測試用例(組)類
class TestInterfaceCase(unittest.TestCase):
    def __init__(self, testName, hope, index):
        super(TestInterfaceCase, self).__init__(testName)
        self.hope = hope
        self.index = index
    def setUp(self):
        self.config_http = config.ConfigHttp(hb.host, hb.port)
    def function(self):
        response = ""
        if self.index == 1:
             if gm[self.index]["method"] == "POST":
                response = self.config_http.post(go.URL, go.PARAMS)
                go.REALLY_RESULT = eval(response)
                hope = eval(self.hope)
                # temp = testJson.compareJson(hope, go.REALLY_RESULT, gm[self.index]["isList"])
                temp = check.compare(hope, go.REALLY_RESULT)
                if temp:
                    go.LOGIN_KY = gm[1]["login"]
                    go.LOGIN_VALUE = go.REALLY_RESULT["content"][0][go.LOGIN_KY]
                    go.RESULT = 'Pass'
                    go.SUCCESS_SUM += 1
                else:
                    go.RESULT = 'Fail'
                    go.ERROR_NUM += 1
        else:
            if gm[self.index]["login"] != "0":
                    go.PARAMS[go.LOGIN_KEY] = go.LOGIN_VALUE
            if gm[self.index]["method"] == "POST":
                response = self.config_http.post(go.URL, go.PARAMS)
            if gm[self.index]["method"] == "GET":
                response = self.config_http.get(go.URL, go.PARAMS)
            go.REALLY_RESULT = eval(str(response))
            hope = eval(self.hope)
            # temp = testJson.compareJson(hope, go.REALLY_RESULT, gm[self.index]["isList"])
            temp = check.compare(hope, go.REALLY_RESULT,  gm[self.index]["isList"])
            if temp:
                go.RESULT = 'Pass'
                go.SUCCESS_SUM += 1
            # except AssertionError:
            else:
                go.RESULT = 'Fail'
                go.ERROR_NUM += 1
        go.CASE_TOTAL += 1

# 獲取測試套件
def get_test_suite(index):
    test_suite = unittest.TestSuite()
    hope = gm[index]["hope"] # 預期值
    test_suite.addTest(TestInterfaceCase("function", hope,index))
    return test_suite

# 執行測試用例函式
def run_case(runner):
    case_list = hb.No
    case_list = eval(case_list)  # 把字串型別的list轉換為list
    temp_case = ""
    if len(case_list) == False: #判斷是否執行指定的用例ID
        temp_case = gm
        for index in range(1, len(temp_case)):
            info = {}
            go.URL = gm[index]['url']
            go.PARAMS = gm[index]["params"]
            test_suite = get_test_suite(index)
            runner.run(test_suite)
            # 記錄執行結果
            info["t_id"] = gm[index]["id"]
            info["t_name"] = gm[index]["name"]
            info["t_url"] = gm[0]["host"] + gm[index]["url"]
            info["t_param"] = gm[index]["params"]
            info["t_actual"] = go.REALLY_RESULT
            info["t_hope"] = gm[index]["hope"]
            info["t_result"] = go.RESULT
            info["t_method"] = gm[index]["method"]
            data["info"].append(info)
    else:
        for i in case_list:
            for j in range(1, len(gm)):
                if str(i) == gm[j]['id']:
                    info = {}
                    go.URL = gm[j]['url']
                    go.PARAMS = gm[j]["params"]
                    test_suite = get_test_suite(j)
                    runner.run(test_suite)
                    info["t_id"] = gm[j]["id"]
                    info["t_name"] = gm[j]["name"]
                    info["t_url"] = gm[0]["host"] + gm[j]["url"]
                    info["t_param"] = gm[j]["params"]
                    info["t_actual"] = go.REALLY_RESULT
                    info["t_hope"] = gm[j]["hope"]
                    info["t_result"] = go.RESULT
                    info["t_method"] = gm[j]["method"]
                    data["info"].append(info)
# 執行測試套件
if __name__ == '__main__':
    start_time = time.time()
    runner = unittest.TextTestRunner()
    run_case(runner)
    end_time = time.time()
    sum_time = "%.2f" % (end_time - start_time)
    data["test_date"] = str(sum_time) + "毫秒"
    data["test_sum"] = go.CASE_TOTAL
    data["test_failed"] = go.ERROR_NUM
    data["test_version"] = "v2.0.8"
    data["test_pl"] = "python 3"
    data["test_net"] = "本地連線"
    data["test_name"] = gm[0]["title"]
    data["test_success"] = go.SUCCESS_SUM

    workbook = xlsxwriter.Workbook('report.xlsx')
    worksheet = workbook.add_worksheet("測試總況")
    worksheet2 = workbook.add_worksheet("測試詳情")
    # 測試報告
    bc = be.xlsxwriterBase(wd=workbook, data=data)
    bc.init(worksheet)
    bc.test_detail(worksheet2)
    bc.close()

    # 傳送email
    get_email = read_email("D:\\app\\auto_http34_test\\email.ini")
    sd.send_mail(f="report.xlsx", to_addr=get_email[0], mail_host=get_email[1], mail_user=get_email[2], mail_pass=get_email[3], port=int(get_email[4]))

郵箱配置

[DEFAULT]
to_addr = ["[email protected]", "[email protected]"] 傳送給誰
mail_host = smtp.qq.com
mail_user = [email protected]
mail_pass = XXXX
port = 465

成果展示


郵件接收附件

下個版本優化

相關推薦

python 介面測試框架測試報告 ()

這個版本的優化 測試報告基於excel測試通過後用email的方式通知核心程式碼 import unittest import time from controller import config from model.common import Goals as go f

python - 自動化測試框架 - 測試報告

testSuitr.py:   # -*- coding:utf-8 -*-'''@project: Voctest@author: Jimmy@file: testSuite.py@ide: PyCharm Community Edition@time: 2018-11-14 15:40@bl

SVN+Jmeter+Jenkins構建介面自動化測試框架方案(

上一個沒寫完,本次繼續:解決問題的方法有3種;①暫時的:使用有許可權的使用者登入Jenkins,在“系統管理→指令碼命令列”中執行如下內容:(Jenkins重啟後需要重新執行該條命令)------System.setProperty("hudson.model.Directo

單元測試框架之unittest()

一、摘要 本章筆者將詳細介紹組織測試程式碼的相關內容,所用的測試例子會是氣泡排序,筆者在從業這麼久之後回想很多面試都要問氣泡排序,雖然不知道為什麼要問這個,但還是希望大家掌握,它與自動化測試關係不大屬於python的基礎範疇 在上一篇內容中我們展示了一個小例子,在程式碼的前兩行是如下內容 impo

怎樣從0開始搭建一個測試框架_4——報告

怎樣從0開始搭建一個測試框架_4 這一步我們需要用到並修改HTMLTestRunner.py,它本身是基於PY2的,簡單而實用,之前博主對其進行了美化,並且改成了中文(下載連結)。 現在博主基於此進行了對PY3的修改,增加了對subTest的支援。

Android自動化測試框架Espresso()——測試Toast彈出內容

Android中的Toast是我們經常會使用的,能夠方便的在介面上彈出一個提示語句,還可以控制顯示的時長,十分方便。使用Espresso測試Toast的彈出內容不是很好操作,主要由於Toast的佈局並不是屬於我們當前應用的,而是通過另一個Sevice控制的,這個原理可以看看

基於python介面自動化框架搭建_pytest+jenkins+allure

本介面測試框架使用python語言實現,基於pytest測試框架,同時整合Jenkins和Allure 核心特性 封裝requests請求,使用裝飾器模式 詳細的請求日誌輸出 環境與資料隔離,實現不同環境不同資料 測試用例支援引數化和資料驅動機制 使用allur

從零開始搭建Detox自動化測試框架測試React Native (IOS/Andriod)也許是全網最全的教程 持續更新中

構建APP並執行用例 構建APP 編譯 debug模式 detox build --configuration ios.sim.debug release模式 detox build --configuration ios.sim.release 5.2 執

Python介面自動化框架的簡單思路

故事背景 2年前,和一個同學(愛奇藝大神)聊起寫一個自動化框架。正好,前陣子公司在做python的培訓,順便寫了一個python的介面自動化指令碼。 自動化框架理解 框架,是一個基本概念上的結構,用於去解決或者處理複雜的問題。那測試框架到底是個啥呢?測

python介面自動化(三十)--Python傳送郵件(常見四種郵件內容)番外篇——上(詳解)

簡介   本篇文章與前邊沒有多大關聯,就是對前邊有關發郵件的總結和梳理。在寫指令碼時,放到後臺執行,想知道執行情況,會通過郵件、SMS(簡訊)、飛信、微信等方式通知管理員,用的最多的是郵件。在linux下,Shell指令碼傳送郵件告警是件很簡單的事,有現成的郵 件服務軟體或者呼叫運營商郵箱伺服器。   對於P

python介面自動化(四十)- 專案結構設計之大結局(超詳解)

簡介   這一篇主要是將前邊的所有知識做一個整合,把各種各樣的磚塊---模組(post請求,get請求,logging,引數關聯,介面封裝等等)壘起來,搭建一個房子。並且有很多小夥伴對於介面專案測試的框架一籌莫展,吵吵著什麼時候才可以看到一篇相對於比較完整的專案原始碼,但是由於完整的專案屬於公司內部的程式碼

python介面自動化(十九)--html測試報告通過郵件發出去——上(詳解)

簡介   前邊幾篇,已經教小夥伴們掌握瞭如何生成HTML的測試報告,那麼生成測試報告,我們也不能放在那裡不管了,這樣即使你報告在漂亮,領導也看不到。因此如果想向領導彙報工作,不僅需要提供更直觀的測試報告。而是我們需要將生 成測試報告發個相關的負責人,需要他們看一下測試結果,把控一下專案的介面有風險,會不會

python介面自動化(十七)--html 測試報告——上(詳解)

簡介   上一篇我們批量執行完用例後,生成的測試報告是文字形式的,不夠直觀,而且報告一般都是發給leader的,所以最好是直觀一目瞭然,為了更好的展示測試報告,最好是生成 HTML 格式的。unittest 裡面是不能生成 html 格式報告的,需 要匯入一個第三方的模組:HTMLTestRunner。

python接口自動化測試十五:執行所有用例,並生成HTML測試報告

odin 所有 郵件發送 QQ 二進制 multipart 分享圖片 html sse import requestsimport unittestclass TestQQ(unittest.TestCase): ‘‘‘測試QQ號接口‘‘‘

HTTP介面自動化經驗總結()Okhttp3 介面測試框架搭建

搭建這套環境前,需要Eclipse安裝testNG,Maven 1.Eclipse安裝testNG https://mp.csdn.net/postedit/81868683 2.Eclipse安裝Maven http://www.cnblogs.com/pengyan-9826/p

python--utp介面自動化測試框架

測試套件:testsuite  多個用例放在一起 unittest  1、函式名必須是test開頭,unittest才會幫你執行               2、用例執行的順序是按照函式的首字母排序的,a-z te

python介面自動化測試框架(post提交新增變數)

1、python介面測試框架包含哪幾部分 資料來源-> GET/POST 傳送請求->接收返回結果->斷言測試結果->生成測試報告(html報告)->網頁報告   2、python介面測試框架 config:存放配置檔案,比如資料庫設定、郵件配置、log配置

Python+Requests+Unittest+Excel 介面自動化測試框架之Request模組01

1.Requests模組  a.Request模組是Python中可以實現模擬Http協議的模組  b.安裝方式很多,可以用pip install requests 2.舉例 import requests class Http_Request:     #定義一個請求函

【作者: 艾裡艾蘭 】Python+requests+unittest+excel實現介面自動化測試框架

python自動化語言基礎 介面測試知識基礎 一、框架結構:  工程目錄 二、Case檔案設計 三、基礎包 base 3.1 封裝get/post請求(runmethon.py)

介面測試 我的 python 介面測試框架

簡單介紹 Win7 64,python 3,Pycharm. unittest讀取配置檔案--讀取測試用例--執行測試用例--記錄測試結果--生成html結果檔案支援指定介面用例id的測試考慮到登陸後返回的token,useId給其他介面聯合使用的情況使用html線上生成器