python,requests请求

python,requests请求

一.它的作用

1.为什么要用python写requests请求。

相当于浏览器给服务器发送请求,用来测试。
使用自动化的方式可以短时间执行多条用例,方便,快捷。

2.这和postman,jmeter有什么区别。

原理是一样的,但工具可能会出问题。

二.可以怎么用

1.准备工作:

1.来到网站的登录界面,按F12/右键选择检查。
选择network,选择XHR。(一种json格式)

2.登录。没有这个过程,无法查看到输入值。

3.(如果有commit可以点击它,没有只是找的麻烦点)可以看到有一个login的,选择它。可以找到请求中有输入的值。

2.获得登录后的响应值

新建一个普通python文件
下面代码:获取响应状态码,响应体(正文),打印。

import requests      #导入requests包

url = 'http://192.168.10.122:8080/login'       #请求地址
method = 'post'     #post请求
datas = {'username':'admin','password':'123456'}  #请求数据,字典类型
         
response = requests.post(url,data=datas)     #请求响应,其中请求中data=,是格式,呈紫色。

print(f"响应状态码:{response.status_code}")

#.json()是响应体,返回的字典类型,看一下啊。
print(f".json的类型:{type(response.json())}")
dict1 = response.json()

print("响应正文:")
for i in dict1:
    print(f"{i}:{dict1[i]}")

print(f"响应正文中的Admin-token:{dict1['Admin-Token']}")
3.测试:对比获取值,自己输入的预期值。

新建一个Python unit test 文件
下面代码目的:判断状态码,以及主体中的code是否符合预期。

import unittest    #此文件自带
import requests    #导入requests包

#把cookie写死,不重新登录没问题。
COOKIES = {"Admin-Token": "2edd18b2407442d5a752d68ccbcf27f7"}

class MyTestCase(unittest.TestCase):
    def test_delete_task(self):

		#这是一些请求数据
        url="http://192.168.10.188:8080/task/deleteTask"
        datas = {"taskId": "s602"} # 任务id 写错误的
        method='POST'

		#请求后的响应
        response = requests.post(url, data=datas,cookies=COOKIES,timeout=3)

		#判断状态码,msg=,是格式
        self.assertEqual(response.status_code, 200,msg='错误原因:状态码不是200')

		#.json是响应体,字典格式。把此内容赋予给body。
        body=response.json()
		#判断响应体重中code是否为0
        self.assertEqual(body['code'], 0, msg='错误原因:code不为0')

#表示执行所有主方法
if __name__ == '__main__':
    unittest.main()
4.测试:用ddt,参数分离。多次对比获取值,自己输入的值。

新建一个Python unit test 文件
下面代码:打印参数。

import unittest    #自带
import requests    #导入requests包
import ddt         #导入ddt,这样就可以测试数据--分离

COOKIES = {'Admin-Token':'e67ca51f3e364460b2b9c7030e0a1075'}

@ddt.ddt      #加装饰器,下面类就可以使用,和类中间不要隔东西
class MyTestCase(unittest.TestCase):

	#ddt中data方法,可以多个,多组数据。
    @ddt.data('508','509','510')
    def test_ddt_unpack(self,parm1):  #要写个一个parm1变量,会自动对应data中的值。
        print(f'{parm1},{parm2}')

	@ddt.data( ('测试1','598'),('测试2','599'),('测试3','600') )
    @ddt.unpack     #不要写成ddt.unpack(),用来解压元组。
    def test_ddt_unpack(self,parm1,parm2): #写两个变量,每次自动对应元组里的第一个,第二个值。
        print(f'{parm1},{parm2}')

if __name__ == '__main__':
    unittest.main()
5.测试:用csv文件来存参数。可以存传入值,预期值。

1.用excel表写好参数,转换成csv文件。用npp转换编码。放到pychram中。
2.写一个方法,用来获取csv文件。
3.可以写请求了。

导入csv文件的方法

import csv  #导入csv包
#函数的实现 path :测试数据的路径
def getList(path):
    file = open(path, mode='r', encoding='utf-8')   #用utf-8
    list1 = csv.reader(file)
    data_list = []
    for t in list1:
        # print(f"{t}, {type(t)}")
        data_list.append(t)
    file.close()
    return data_list

if __name__ == '__main__':
    # 如何调用:
    #sList = getList('测试数据副本1.csv')   
    #获取文件,sList代表那个文件了。输入所在路径以及文件、若在同一文件夹中直接输入名字即可

	#csv文件为一个字典
    #for data in sList:
    #    print(data)
    pass

测试代码:

import unittest    #自带	
import requests    #导入requests
from mytest1.csv_get import getList    #导入方法,可以使用csv文件
import ddt        #导入ddt


COOKIES = {'Admin-Token':'e67ca51f3e364460b2b9c7030e0a1075'}
@ddt.ddt
class MyTestCase(unittest.TestCase):
    
    #获取参数列表
    slist = getList('测试数据副本1.csv')

	#使参数可以分离。这样获取的参数就可以使用进去。
    @ddt.data(*slist[1:])
    #获取的是一个字典,要解压
    @ddt.unpack   

    def test_delete_task(self,surl,id,taskId,expect_result,actual_result,wpass):
        print(f'url={surl},id={id},taskId={taskId},expect_result={expect_result}')

        url = surl
        method = 'post'
        datas = {'taskId':taskId}
        response = requests.post(url,data = datas,cookies = COOKIES)

        body = response.json()
        print(f'响应体code:{body["code"]}')

        expect_result_code = eval(expect_result)
        # {'code': 0} --转换成字典类型
        # 等同于 expect_dict = json.loads(expect_result) # {'code': 0}也放到一个字典中
        #如果要json则要导包:import json
        
        self.assertEqual(body['code'],expect_result_code['code'],msg=f'状态码不是{expect_result_code["code"]}')

if __name__ == '__main__':
    unittest.main()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zahid*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值