postman的使用:
发起一个请求:
1、请求地址
https://v4.ketangpai.com/UserApi/login
2、请求方法:post
值 | 描述 |
---|---|
applicaiton/x-www-form-urlencode | 表单提交方式 |
multipart/form-data | 在使用包含文件上传控件的表单时,必须使用该值。 |
application/json | 作为请求头告诉服务端消息主体是序列化的JSON字符串。 |
text/plain | 空格转换为 “+” 加号,但不对特殊字符编码。 |
3、请求数据
======================================================================================================================================
get:params参数:支持字典类型。与请求url拼接的参数
post:
data参数,支持字典类型。默认它的content-type是applicaiton/x-www-form-urlencode
其它的conten-type都可以使用data参数,但是data参数的值就不是字典了,然后在请求头当中指定content-type
json参数,字典类型。默认它的content-type是application/json
http请求库:requests
安装:pip install requests
session鉴权
Session类 - 自动带上cookies
1、实例化Session类
token鉴权
get,post...
加密处理。。
get:params参数:支持字典类型。与请求url拼接的参数
post:
data参数,支持字典类型。默认它的content-type是applicaiton/x-www-form-urlencode
其它的conten-type都可以使用data参数,但是data参数的值就不是字典了,然后在请求头当中指定content-type
json参数,字典类型。默认它的content-type是application/json
代码如下:
import requests
# 实例化一个会话对象
s = requests.Session()
# 发起登陆请求
url = "https://v4.ketangpai.com/UserApi/login"
req_data = {
"email": "2501768591@qq.com",
"password": "yuan5311645",
"remember": "0"
}
# 登陆请求
s.post(url, data=req_data)
# 发起下一个请求
url2 = "https://v4.ketangpai.com/VipApi/isVip"
resp = s.get(url2)
print(resp)
print(resp.status_code) # 获取响应状态码
print(resp.json())
""" 响应数据 - 如果接口的响应数据是json格式 ,可以用这个方法。这个方法执行后的结果,是一个字典。 """
print(resp.headers) # 响应头
print(resp.cookies) # 响应的cookies
=============================================================
requests_token 鉴权
import requests
url = "https://openapiv5.ketangpai.com/UserApi/login"
req_data = {"email":"2501768591@qq.com",
"password":"yuan5311645",
"remember":"0",
"code":"",
"mobile":"",
"type":"login"}
resp = requests.post(url, json=req_data)
resp_dict = resp.json()
token = resp_dict["data"]["token"]
print(token)
url2 = "https://openapiv5.ketangpai.com/CourseApi/semesterList"
req_data2 = {"isstudy":"0","search":""}
req_header = {"token": token}
resp2 = requests.post(url2,json=req_data2, headers=req_header)
print(resp2.json())
===============================================================
使用requests发登录请求:
import requests
# ==================== 注册接口 =========================================
# 请求头
headers = {
"X-Lemonban-Media-Type":"lemonban.v2 "
}
"""注册 url 地址"""
url = 'http://api.lemonban.com/futureloan/member/register'
# 请求体
req_data = {
"mobile_phone":"13560748369",
"pwd":"wtg444444",
"reg_name":"白糖"
}
# 请求类型:post
resp = requests.post(url,json=req_data, headers=headers)
print("注册的相应结果:{}".format(resp.text))
# ============================ 登录接口 =====================================
"""登录 url 地址"""
url = 'http://api.lemonban.com/futureloan/member/login'
headers = {
"X-Lemonban-Media-Type":"lemonban.v2 "
}
# 请求体
req_data = {
"mobile_phone":"13560748369",
"pwd":"wtg444444"
}
# 请求类型:post
resp = requests.post(url,json=req_data,headers=headers)
print(f"登录的相应结果:{resp.text}")
# 提取出来,给到下一个接口作为请求
json_res = resp.json()
token = json_res["data"]["token_info"]["token"]
print(token)
# 提取用户 id
member_id = json_res["data"]["id"]
print(member_id)
# ===================== 充值接口 =============================================
# 请求头
headers = {
"X-Lemonban-Media-Type":"lemonban.v2 ",
"Authorization": "Bearer {}".format(token)
}
"""充值 url 地址"""
url = 'http://api.lemonban.com/futureloan/member/recharge'
# 请求数据
req_data = {
"member_id": member_id,
"amount": 16000
}
resp = requests.post(url, json=req_data, headers=headers)
print(resp.json())
========================================================
my_requests.py – 根据项目特色去封装的请求,比如请求头定制/鉴权处理
import requests
class MyRequests:
# 初始化
def __init__(self):
self.headers = {"X-Lemonban-Media-Type": "lemonban.v2 "}
# 属性
# 方法
def send_requests(self, url, method(咩着子), json=None, params(伯略而子)=None, token=None):
self.__deal__header(token)
# 调用 requests 的方法发起一个请求。并得到相应结果
if method.upper()== "GET":
resp = requests.request(method, url, params=params, headers=self.headers)
else:
resp = requests.request(method, url, json=json, headers=self.headers)
return resp
def __deal__header(self, token=None):
if token:
self.headers["Authorization"] = "Bearer {}".format(token)
==============================================================
用例设计上花的时间(某个接口):
1、了不了解这个接口业务?或者熟不熟系统的业务?
2、有详细接口文档吗? 了解这个接口的过程长吗?
3、接口复杂吗?接口涉及的业务复杂吗?- 疏理逻辑/前置准备工作多吗?参数的组合多不多?
强烈建议大家去看看自己项目的接口都长啥样,去设计一个测试用例。
这是一个熟能生巧的过程。
最开始的时候,规定一天写两个接口的用例,后来发现有点时候,一天一个接口都写不完,因为实在是有些逻辑没搞懂啊!
你如果对这个东西懂了之后,你设计用例就很快了。写起来搜搜的。
比如:你设计 5 个接口花了三天时间,用例数达到了300条。就可以知道一天写了多少条用例,取平均数。
自动化覆盖率怎么样 这个怎么回答?
1、你做这个项目的接口自动化多久了?
如果你的参与时间,只有三个月或者一两个月,那是不可能达到百分之90的,百分之70都很难,还要搭建框架等等都需要时间。
2、系统大不大?是否复杂?
系统很大,比如系统有 6000 个接口? 覆盖率:如果是一个人做的接口,覆盖率是30%、70%、80% 都是可以的。
覆盖率:功能上/手工用例覆盖率 - 30% - 90%
覆盖率用例多少条?遇到什么困难(及解决方案)?
不想听你写代码上的困难(实现逻辑上)…
正确的回答方式:处理某个业务上遇到的设计困难。
你怎么搭建自动化测试框架的?