requests --接口测试

#! /usr/bin/env python
# -*- coding:utf-8 -*-
# author:张红

#unittest 接口测试 对暴风平台的测试
import json
import unittest
import requests
'''
unittest 测试用例的基本步骤:
1 前置动作
2 执行
3 后置动作
4 断言
'''


def writeID(filename,countent):
with open(file=filename,mode='w')as f:
f.write(countent)


def getID(filename):
with open(file=filename,mode='r')as f:
return f.read()


class Fengbao(unittest.TestCase):
#数据格式是json,如果要用data参数,就需要对请求参数进行序列化处理
def setUp(self) -> None:
dict1={"username":"13484545195","password":"asd888"}
r=requests.post(
url='http://47.95.142.233:8000/login/auth/',
data=json.dumps(dict1),
headers={'Content-Type':'application/json;charset=UTF-8'}

)
# 产品登录成功后,会生成一个token,我们再访问其他页面的时候会带上这个token,为了方便,我们把它写入到一个文件中
# 文件名是token,参数是从响应对象中获取的token值
writeID(filename='token',countent=r.json()['token'])


# 这个pass是后续没有任何操作
def tearDown(self) -> None:
pass

# 由于多处都用到这个请求头 ,在这个把这个请求头单独写出来了,之后需要的时候只需要调用即可
def headers(self):
return {'Authorization':'JWT {token}'.format(token=getID(filename='token'))}


# 定义一个增加产品的函数
def addProduct(self,name,product_type,version,master,description):
r=requests.post(
url='http://47.95.142.233:8000/interface/product/',
# json={"name":"1","product_type":"WEB","version":"1","master":"1","description":"1"},
json={"name":name,"product_type":product_type,"version":version,"master":master,"description":description},
headers=self.headers()
)
writeID(filename='productID',countent=str(r.json()['id']))
return r


# 定义一个删除产品的函数
def delProduct(self):
r = requests.delete(
url='http://47.95.142.233:8000/interface/product/{productID}/'.format(productID=getID(filename='productID')),
headers=self.headers()
)
return r


# 定义一个修改产品的函数(形式参数:定义函数命名或过程的时候命名的参数,只是作为一个记号)
def modifyProduct(self,name,product_type,version,master,description):
# id=int(getID(filename='productID'))
r=requests.put(
url='http://47.95.142.233:8000/interface/product/{productID}/'.format(productID=getID(filename='productID')),
headers=self.headers(),
json={"name":name,"product_type":product_type,"version":version,"master":master,"description":description}
)
return r


# 定义一个查询产品的函数
def productQuery(self,queryname):
r=requests.get(
url='http://47.95.142.233:8000/interface/products?name=',
headers=self.headers()
)
return r


# 测试首页
def test_fengbao_index(self):
r=requests.get(
url='http://47.95.142.233:8000/interface/index',
headers=self.headers()
)
self.assertEqual(r.json()['count']['api'],0)
self.assertEqual(r.status_code,200)


# 测试添加产品(实际参数:就是在执行的时候,调用函数或过程时,传递给函数或过程的参数)
def test_addProduct(self):
r=self.addProduct(name='无涯',product_type='WEB',version='1',master='1',description='1')
self.delProduct()
self.assertEqual(r.status_code,201)


# 测试删除产品
def test_delProduct(self):
self.addProduct(name='无涯',product_type='WEB',version='1',master='1',description='1')
r=self.delProduct()
self.assertEqual(r.status_code,204)


# 测试修改产品名称
def test_modifyProduct_name(self):
self.addProduct(name='无涯',product_type='WEB',version='1',master='1',description='1')
r=self.modifyProduct(name='小明',product_type='WEB',version='1',master='1',description='1')
self.delProduct()
self.assertEqual(r.json()['name'],'小明')
self.assertEqual(r.status_code,200)


# 测试修改产品类型
def test_modifyProduct_product_type(self):
self.addProduct(name='无涯',product_type='WEB',version='1',master='1',description='1')
r=self.modifyProduct(name='无涯',product_type='APP',version='1',master='1',description='1')
self.delProduct()
self.assertEqual(r.json()['product_type'],'APP')
self.assertEqual(r.status_code,200)


# 测试修改产品版本
def test_modifyProduct_version(self):
self.addProduct(name='无涯', product_type='WEB', version='1', master='1', description='1')
r = self.modifyProduct(name='无涯', product_type='WEB', version='1.2', master='1', description='1')
self.delProduct()
self.assertEqual(r.json()['version'],'1.2')
self.assertEqual(r.status_code,200)


# 测试修改产品负责人
def test_modifyProduct_master(self):
self.addProduct(name='无涯', product_type='WEB', version='1', master='1', description='1')
r = self.modifyProduct(name='无涯', product_type='WEB', version='1', master='花', description='1')
self.delProduct()
self.assertEqual(r.json()['master'],'花')
self.assertEqual(r.status_code,200)


# 测试修改产品描述
def test_modifyProduct_description(self):
self.addProduct(name='无涯', product_type='WEB', version='1', master='1', description='1')
r = self.modifyProduct(name='无涯', product_type='WEB', version='1', master='1', description='这个是软件测试的练习')
self.delProduct()
self.assertEqual(r.json()['description'],'这个是软件测试的练习')
self.assertEqual(r.status_code,200)


# 测试模糊查询
def test_productQuery_vague(self):
self.addProduct(name='无涯', product_type='WEB', version='1', master='1', description='1')
r=self.productQuery(queryname='无')
self.delProduct()
self.assertEqual(r.status_code,200)


# 测试精确查询
def test_productQuery_accurate(self):
self.addProduct(name='无涯', product_type='WEB', version='1', master='1', description='1')
r = self.productQuery(queryname='无涯')
self.delProduct()
self.assertEqual(r.status_code,200)


# 测试默认查询
def test_productQuery_search(self):
self.addProduct(name='无涯', product_type='WEB', version='1', master='1', description='1')
r = self.productQuery(queryname='')
self.delProduct()
self.assertEqual(r.status_code,200)


if __name__ == '__main__':
unittest.main(verbosity=2)
posted @ 2022-06-22 15:14  净植  阅读(107)  评论(0)    收藏  举报