国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Golang 接口自動化02】使用標(biāo)準(zhǔn)庫net/http發(fā)送Post請求

這篇具有很好參考價值的文章主要介紹了【Golang 接口自動化02】使用標(biāo)準(zhǔn)庫net/http發(fā)送Post請求。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

目錄

寫在前面

發(fā)送Post請求

示例代碼

源碼分析

Post請求參數(shù)解析

響應(yīng)數(shù)據(jù)解析

驗證

發(fā)送Json/XMl

Json請求示例代碼

xml請求示例代碼

總結(jié)

資料獲取方法


寫在前面

上一篇我們介紹了使用?net/http?發(fā)送get請求,因為考慮到篇幅問題,把Post單獨(dú)拎了出來,我們在這一篇一起從源碼來了解一下Golang的Post請求。

發(fā)送Post請求

net/http發(fā)送Post請求很容易,下面的代碼我們和Get請求一樣,把響應(yīng)的內(nèi)容的信息打印出來了,細(xì)心的朋友可能會發(fā)現(xiàn),在參數(shù)傳遞、和結(jié)果解析時用了三種不同的方式,我們將在后面進(jìn)行解析。

示例代碼
package main

import (
	"bytes"
	"fmt"
	"io/ioutil"
	"net/http"
	"reflect"
	"strings"
)

func main() {
	resp, err := http.Post("http://httpbin.org/post",
		"application/x-www-form-urlencoded",
		strings.NewReader("name=Detector&mobile=1xxxxxxxx"))
	if err != nil {
		fmt.Println(err)
		return
	}

	defer resp.Body.Close()
	headers := resp.Header
	// headers 打印報文頭部信息
	for k, v := range headers {
		fmt.Printf("%v, %v\n", k, v) // %v 打印interfac{}的值
	}

	// 打印響應(yīng)信息內(nèi)容
	fmt.Printf("響應(yīng)狀態(tài):%s,響應(yīng)碼: %d\n", resp.Status, resp.StatusCode)
	fmt.Printf("協(xié)議:%s\n", resp.Proto)
	fmt.Printf("響應(yīng)內(nèi)容長度: %d\n", resp.ContentLength)
	fmt.Printf("編碼格式:%v\n", resp.TransferEncoding) // 未指定時為空
	fmt.Printf("是否壓縮:%t\n", resp.Uncompressed)
	fmt.Println(reflect.TypeOf(resp.Body)) // *http.gzipReader
	fmt.Println(resp.Body)

	buf := bytes.NewBuffer(make([]byte, 0, 512))
	length, _ := buf.ReadFrom(resp.Body)
	fmt.Println(len(buf.Bytes()))
	fmt.Println(length)
	fmt.Println(string(buf.Bytes()))
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(string(body))
}

源碼分析

Post請求參數(shù)解析

我們首先來看一下C:\Go\src\net\http\client.go中Post和Get請求的源碼:

func Get(url string) (resp *Response, err error) {
	return DefaultClient.Get(url)
}
func Post(url string, contentType string, body io.Reader) (resp *Response, err error) {
	return DefaultClient.Post(url, contentType, body)
}

從上面的定義可以看出,Post請求的參數(shù)比Get復(fù)雜一些,不僅要傳遞string類型contentType還有傳遞io.Reader類型的body體。可能有的小伙伴就有疑問了--?io.Reader類型的body體是不是意味著我們一定要使用io.Reader模塊來獲取數(shù)據(jù)呢?

答案當(dāng)然是否定的。

我們通過閱讀源碼,來找想要的答案。

找到其最小粒度的接口是一個比較好的手段,io.Reader最小粒度的接口的定義在C:\Go\src\io\io.go中:

type Reader interface {
	Read(p []byte) (n int, err error)
}

在我前面的一篇博客【Golang】基礎(chǔ)10 Go語言最精妙的設(shè)計--interface中學(xué)習(xí)過 interface,其中有兩句話是這樣的:

interface類型定義了一組方法,如果某個對象實現(xiàn)了某個接口的所有方法,則此對象就實現(xiàn)了此接口。如果我們定義了一個interface的變量,那么這個變量里面可以存實現(xiàn)這個interface的任意類型的對象。

針對io.Reader的定義翻譯一下就是,只要實現(xiàn)了Read(p []byte) (n int, err error)方法的類型,就可以存儲io.Reader,從而作為Post請求的Body參數(shù)。

我們接著來看看響應(yīng)resp中數(shù)據(jù)的定義。

響應(yīng)數(shù)據(jù)解析

在上一篇我們對http請求中的數(shù)據(jù)進(jìn)行了介紹,這一次我們針對resp.Body進(jìn)行展開。

C:\Go\src\net\http\response.go中我們可以看到它的類型Body io.ReadCloser,在C:\Go\src\io\io.go中我們可以看到對應(yīng)的定義是這樣的:

type ReadCloser interface {
	Reader
	Closer
}

而Reader就是我們上面分析的過的請求body定義的Reader,而Closer是一個error類型:

type Closer interface {
	Close() error
}

