笔记整理-python开发接口测试requests

python开发接口测试

作用python语言实现web api接口测试, 常用下面的库

内置库: httplib, urllib2

第三方库: requests

 

python requests库

特点: 1. 简便易用, 功能强大,姐姐我喜欢用这个。

 

请求参数:

requests.get(url, params=xx, headers=xx)

params =这个参数放在url里

定制请求头: 

headers=这个参数放在消息头里, headers接收的是一个字典

 

传递URL参数:

为URL的查询字符串(query string)传递某种数据。数据以键值对的形式置于URL中, 跟在一个问题后面。 用params关键字参数, 以一个字典来提供这些参数。 

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

r = requests.get("http://httpbin.org/get", params=payload)

则URL是 http://httpbin.org/get?key2=value2&key1=value1

注意字典里值为 None 的键都不会被添加到 URL 的查询字符串里。

 

还可以将列表做为值传入。

payload = {'key1': 'value1', 'key2': ['value2', 'value3']}

r = requests.get('http://httpbin.org/get', params=payload)

则url是http://httpbin.org/get?key1=value1&key2=value2&key2=value3

 

消息体中发送一些编码为表单形式的数据

传递一个字典给data参数,字典在发出请求时会自动编码为表单形式。  

也可以为data参数传入一个元组。 在表单中多个元素使用同一个key的时候,这种方式尤其有效。

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

如果传递的是一个string而不是dict, 那么数据就会被直接发出去。

>>> import json

>>> url = 'https://api.github.com/some/endpoint'

>>> payload = {'some': 'data'}

>>> r = requests.post(url, data=json.dumps(payload))

 

还可以用json参数直接传递, 它会被自动编码。

>>> url = 'https://api.github.com/some/endpoint' >>> payload = {'some': 'data'} >>> r = requests.post(url, json=payload)

 

如用format, 则用两个{{表示原本{代表

def addCourse(self, name, desc, display_idx=1):

data = {

'action': 'add_course',

方法1:# 'data': '{"name":"%s", "desc":"%s", "display_idx":"%s"}'%(name,desc,display_idx)

方法2:'data':f'''{{

"name":"{name}"

"desc":"{desc}",

"display_idx":"{display_idx}

}}'''

方法3: # 'data':'''{{

# "name":"{}"

# "desc":"{}",

# "display_idx":"{}

# }}'''.format(name,desc,display_idx)

}

rsp = requests.post(BASEURL,data=data)

 

Body:

x-www-form-urlencode方式,即表单方以式, 用这个消息头会自动加上Content-Type: x-www-form-urlencode方式,参数放在data里

Content-Type: application/json 以json参数发出去,  参数传给json= 参数

xml格式: 也是传到data里

 

参数是字典,用Data,会自动采用Content-Type:x-www-form-urlencode方式, 如果是普通字符串, Heade头里不会加上Content-Type, 此时,就直接在heads里直接加上Content-Type。

 

响应:

r = requests.post(...) 返回的r是一个响应对应

r.text 消息体内容, 这个返回的是一个字符串

r.status_code 响应状态码

Request还附带了一个内置的状态码查询对象 r.status_code == requests.codes.ok 返回True或False

如果发送了一个错误请求(4xx,5xx),可以通过rsp.raise_for_status()来抛出异常。如果是200, 返回None

 

r.headers() 返回响应头,返回的是一个字典,这个字典比较特殊,响应头字段是大小写不敏感的。 r.headers['Content-Type'],r.headers['Content-Type']两者是一样的。

 

assert '"retcode":0' in r.text ---一种断言。  这种方法不太好,要写得非常小心。 

 

retObj = r.json() #将响应的字符串转化为对应的python对象。

比如转化为字典或是列表。

 

Cookies

访问cookie: r.cookies['cookie_name']

要想发送你的cookies到服务器,可以使用 cookies 参数:

>>> url = 'http://httpbin.org/cookies' >>> cookies = dict(cookies_are='working') >>> r = requests.get(url, cookies=cookies) >>> r.text

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值