Python實(shí)現(xiàn)API測(cè)試自動(dòng)化

Request使用方法快速介紹

Request是第三方庫,需要手動(dòng)安裝:

pip install requests

需要導(dǎo)入requests模塊

import requests

Requests中文文檔:http://docs.python-requests.org/zh_CN/latest/
這個(gè)文檔看的話從哪看起呢匿情,大家要有技巧兰迫,下面有目錄(用戶指南)這個(gè)地方,安裝完成的話炬称,這里有個(gè)快速上手汁果。

image.png

大家如果以后看文檔,有什么快速上手玲躯,通尘莸拢可以先看它鳄乏,像這種章節(jié)都是讓你快速的了解下這個(gè)庫的一些功能。常用的方法都卸載快速上手里面棘利,怎么發(fā)送請(qǐng)求橱野、傳遞URL參數(shù)、響應(yīng)內(nèi)容善玫、定制請(qǐng)求頭等等水援,下面介紹下怎么使用requests庫構(gòu)建請(qǐng)求,接收響應(yīng)

構(gòu)建各種http請(qǐng)求

  • http.get請(qǐng)求
requests.get('https://api.github.com/events')

比如列出課程的請(qǐng)求代碼

import requests

host = 'localhost'
requests.get(f'http://{host}/api/mgr/sq_mgr/?action=list_course&pagenum=1&pagesize=20 ')

我們打開抓包工具Fiddler茅郎,然后運(yùn)行代碼蜗元,包就被Fiddler抓到了

image.png

我們用python代碼一樣可以發(fā)請(qǐng)求。


  • http.post請(qǐng)求
requests.post('http://httpbin.org/post', data = {'key':'value'})
  • http.put請(qǐng)求
requests.put('http://httpbin.org/put', data = {'key':'value'})
  • http.delete請(qǐng)求
requests.delete('http://httpbin.org/delete')

構(gòu)建URL參數(shù)

有一點(diǎn)我們要注意的是URL參數(shù)系冗,我們可以直接這樣奕扣。

image.png

直接寫在里面沒有關(guān)系。如果你覺得這種寫法不是很清晰的話掌敬,你可以參照這種寫法:

語法

payload = {'key1': 'value1', 'key2': 'value2'}
requests.get("http://httpbin.org/get", params=payload)

params參數(shù)接收的是一個(gè)字典惯豆,把URL參數(shù)去掉,把他定義在一個(gè)字典一樣的數(shù)據(jù)結(jié)構(gòu)里面奔害。

比如說

import requests

host = 'localhost'

p1 = {
    'action':'list_course',
    'pagenum':'1',
    'pagesize':'20'
}

requests.get(f'http://{host}/api/mgr/sq_mgr/',params=p1)

這樣就可以了楷兽。


構(gòu)建請(qǐng)求頭

如果你想為請(qǐng)求添加 HTTP 頭部,只要簡單地傳遞一個(gè) dict (字典)給 headers 參數(shù)就可以了舀武。

例如拄养,在前一個(gè)示例中我們沒有指定 content-type:

>>> url = 'https://api.github.com/some/endpoint'
>>> headers = {'user-agent': 'my-app/0.0.1'}

>>> r = requests.get(url, headers=headers)

假如說我們上面的請(qǐng)求還要有請(qǐng)求頭的話,就是在底下再添加一個(gè)headers參數(shù)

image.png

然后里面填上你所要帶進(jìn)去的請(qǐng)求頭所對(duì)應(yīng)的字典银舱,比如例子里面就多了個(gè)user-agent值是my-app/0.0.1瘪匿。

假如我想消息體頭里面帶上這兩個(gè)參數(shù)'username':quanlei'password':111111這兩個(gè)參數(shù),要怎么帶上去寻馏?就根據(jù)例子寫吧棋弥,就像這樣子

import requests

host = 'localhost'

p1 = {
    'action':'list_course',
    'pagenum':'1',
    'pagesize':'20'
}

h1 = {
    'username':'quanlei',
    'password':'111111'
}

requests.get(f'http://{host}/api/mgr/sq_mgr/',params=p1,headers=h1)

我們發(fā)送看一下請(qǐng)求消息是否帶上這個(gè)消息頭了。

image.png

是不是就可以了诚欠,是不是很方便顽染。


定制請(qǐng)求體

請(qǐng)求體類型:Content-Type: application/x-www-form-urlencoded

只需簡單地傳遞一個(gè)字典給 data 參數(shù)

>>> payload = {'key1': 'value1', 'key2': 'value2'}

>>> r = requests.post("http://httpbin.org/post", data=payload)
>>> print(r.text)
{
  ...
  "form": {
    "key2": "value2",
    "key1": "value1"
  },
  ...
}

我們以添加課程為例,因?yàn)樗彩?code>Content-Type: application/x-www-form-urlencoded(表單格式)

