python + requests + unittest 接口自动化进阶篇二
标签: python + requests + unittest 接口自动化进阶篇二 博客 51CTO博客
2023-07-27 18:24:12 153浏览
前言
本篇主要介绍 1,通过 headers 传递 cookie 值;2,处理响应为 xml 格式的接口断言。
一、Cookie 的使用之通过 Headers 传参
上篇中,我们介绍了登录接口返回 cookies ,其他接口接收 cookies 值后,直接通过参数传递;
但是并不是所有的接口都需要用到 cookie ,如果通过参数传递,则封装请求的 getattr 函数中,就需要多一个 cookies 参数,不需要用到 cookie 的接口也需要传参,故接下来介绍将 cookie 添加到 headers 中进行传递;
注:
本例中,接口 Cookie 格式如下:
实现方式:
登录接口返回 cookie :
@classmethod
def TestduLogin(cls):
url = "http://www.testingedu.com.cn/mypro/api/user/login"
params = {}
params["username"] = "15002455182"
params["pwd"] = "liping0405"
headers = {}
headers["Content-Type"] = "application/json;charset=UTF-8"
res = requests.post(url=url, json=params, headers=headers, verify=False)
return res.cookies
将 cookie 放到 headers 中,这样封装请求的 getattr 方法中就不用增加 cookies 参数了,那么则不需要每个函数调用 getattr 方法时,都需要传 cookies 了。
class TestMultipart(unittest.TestCase):
def setUp(self):
print("setup")
self.log = LoggerHelper().getLogger()
self.cook = requestUtil.RequestsUtil.TestduLogin()
print("原始 cookie")
print(self.cook)
print(type(self.cook))
# 使用 utils.dict_from_cookiejar 将 cookies 数据类型转化为字典
self.cookies = requests.utils.dict_from_cookiejar(self.cook)
# 使用 utils.dict_from_cookiejar 将 cookies 数据类型转化为字典
self.cookies = json.dumps(self.cookies)
data = json.loads(self.cookies)
self.sessionid = data.get("sessionid")
self.cookies = "sessionid=" + self.sessionid
def test_Multipart(self):
headers = {}
headers["Cookie"] = self.cookies
二、响应为 XML 的接口断言
1,安装 lxml
pip install lxml
2,导入 etree 模块
from lxml import etree
3,参数从 xml 文件中读取,但因为读取 xml 响应体内容时,需要 response 格式,故请求相关内容写在该接口函数中,并未调用封装好的 getattr ;
<?xml version="1.0" encoding="UTF-8"?>
<datas>
<testXmlRes>
<methodtype>get</methodtype>
<url>https://search.itunes.apple.com/WebObjects/MZSearchHints.woa/wa/hints?clientApplication=Software&term=微信</url>
<params>{}</params>
<headers>{}</headers>
</testXmlRes>
</datas>
def test_XmlRes(self):
data = parseXML.DataProvider(psetting.ROOT_DIR + "/TestData/TestXmlRes.xml")
url = data.getValue("testXmlRes", "url")
self.log.info("test_testXmlRes url %s" % url)
params = data.getValue("test_testXmlRes", "params")
headers = data.getValue("test_testXmlRes", "params")
res = requests.get(url=url, params=params, headers=headers)
status = res.status_code
self.log.info("return result status %s res %s" % (status, res))
print(res.status_code, self.__toJsonObject(res.text))
xml = etree.XML(res.content)
result = xml.xpath('//key')
result = result[1].text
print(result)
if (status == 200):
self.assertIsNotNone(res, "返回结果不应为空")
self.assertEqual("hints", result,"返回值有误")
else:
self.assertEqual(200, status, "返回状态码应为200")
self.assertIsNotNone(res, "返回结果不应为空")
运行结果:
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
展开评论