根據(jù)我們上面的結(jié)論--?定義的某個接口的變量可以存儲同樣實現(xiàn)該接口的任意類型對象,即是說任意類型,只要實現(xiàn)了?Reader和?Closer?即可以用來解析resp.Body

那我們來驗證一下示例里面使用的三種方法是不是符合我們這個結(jié)論。

驗證
  • strings.NewReader
    我們可以在C:\Go\src\strings\reader.go看到?Reader類型的?Read方法:

    【Golang 接口自動化02】使用標(biāo)準(zhǔn)庫net/http發(fā)送Post請求,接口自動化,軟件測試,自動化測試,程序人生,軟件測試,python,職場和發(fā)展,自動化,自動化測試,軟件測試工程師

  • bytes.NewBuffer
    我們可以在C:\Go\src\bytes\buffer.go看到?Buffer類型的?Read方法:

    【Golang 接口自動化02】使用標(biāo)準(zhǔn)庫net/http發(fā)送Post請求,接口自動化,軟件測試,自動化測試,程序人生,軟件測試,python,職場和發(fā)展,自動化,自動化測試,軟件測試工程師

  • ioutil.ReadAll
    我們可以在C:\Go\src\io\ioutil\ioutil.go看到?io.Reader類型的?ReadAllClose() error方法:

【Golang 接口自動化02】使用標(biāo)準(zhǔn)庫net/http發(fā)送Post請求,接口自動化,軟件測試,自動化測試,程序人生,軟件測試,python,職場和發(fā)展,自動化,自動化測試,軟件測試工程師

發(fā)送Json/XMl

在了解了上面的知識之后,我們再來看發(fā)送Json、XML數(shù)據(jù)等就比較簡單了。

Json請求示例代碼
func JsonReq() {
	info := make(map[string]interface{})
	info["name"] = "Detector"
	info["age"] = 15
	info["loc"] = "深圳"
	// 將map解析未[]byte類型
	bytesData, _ := json.Marshal(info)
	// 將解析之后的數(shù)據(jù)轉(zhuǎn)為*Reader類型
	reader := bytes.NewReader(bytesData)
	println(reader)
	resp, _ := http.Post("http://httpbin.org/post",
		"application/json",
		reader)
	body, _ := ioutil.ReadAll(resp.Body)
	fmt.Println(string(body))
}

代碼里面給了一些注釋,我們把要發(fā)送的數(shù)據(jù)轉(zhuǎn)化為了?*Reader類型,然后就可以直接發(fā)送了。(我們從上面的源碼分析可以知道這個類型是可以存儲io.Reader的數(shù)據(jù)的)

xml請求示例代碼
func XMLReq() {
	xml := `<?xml version="1.0" encoding="UTF-8"?>
	<resources>
		<string name="VideoLoading">Loading video…</string>
		<string name="ApplicationName">what</string>
	</resources>`
	bytesData := strings.NewReader(xml)
	resp, _ := http.Post("http://httpbin.org/post",
		"application/xml",
		bytesData)
	body, _ := ioutil.ReadAll(resp.Body)
	fmt.Println(string(body))
}

總結(jié)

  • Json、xml請求
  • 請求、響應(yīng)數(shù)據(jù)簡析
  • interface概念復(fù)習(xí)

資料獲取方法

【留言777】

【Golang 接口自動化02】使用標(biāo)準(zhǔn)庫net/http發(fā)送Post請求,接口自動化,軟件測試,自動化測試,程序人生,軟件測試,python,職場和發(fā)展,自動化,自動化測試,軟件測試工程師

【Golang 接口自動化02】使用標(biāo)準(zhǔn)庫net/http發(fā)送Post請求,接口自動化,軟件測試,自動化測試,程序人生,軟件測試,python,職場和發(fā)展,自動化,自動化測試,軟件測試工程師

各位想獲取源碼等教程資料的朋友請點(diǎn)贊 + 評論 + 收藏,三連!

三連之后我會在評論區(qū)挨個私信發(fā)給你們~文章來源地址http://www.zghlxwxcb.cn/news/detail-620710.html