我們先看去以前的文章看下添加課程的接口文檔:http://www.reibang.com/p/b7125f62dd52

大家注意一下data這個(gè)參數(shù)值

data 必填 存儲(chǔ)創(chuàng)建課程的信息轰绵,包括名稱粉寞、描述、顯示次序左腔。
為json格式唧垦。例如:{"name":"初中化學(xué)", "desc":"初中化學(xué)課程","display_idx":"4"
}

大家會(huì)說{"name":"初中化學(xué)", "desc":"初中化學(xué)課程","display_idx":"4" }這不是json嗎?json其實(shí)就是一個(gè)json格式的字符串液样。大家注意這里只是符合json格式的字符串振亮。直接把內(nèi)容傳進(jìn)去就行巧还。

代碼:

import requests

host = 'localhost'

h1 = {
    'username':'quanlei',
    'password':'111111'
}

payload = {
    'action':'add_course',
    'data':'''
    {
      "name":"萬圣節(jié)",
      "desc":"初中化學(xué)課程",
      "display_idx":"4"
            }'''
}

requests.post(f'http://{host}/api/mgr/sq_mgr/',headers=h1,data=payload)

抓包看一下,請(qǐng)求成功了

image.png

這里我們可以看到抓包的內(nèi)容POST請(qǐng)求坊秸,url是http://localhost/api/mgr/sq_mgr/這個(gè)麸祷,這里我們并沒有指定消息頭是www-form-urlencoded,但是只要你有data參數(shù)傳入了一個(gè)字典褒搔,他就認(rèn)為你消息體是www-form-urlencoded格式阶牍。大家看下消息體

image.png

這就是www-form-urlencoded格式中間用&隔開,這里面的內(nèi)容因?yàn)橐呀?jīng)做了編碼站超,如果想看里面的內(nèi)容荸恕,點(diǎn)一下WebForms

image.png

因?yàn)槟闶莊orm格式,他就會(huì)變成這種容易看的格式死相。


如果有請(qǐng)求的消息不是www-form-urlencoded,比如是Json格式呢咬像,比如我們這里有個(gè)Json格式添加課程的接口如下

請(qǐng)求語法

POST /apijson/mgr/sq_mgr/ HTTP/1.1
Content-Type: application/json

url請(qǐng)求參數(shù)
無url請(qǐng)求參數(shù)

請(qǐng)求體內(nèi)容

{
  "action" : "add_course_json",
  "data"     : {
    "name":"初中化學(xué)",
    "desc":"初中化學(xué)課程",
    "display_idx":"4"
  }
}

響應(yīng)語法

HTTP/1.1 200 OK
Content-Type: application/json

頭部信息
Content-Type 必填 正常情況下該值將被設(shè)為application/json算撮,表示返回 JSON 格式的文本信息。

響應(yīng)內(nèi)容
如果請(qǐng)求成功县昂,返回json格式的消息體肮柜,如下所示,retcode值為0表示添加成功

{
    "retcode": 0
}

說明
增加課程的名稱如果已經(jīng)存在倒彰,則會(huì)創(chuàng)建失敗返回結(jié)果為

{
    "retcode": 2,
    "reason": "同名課程已經(jīng)存在"
}

請(qǐng)求體類型:Content-Type: application/json

可以將字典直接傳遞給json參數(shù)

payload2={
      "action" : "add_course_json",
      "data" : {
        "name":"初中化學(xué)",
        "desc":"初中化學(xué)課程",
        "display_idx":"4"
      }
    }

resp=requests.post("http://localhost/apijson/mgr/sq_mgr/", json=payload2)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末审洞,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子待讳,更是在濱河造成了極大的恐慌芒澜,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件创淡,死亡現(xiàn)場離奇詭異痴晦,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)琳彩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門誊酌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人露乏,你說我怎么就攤上這事碧浊。” “怎么了瘟仿?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵箱锐,是天一觀的道長。 經(jīng)常有香客問我猾骡,道長瑞躺,這世上最難降的妖魔是什么敷搪? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮幢哨,結(jié)果婚禮上赡勘,老公的妹妹穿的比我還像新娘。我一直安慰自己捞镰,他們只是感情好闸与,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著岸售,像睡著了一般践樱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凸丸,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天拷邢,我揣著相機(jī)與錄音,去河邊找鬼屎慢。 笑死瞭稼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的腻惠。 我是一名探鬼主播环肘,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瘫镇,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤畜挨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年莱没,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酷鸦。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡饰躲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出臼隔,到底是詐尸還是另有隱情嘹裂,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布摔握,位于F島的核電站寄狼,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜泊愧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一伊磺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧删咱,春花似錦屑埋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至敲街,卻和暖如春团搞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背多艇。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國打工逻恐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人墩蔓。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓梢莽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親奸披。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容