基于Requests实现接口测试

'''
    基于Requests实现接口测试
        1. 请求模拟的实现
            定义url、定义headers、定义body、定义其他的相关数据
            在Requests中传递的数据,基本都以字典格式为准。
        2. 请求方法的不同,body参数会有不同
            get请求:params
            post请求:data
        3. requests下发请求时,默认会返回一个response对象
        4. 其实所谓的接口测试,就是把接口正常调用一次。来看返回结果是否正常。
            不考虑代码本身的运行逻辑,只考虑运行时返回的响应结果是否正确,所以接口测试也是黑盒测试。
        5. 如果需要传递JSON格式的参数,一般有两种方法:
            1. 在post请求中,将data入参改为json入参,将接口传入的数据改为json格式,在get请求无效
            2. 在请求头中,设置Content-Type:Application/json,可以将参数转为JSON格式进行传递
        6. 不论业务多复杂,在请求模拟的时候,把需要的数据准备好,也可以适当修改响应的内容,便于后续的请求处理。
        7. 在接口测试中,基本上所有的数据都遵循字典的格式,获取特定内容都是通过key来获取
        8. 接口的断言是基于响应结果的文本进行assert关键字的调用来实现的
            接口是发送请求就会有响应,所以断言直接对返回的响应进行关键数据的断言即可
'''

import requests

# 1. 准备测试数据
# 定义接口的url
url = 'http://apihcc.fecmall.com/v1/account/login'
# 定义接口传入的数据
# body数据:并不是每一个请求都要有body信息,根据实际需要进行添加即可
data = {
    'username': 'admin',
    'password': 'admin123'
}
# headers数据:并不是每一个请求都要有头部信息,根据实际需要进行添加即可
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 '
                  'Safari/537.36'
    # 'Content-Type': 'Application/json;charset=utf-8'    # 设置请求数据为json格式
}
# 2. 模拟请求
res = requests.post(url=url, headers=headers, json=data)
print(res.text)
# requests.get()

# Cookies手动添加:1.伪造cookie信息,如果有比较复杂的业务处理,来生成cookie数据,则可以直接通过手动添加的方式伪造一个即可。
# print(res.cookies)
# for cookie in res.cookies:
#     print(cookie)
# cookies = requests.cookies.RequestsCookieJar()
# cookies.set('name', 'hcc')
# res.cookies.update(cookies)  # 将手动生成的cookies添加到响应之中

# print(res.cookies)
# 3. 解析响应,进行校验
# print(res)  # 200表示请求成功,其实这里是一个response对象
# print(res.text)  # 输出响应结果的文本信息,就相当于body信息转str,这里获取的是str,不是字典
# print(res.status_code)  # 获取本次请求的状态码
# print(res.request)  # res.request就是获取本次请求的相关信息,一般用于做调试
# print(res.cookies)
# for cookie in res.cookies:
#     print(cookie.name)
#     print(cookie.value)
# print(res.headers)  # 显示当前response的头部信息,如果想要获取其中特定数据,则通过key来获取
# print(res.json())  # 将响应的body转为json格式,便于通过key获取value
assert res.json()['status'] == 'success'
# url

# 获取多语言list接口的调用,涉及到接口关联业务。接口关联业务下,要做数据的关联,一定是在前一个接口调用完成后,先传参,再调用第二个接口
url1 = 'http://apihcc.fecmall.com/v1/languages'
# 请求参数
headers = {
    'access-token': res.json()['access-token']  # 将login接口返回的access-token设置为languages接口的头部参数
}
res1 = requests.get(url=url1, headers=headers)
print(res1.text)
'''
{
    "code":200,
    "message":"fetch all languages success",
    "data":
        [
            {
                "name":"en-US",
                "code":"en",
                "is_default":true
            },
            {
                "name":"zh-CN",
                "code":"zh",
                "is_default":false
                "demo":"niubi"
            },
            {
                "name":"fr-FR",
                "code":"fr",
                "is_default":false
            },
            {"name":"de-DE","code":"de","is_default":false},
            {"name":"es-ES","code":"es","is_default":false},
            {"name":"pt-PT","code":"pt","is_default":false},
            {"name":"ru-RU","code":"ru","is_default":false},
            {"name":"it-IT","code":"it","is_default":false}
        ]
    }
    此类格式的响应结果一般是在获取批量数据的时候会存在。一定记住一点:
        所有data中的数据要获取,都是通过下标来获取,而不是直接通过key来获取
'''
print(res1.json()['data'][1]['name'])  # 因为是字典与list嵌套,所以获取的时候,需要考虑key和下标的存在
print(res1.json()['code'])
print(res1.json()['message'])

'''
    在响应结果中,一般都会约定俗成地生成指定的字段Code,这个字段与响应状态码没有关系
    res.status_code 响应状态码   这个状态码不推荐作为断言校验点 这是http网络协议自带的数据
    res.json()['code'] 响应结果中的code字段     这个字段可以作为断言校验点   这是开发人员写入的数据
'''

# 响应结果的校验
assert res1.json()['code'] == 200

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值