到了這里,關(guān)于【Golang 接口自動化02】使用標(biāo)準(zhǔn)庫net/http發(fā)送Post請求的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 高效自動化測試框架-優(yōu)秀實踐02-接口

    編寫接口的操作的時候只需要編寫接口的url,請求方法,請求體的樣例 其他的將接口封裝成服務(wù)或者的操作,全部使用裝飾器來封裝,能做到高效的解耦 在表示層編寫業(yè)務(wù)測試用例的時候,可以使用函數(shù)式的編程方式,非常易讀,還非常易于copy,提升編寫效率 業(yè)務(wù)測試用例編寫

    2023年04月08日
    瀏覽(25)
  • 使用Postman進(jìn)行接口自動化測試

    使用Postman進(jìn)行接口自動化測試

    ?我們先思考一下,如果需要達(dá)到自動化接口測試的效果,那么我們在基本的模擬請求上還需要做哪些呢? 以下我粗略概括為 3 個問題(歡迎更多補(bǔ)充與建議): 如何判斷接口是否請求成功 如何進(jìn)行接口批量、定期測試 如何處理依賴接口問題(比如商品下單的接口必須要求

    2024年01月18日
    瀏覽(60)
  • 使用ApiPost進(jìn)行接口自動化測試

    使用ApiPost進(jìn)行接口自動化測試

    自動化測試模塊是針對測試人員的復(fù)雜業(yè)務(wù)的測試服務(wù)??梢栽跍y試用例中建立一個或多個“測試計劃”,“測試計劃”由接口和控制器組成。 1、創(chuàng)建步驟 1、在API設(shè)計或API調(diào)試內(nèi)保存接口。 2、打開自動化測試-測試用例,新建一個測試計劃。 3、在右側(cè)的API添加器內(nèi)添加接

    2024年02月05日
    瀏覽(22)
  • 使用phpunit進(jìn)行接口自動化測試

    使用phpunit進(jìn)行接口自動化測試

    年初一個偶然的機(jī)會接觸到了phpunit,一個用PHP編程語言開發(fā)的開源軟件,也是一個單元測試框架,有效利用的話可以大大提高接口遍歷的效率。廢話不多說,直接干貨。 1.安裝 在php的目錄下 1 2 pear channel-discover pear; pear install phpunit/PHPUnit 2.配置 首先新建一個lib文件夾存放的配

    2024年01月20日
    瀏覽(27)
  • 測試中使用Postman實現(xiàn)接口自動化

    測試中使用Postman實現(xiàn)接口自動化

    1.創(chuàng)建一個工作區(qū) 2.按照自己的需求去命名創(chuàng)建 1按照步驟去創(chuàng)建環(huán)境及表格的【變量】:VARIABLE 和【當(dāng)前值】:CURRENT VALUE TEST_3 就是剛剛創(chuàng)建的環(huán)境 host就不用多說了都明白 Globals 這個就是來改變我們在請求接口時候賦值 全局變量 通用的 用法就不細(xì)說了往下看!??! 在第一

    2024年02月11日
    瀏覽(23)
  • 接口自動化測試工具,Postman使用詳解

    接口自動化測試工具,Postman使用詳解

    1、Postman是一款功能強(qiáng)大的網(wǎng)頁調(diào)試與發(fā)送網(wǎng)頁HTTP請求的Chrome插件,Postman分為Postman native app和Postman Chrome app兩個版本。目前Chrome app已經(jīng)停止維護(hù),官方也不推薦使用該版本。 2、官網(wǎng)下載地址:http://www.getpostman.com 3:官方文檔:http://www.getpostman.com/docs 2、第二步:新建接口請

    2024年02月06日
    瀏覽(95)
  • Jmeter接口自動化測試 —— Jmeter變量的使用

    ?在使用jmeter進(jìn)行接口測試時,我們難免會遇到需要從上下文中獲取測試數(shù)據(jù)的情況,這個時候就需要引入變量了。 添加-配置元件-用戶自定義的變量 添加-配置元件-CSV 數(shù)據(jù)文件設(shè)置 變量的調(diào)用方式:${變量名} 變量的作用范圍:變量可以寫入任何測試組件的任何字段中(除

    2024年02月05日
    瀏覽(25)
  • python+pytest接口自動化(12)-自動化用例編寫思路 (使用pytest編寫一個測試腳本)

    python+pytest接口自動化(12)-自動化用例編寫思路 (使用pytest編寫一個測試腳本)

    經(jīng)過之前的學(xué)習(xí)鋪墊,我們嘗試著利用pytest框架編寫一條接口自動化測試用例,來厘清接口自動化用例編寫的思路。 我們在百度搜索 天氣查詢 ,會出現(xiàn)如下圖所示結(jié)果: 接下來,我們以該天氣查詢接口為例,編寫接口測試用例腳本。 針對某個功能做接口測試,首先我們需

    2024年02月04日
    瀏覽(30)
  • python接口自動化測試 requests庫的基礎(chǔ)使用

    python接口自動化測試 requests庫的基礎(chǔ)使用

    目錄 簡單介紹 Get請求 Post請求 其他類型請求 自定義headers和cookies SSL 證書驗證 響應(yīng)內(nèi)容 獲取header 獲取cookies requests庫簡單易用的HTTP庫 ? 格式: ?requests.get(url)? 注意: 若需要傳請求參數(shù),可直接在?url?最后的???后面,也可以調(diào)用?get()?時多加一個參數(shù)?params?,傳入請求

    2023年04月26日
    瀏覽(22)
  • Python接口自動化測試:Postman使用-用例執(zhí)行

    Python接口自動化測試:Postman使用-用例執(zhí)行

    一個完整的測試,是必須要有斷言的,沒有斷言就相當(dāng)于沒有預(yù)期結(jié)果是不完整的,Postman給我們提供了方便的斷言方式 可以通過JS腳本來編寫Pre-request Script和Tests Script Pre-request?Script :預(yù)置腳本,可以用來修改一些默認(rèn)參數(shù),在請求發(fā)送之前,有點(diǎn)類型unittest里面的setUp()方法

    2024年02月11日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包