python + requests + unittest 接口自动化进阶篇二

奋斗吧
奋斗吧
擅长邻域:未填写

标签: python + requests + unittest 接口自动化进阶篇二 博客 51CTO博客

2023-07-27 18:24:12 153浏览

python + requests + unittest 接口自动化进阶篇二,本篇主要介绍1,通过headers传递cookie值,2,处理响应为xml格式的接口断言。一、Cookie的使用之通过Headers传参上篇中,我们介绍了登录接口返回cookies,其他接口接收cookies值后,直接通过参数传递;但是并不是所有的接口都需要用到cookie,如果通过参数传递,则封装请求的getattr函数中,就需要多一个cookies参数,

前言

本篇主要介绍 1,通过 headers 传递 cookie 值;2,处理响应为 xml 格式的接口断言。

一、Cookie 的使用之通过 Headers 传参

上篇中,我们介绍了登录接口返回 cookies ,其他接口接收 cookies 值后,直接通过参数传递;

但是并不是所有的接口都需要用到 cookie ,如果通过参数传递,则封装请求的 getattr 函数中,就需要多一个 cookies 参数,不需要用到 cookie 的接口也需要传参,故接下来介绍将 cookie 添加到 headers 中进行传递;

注:

本例中,接口 Cookie 格式如下:

python + requests + unittest 接口自动化进阶篇二_xml

实现方式:

登录接口返回 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, "返回结果不应为空")

运行结果:

python + requests + unittest 接口自动化进阶篇二_cookie_02

好博客就要一起分享哦!分享海报

此处可发布评论

评论(0展开评论

暂无评论,快来写一下吧

展开评论

您可能感兴趣的博客

客服QQ 1913284695