pyhton单元测试之requests

前提

	pip install requests

一,get的请求

1.1,GET 无餐请求

	r = requests.get('http://www.baidu.com')

1.2:GET传参

payload = {'key1': 'value1', 'key2': 'value2', 'key3': None}
 r = requests.get('http://www.baidu.com ', params=payload)

案例:测试聚合数据

import requests 
class UseRequestClass(): #get传参的第一种方式 
	def XWTTMethod(self): 
		r = requests.get("http://v.juhe.cn/toutiao/indextype=guonei&key=4b72107de3a197b3bafd9adacf685790") 
		print(r.text,r.json(),r.status_code) #get传参的第二种方式 
	def XWTTMethod(self): 
		params = {"type":"guonei","key":"4b72107de3a197b3bafd9adacf685790"} 
		r = requests.get("http://v.juhe.cn/toutiao/index",params=params) 
		print(r.text)

在这里插入图片描述

二,post请求

类似python中的表单提交

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

案例:测试聚合数据

import requests 
class UseRequestClass(): 
	def XWTTPostMethod(self): 
		params = {"type":"guonei","key":"4b72107de3a197b3bafd9adacf685790"} 
		r = requests.post("http://v.juhe.cn/toutiao/index",data=params) 				  #print(r.json()) 
		return r.json()

三,Requests响应

r.status_code 响应状态码 r.heards 响应头
r.cookies 响应cookies r.text 响应文本
r.json() 响应的字典类型数据
r. encoding 当前编码
r. content 以字节形式(二进制)返回

最常用的是根据响应状态码判断接口是否连通,经常用于做接口中断言判断

四,Request扩充

1:添加等待时间
requests.get(url,timeout=1) #超过等待时间则报错
2:添加请求头信息
requests.get(url,headers=headers) #设置请求头
3:添加文件
requests.post(url, files=files) #添加文件

文件传输

url = 'http://httpbin.org/post' 
files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=files)

五 requests+unittest+HtmlTestRunner/requests+pytest+allure

5.1:流程如下

  • 读取文件中的数据 requests
  • 拿到数据请求接口返回状态码
  • 通过断言验证返回的数据和预期结果
  • 生成allure的测试报告

5.2:模块总览

dataDemo(存放数据)>> readDemo(读取数据)>> restDemo(发送请求生成报告)

在这里插入图片描述

5.3读取csv文件流程

5.3.1:存储数据(csv)

在这里插入图片描述

5.3.2:读取数据(readDemo)

在这里插入图片描述

代码展示

import csv 
class ReadCsv(): 
	def readCsv(self): 
	item = [] 
	rr = csv.reader(open("../dataDemo/123456.csv")) 
	for csv_i in rr: 
		item.append(csv_i) 
	item = item[1::] 
	return item

5.3.3:在测试用例中执行requests请求,验证预期结果和实际结果

在这里插入图片描述

import unittest,requests 
from readDemo.readcsv import ReadCsv 
rc = ReadCsv()
lists = rc.readCsv() 
class APIClass(unittest.TestCase): 
	def test001(self): 
		for list_i in lists: 
			cs = eval(list_i[1]) 
			if list_i[2] =="get": 
			objects = requests.get(url = list_i[0],params=cs) 
			self.assertEqual(objects.json()["error_code"],int(list_i[3])) 
			else:
			objects = requests.post(url=list_i[0], data=cs) 
			self.assertEqual(objects.json()["error_code"], int(list_i[3])) 
if __name__ == '__main__': 
unittest.main()

5.3.4:生成测试报告

在这里插入图片描述

from dataDemo.HTMLTestRunner import HTMLTestRunner 
from restDemo.requests001 import APIClass import unittest 
class HtmlClass(): 
	def htmlmetohd(self): 
		suite = unittest.TestSuite() # 创建测试套件 
		case_list = ["test001"] 
		for case in case_list: 
			suite.addTest(APIClass(case)) 
		with open("../report.html", "wb") as f: 
		HTMLTestRunner(stream=f, 
						title="单元测试", 
						description="测试一期", 
						verbosity=2 ).run(suite) 
hc = HtmlClass() 
hc.htmlmetohd()

6.4:读取excle文件流程

6…4.1:存储数据(xlsx)

在这里插入图片描述

6.4.2:读取数据(readDemo)

在这里插入图片描述

代码展示

from openpyxl import load_workbook 
class UseExcel(): 
	def get_TestExcel(self): # 打开表 
		workbook = load_workbook('D:\install\python\python\Test_allure\DataDemo\test1.xlsx') # 定位表单 
		sheet = workbook['Sheet1'] print(sheet.max_row) #3 行 
		print(sheet.max_column) #3 列 
		test_data = []
#把所有行的数据放到列表中 
		for i in range(2,sheet.max_row+1): 
		sub_data = {}#把每行的数据放到字典中 
			for j in range(1,sheet.max_column+1): 
				sub_data[sheet.cell(1,j).value] = sheet.cell(i,j).value 
				test_data.append(sub_data)#拼接每行单元格的数据 
		return test_data 
t = UseExcel() 
f = t.get_TestExcel() 
print(f)

6…4.3测试用例中发送请求,设置断言并生成测试报告中

在这里插入图片描述

import requests,pytest,os,allure 
from readDemo.readexcel import UseExcel 
ue = UseExcel() 
data= ue.get_TestExcel() 
class TestExcelClass():
 	def test001(self): 
 		for list_i in data: 
 			path = eval(list_i["parameter"]) 
 			if list_i["method"] =="get": 
 				objects = requests.get(url=list_i["url"],params=path) 
 				assert objects.json()["error_code"] == int(list_i["assert"]) 
 			else:
 				objects = requests.post(url=list_i["url"],data=path) 
				assert objects.json()["error_code"] == int(list_i["assert"]) 
 if __name__ == '__main__': # 生成测试报告json 
 pytest.main(["-s", "-q", '--alluredir', 'report/result', 'request002.py']) # 将测试报告转为html格式 
 split = 'allure ' + 'generate ' + './report/result ' + '-o ' + './report/html ' + '--clean' os.system('cd D:\install\python/python\Test_allure\Test/test\report') 
 os.system(split)

测试报告展示

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值